ABNetworkKit
iOS 上面向协议的 HTTP 网络方法。
ABNetworkKit 是三个类型安全的 Swift 结构的封装器:class、struct 和 enum,分别对应于遵守 ABDispatcherProtocol
、ABOperationProtocol
和 ABRequestProtocol
的类。它使用 Foundation 的 URL 加载系统与 URL 交互,并通过标准 Internet 协议与服务器通信。它定义了 ABNetworkTypes
来封装请求信息、建立 URL 会话以及异步处理传入数据或错误到用户定义的 NetworkResponse
。
协议(Swift)
ABDispatcherProtocol
包含的 ABNetworkDispatcher
(可进行子类化)负责发起请求并将来自底层 URL 会话的信息直接转发。它遵守 ABDispatcherProtocol
public protocol ABDispatcherProtocol {
init(environment: ABEnvironment)
init(environment: ABEnvironment,
configuration: URLSessionConfiguration,
delegateQueue: OperationQueue)
func execute(request: ABRequestProtocol,
completion:@escaping (ABNetworkResponse)->Void)
throws -> URLSessionTask?
}
ABOperationProtocol
需要一个 Operation struct 来将 HTTP 请求附加到 ABNetworkDispatcher
。它将遵守 ABOperationProtocol
public protocol ABOperationProtocol {
associatedtype Output
var request: ABRequestProtocol { get }
func cancel() -> Void
func execute(in dispatcher: ABDispatcherProtocol,
_ completion:@escaping (Output)->Void)
-> Void
}
ABRequestProtocol
需要创建一个请求枚举来封装构建URL Request所需的全部属性和操作,以便于对底层URL会话进行网络请求。它将遵循ABRequestProtocol
public protocol ABRequestProtocol {
var actionType: ABRequestAction { get }
var headers: [String: String]? { get }
var method: ABHTTPMethod { get }
var parameters: ABRequestParams { get }
var path: String { get }
var responseType: ABResponseType { get }
}
NetworkTypes (Swift)
ABEnvironment
ABEnvironment
封装了所有URL Requests的主机服务器地址、类型(自定义、开发、生产)以及通用头(如果有)。
public struct ABEnvironment {
public var headers: [String: String]?
public var host: String
public var type: ABEnvironmentType
init() {
self.host = ""
self.type = .none
}
public init(host: String, type: ABEnvironmentType) {
self.host = host
self.type = type
}
}
ABEnvironmentType
ABEnvironmentType
支持custom
类型,用于替换特定URLRequest的主机地址(例如,CDN地址),支持development
类型用于记录网络调用,以及production
类型用于LIVE服务器API。
public enum ABEnvironmentType {
case custom(String)
case development
case production
}
ABHTTPMethod
ABHTTPMethod
枚举列出了RESTful API的HTTP方法。
public enum ABHTTPMethod: String {
case delete = "DELETE"
case get = "GET"
case patch = "PATCH"
case post = "POST"
case put = "PUT"
}
ABRequestAction
ABRequestAction
表示支持的URLRequest操作类型。
public enum ABRequestAction {
case download(withProgressHandler: ((Float, String)->Void)?)
case standard
case upload
}
ABRequestParams
ABRequestParams
用于表示 GET 请求的参数或 POST 请求的请求体。
public enum ABRequestParams {
case body(_ : [String: Any]?)
case url(_ : [String: Any]?)
}
ABResponseType
ABResponseType
用于表示支持的 HTTP 响应类型。
public enum ABResponseType {
case file(nameWithExtension: String)
case json
}
ABNetworkResponse
ABNetworkResponse
处理器,用于将 HTTP 响应转换为相应的 ABResponseType
。
enum ABNetworkResponse {
case file(location: URL?, _: HTTPURLResponse?)
case error(_: Error?, _: HTTPURLResponse?)
case json(_: Any?, _: HTTPURLResponse?)
}
ABNetworkServices (Objective-C, Swift)
该基类负责为所有 HTTP 请求建立网络 URL 会话。它遵循 URLSessionTaskDelegate
并遵从 ABNetworkSecurityPolicy
。
有关更多信息,请参阅 使用说明。
使用 CocoaPods 安装
CocoaPods 是 Swift 和 Objective-C 的依赖管理器。ABStackKit 通过 CocoaPods 提供。您可以使用以下命令安装它
$ gem install cocoapods
Podfile
要安装它,只需将以下行添加到您的 Podfile 中
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
target 'TargetName' do
pod "ABNetworkKit"
end
然后,运行以下命令
$ pod install
用法
有关更多信息,请参阅 使用说明。
通讯
如果你有改进项目的办法
建议遵循 GitHub Swift 开发指南
谢谢!
待办
- 添加 Swift 包管理器支持
作者
Ashish Bhandari,[email protected]
许可
ABStackKit 适用于 MIT 许可证。更多信息请参阅 LICENSE
文件。