ABNetworkKit 0.1.0

ABNetworkKit 0.1.0

AshishBhandari 维护。



  • 作者
  • Ashish Bhandari

ABNetworkKit

iOS 上面向协议的 HTTP 网络方法。

ABNetworkKit 是三个类型安全的 Swift 结构的封装器:class、struct 和 enum,分别对应于遵守 ABDispatcherProtocolABOperationProtocolABRequestProtocol 的类。它使用 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 文件。