/networking

Api client library

Primary LanguageSwift

Build Status

Networking Library

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:

  1. 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"
    }
}
  1. 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
    }
    
}
  1. Create DTO
//User DTO
struct User: Codable {
    let id: Int
    let name, username, email: String
}
  1. 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)
    }
}