APLNetworkLayer 0.9.1

APLNetworkLayer 0.9.1

由以下人员维护: Nico SchümannChristine PühringerTino RachuiAhmet Akbal



  • Christine Pühringer,Ahmet Akbal,Nico Schümann 和 Tino Rachui

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 文件。