Tiny and simple framework to use in a project, with the most basic network request.
TODO:
- Improve documentation
- add unit test
- add class diagram
- add more use cases
Example how to use:
- Create an Endpoint’s extension to ser the scheme (https or http) and the host
extension Endpoint {
var scheme: String {
return "https"
}
var host: String {
return "jsonplaceholder.typicode.com"
}
}
- Create your endpoint with cases
enum UserEndpoint {
case all
case get(userId: Int)
}
Implement Endpoint
protocol
extension UserEndpoint: Endpoint {
var request: URLRequest? {
switch self {
case .all:
return request(forEndpoint: "/users")
case .get(let userID):
return request(forEndpoint: "/users/\(userID)")
}
}
var httpMethod: String {
switch self {
case .all, .get:
return "GET"
}
}
var httpHeaders: [String : String]? {
return nil
}
var queryItems: [URLQueryItem]? {
return nil
}
}
- Create
DTO
//User DTO
struct User: Codable {
let id: Int
let name, username, email: String
}
- Finally the request from
WebService
let webService = WebService()
webService.request(UserEndpoint.all) { (result: Result<[User], NetworkError>) in
switch result {
case .failure(let error):
print(error)
case .success(let users):
print(users)
}
}
webService.request(UserEndpoint.get(userId: 10)) { (result: Result<User, NetworkError>) in
switch result {
case .failure(let error):
print(error)
case .success(let users):
print(users)
}
}