Harbor是一个简单的基于Swift的异步/等待进行API请求的库。
- Swift 5
- iOS 13.0
您可以使用CocoaPods或Swift Package Manager将Harbor添加到项目中。
将以下行添加到您的Podfile中
pod 'Harbor'
将以下内容添加到您的Package.swift
文件中
dependencies: [
.package(url: "https://github.com/javiermanzo/Harbor.git")
]
要使用Harbor进行请求,如果您需要解析响应,您需要创建一个实现了HServiceProtocolWithResult
协议的类,或如果响应不需要解析,则创建一个实现了HServiceProtocol
的类。
class MyRequest: HServiceProtocol {
var url: String = "YOUR_URL/{PATH_PARAM}"
var httpMethod: HHttpMethod = .post
var headers: [String : String]?
var queryParameters: [String : String]? = nil
var pathParameters: [String : String]? = nil
var body: [String : Any]? = nil
var needAuth: Bool = true
var timeout: TimeInterval = 5
init() {
self.pathParameters = [
"PATH_PARAM" : "value"
]
self.body = [
"bodyParameter" : "value"
]
self.headers = [
"header" : "value"
]
}
}
class MyRequestWithResult: HServiceProtocolWithResult {
typealias T = MyModel
var url: String = "YOUR_URL/{PATH_PARAM}"
var httpMethod: HHttpMethod = .get
var headers: [String : String]?
var queryParameters: [String : String]? = nil
var pathParameters: [String : String]? = nil
var body: [String : Any]? = nil
var needAuth: Bool = true
var timeout: TimeInterval = 5
init() {
self.pathParameters = [
"PATH_PARAM" : "value"
]
self.queryParameters = [
"queryParameter" : "value"
]
self.headers = [
"header" : "value"
]
}
}
创建请求类后,您可以调用request
方法来执行请求。
Task {
let response = await MyRequestWithResult().request()
}
如果您使用HServiceProtocol
,调用request()
的结果将是一个HResponse
枚举。
switch response {
case .success:
break
case .cancelled:
break
case .error(let error):
break
}
如果您使用HServiceProtocolWithResult
,调用request()
的结果将是一个HResponseWithResult
枚举。
switch response {
case .success(let result):
break
case .cancelled:
break
case .error(let error):
break
}
如果您需要处理身份验证,也可以实现HAuthProviderProtocol
协议。
通过将setAuthProvider
方法设置到Harbor
类中,以设置身份验证提供者。
之后,您必须创建一个实现了HAuthProviderProtocol
的类。
class MyAuthProvider: HAuthProviderProtocol {
func getCredentialsHeader() -> [String : String] {
// Return the authentication headers
}
}
之后,您必须设置您的Auth提供者
Harbor.setAuthProvider(MyAuthProvider())
如果请求类中将needAuth
属性设置为true
,Harbor将在执行请求之前调用身份验证提供者的getCredentialsHeader
方法来获取身份验证头。
您可以在请求正在运行时取消请求的任务。《request()`将返回 cancelled.
let task = Task {
let response = await MyRequestWithResult().request()
}
task.cancel()
您可以使用HDebugServiceProtocol
协议打印关于您请求的调试信息。在请求类中实现该协议。
class MyRequest: HServiceProtocolWithResult, HDebugServiceProtocol {
var debugType: HDebugServiceType = .requestAndResponse
....
}
debugType
定义了您要在控制台中打印的内容。选项是none, request, response or requestAndResponse
。
当您的请求被调用时,您将看到Xcode控制台上有关您的请求的信息。
如果您遇到任何问题,请提交问题。《pull requests也受欢迎!
Harbor是由Javier Manzo创建的。
Harbor可在MIT许可下使用。有关更多信息,请参阅LICENSE
文件。