NetworkLayer
APLNetworkLayer 为 Apple 的网络框架提供了一个方便的接口,提供了常用的功能。
此网络层是对 Apple 的网络类和函数的包装,允许用 Swift 便捷地使用。它提供了 iOS 开发中网络调用所需的所有常用功能。
APLNetworkLayer 的特性列表
- 可以创建带有基础 URL + 相对 URL 或绝对 URL 的请求
- 创建不同类型的请求:GET、POST、PUT、DELETE
- 设置全局请求超时或特定请求的超时
- 使用接口构建,以便可以 mock 以用于测试
- 默认使用设备首选语言创建 Accept-Language 标头
- 请求失败时自动重试
- 提供执行身份验证、令牌刷新或其他类似任务的接口
- 监听网络可达性和状态
- 不使用外部库,无依赖
- 便捷的请求包装器,允许以 PromiseKit 样式的完成处理程序链式调用
目录
安装
CocoaPods
将此添加到您的 Podfile
pod "APLNetworkLayer"
用法
使用 HTTP 工厂创建一个客户端配置和一个 HTTP 客户端
guard let baseUrl = URL(string: "https://example.com/example") else { return }
// example for default header, optional parameter
let defaultHeader = ["Application-Id": "123456Abc"]
guard let clientConfiguration = HTTPFactory.createConfiguration(baseURL: baseUrl, defaultHeader: defaultHeader) else { return }
let httpClient = HTTPFactory.createClient(configuration: clientConfiguration)
创建客户端后,可以使用它创建和执行 HTTP 请求
guard let request = httpClient.GETRequest(relativeUrl: relativeUrl) else {
let error = NSError(domain: "GetRequest", code: 0, userInfo: ["description": "Could not create get request with relative url \(relativeUrl)."])
completion(HTTPResult.failure(error))
return
}
let task = httpClient.createHTTPTask(urlRequest: request.urlRequest) { [weak self] (result: APLNetworkLayer.HTTPResult<HTTPResponse>) in
switch result {
case .success(let httpResponse):
self?.handleSuccess(httpResponse: httpResponse, completion: completion)
case .failure(let error):
completion(Result.failure(error))
}
}
或一次性创建和执行请求
let task = httpClient.GET(relativeUrl: relativeUrl) { [weak self] (result: APLNetworkLayer.HTTPResult<HTTPResponse>) in
switch result {
case .success(let httpResponse):
self?.handleSuccess(httpResponse: httpResponse, completion: completion)
case .failure(let error):
completion(Result.failure(error))
}
}
使用请求便捷方法
用户必须确保所使用的范围有意义且不重叠等。
httpClient.GET(relativeUrl: "...")
.statusCodeSuccess { (data, _) in
// handle data on success
}.catch { (data, _, _) in
// on any client or server error execute this block
}.start()
httpClient.GET(relativeUrl: "...)
.statusCode(200) { // on status code 200 execute this block }
.statusCode(401) { // on status code 401 execute this block }
.statusCode(..<410) { // on all status codes uo to 410 execute this block }
.statusCode(500...599) { // on status codes between 500 and 599 execute this block }
.anyStatusCode() { // on any status code not captured by other handlers execute this block }
.catch { // called on any error network or http status code within 400-599 }
.start()
这也可以通过绝对 URL 和不同类型的请求来完成。您可以完全配置客户端配置和请求的所有参数。
架构
许可
APLNetworkLayer 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。