Если вы используете Alamofire, вы можете создать конечные точки, как показано ниже,
Создайте протокол, как показано ниже, и расширьте его для реализации по умолчанию.
import Foundation
import Alamofire
public protocol Endpoint {
var baseURL: String { get } // https://example.com
var path: String { get } // /users/
var fullURL: String { get } // This will automatically be set. https://example.com/users/
var method: HTTPMethod { get } // .get
var encoding: ParameterEncoding { get } // URLEncoding.default
var body: Parameters { get } // ["foo" : "bar"]
var headers: HTTPHeaders { get } // ["Authorization" : "Bearer SOME_TOKEN"]
}
public extension Endpoint {
var encoding: ParameterEncoding {
return method == .get ? URLEncoding.default : JSONEncoding.default
}
var fullURL: String {
return baseURL + path
}
var body: Parameters {
return Parameters()
}
var headers : HTTPHeaders{
return [:]
}
var baseURL : String{
return Config.baseUrl
}
}
Создайте перечисление для APIEndpoints и добавьте туда свои дела. Расширьте APIEndponts для ваших пользовательских случаев.
enum APIEnpoints {
case login(apiModel:APILogInRequest)
case home
}
extension APIEnpoints : Endpoint {
var path: String {
switch self{
case .login(_): return "/api/v1/user/get_auth_token/"
case .home: return "/api/v1/home/"
}
}
var method: HTTPMethod {
switch self{
case .login(_): return .post
case .home: return .get
}
}
var headers : HTTPHeaders{
return ["Authorization":"JWT " + authtoken]
}
var body: Parameters {
var body: Parameters = Parameters()
switch self {
case .login(let model):
body = model.toDictionary
break
case .home:
break
}
return body
}
}
И, наконец, вы можете использовать свои конечные точки, как показано ниже
let model = APILogInRequest.init("email","password")
//1
APIEnpoints.login(apiModel: model)
//2
APIEnpoints.home