SwiftyRequest 2.2.1

SwiftyRequest 2.2.1

Matt KilnerDavid JonesMathieu BarnachonAndrew LeesSwift-at-IBMDanny Sung 维护。



 
依赖
LoggerAPI~> 1.7
IBMSwiftCircuitBreaker~> 5.0
 

  • IBM

Kitura

APIDoc Build Status - Master macOS Linux Apache 2 Slack Status

SwiftyRequest

SwiftyRequest 是一个专为 Swift 构建的 HTTP 网络库。

SwiftyRequest 使用 URLSession 作为底层传输。由于 Linux 上的 URLSession 还没有完全实现,因此您可能会发现这个库在 Linux 上的可靠性不如 Darwin(参考 issue #24#25,其中第二个参考了一个 Foundation PR)。

内容

特性

  • 提供多种响应方法(例如 Data、Object、Array、String 等),以消除应用程序中的样板代码。
  • JSON 编码和解码。
  • CircuitBreaker 库的集成。
  • 身份验证令牌。
  • 多部分表单数据。

Swift 版本

此仓库支持 Swift 4.0.3 及更高版本。

安装

要利用 Swift 应用程序中的 SwiftyRequest 包,您应该在您的 Package.swift 文件中指定对其的依赖关系

添加依赖项

SwiftyRequest 添加到您的应用程序 Package.swift 文件中的依赖关系里。用最新的 SwiftyRequest 版本 替换 "x.x.x"

.package(url: "https://github.com/IBM-Swift/SwiftyRequest.git", from: "x.x.x")

SwiftyRequest 添加到目标依赖关系中

.target(name: "example", dependencies: ["SwiftyRequest"]),

用法

发送请求

使用 SwiftyRequest 发送 HTTP 请求时,创建一个 RestRequest 实例。`method` 参数是可选的(默认为 `GET`),`url` 参数是必需的。

RestRequest 的示例用法

import SwiftyRequest

let request = RestRequest(method: .get, url: "http://myApiCall/hello")
request.credentials = .apiKey

您可以在 HTTP 请求中自定义以下参数

  • headerParameters:构成请求消息头部部分的 HTTP 头字段。
  • credentials:请求的 HTTP 认证凭据。
  • acceptType:默认为 `application/json` 的 HTTP Accept 头。
  • messageBody:请求的消息正文。
  • productInfo:HTTP User-Agent 头。
  • :包含对在快速失败时将被调用的回退函数的引用的 CircuitParameters 对象(请参阅 Circuit Breaker 集成)。
  • contentType:默认为 application/json 的 HTTP Content-Type header
  • method:请求中指定的 HTTP 方法,默认为 `.get`。

调用响应

在这个示例中,responseToError只是一个错误处理函数。我们得到的response对象类型为RestResponse<String>,因此我们可以对response.result进行切换操作,以确定网络调用是否成功。

request.responseString(responseToError: responseToError) { response in
    switch response.result {
    case .success(let result):
        print("Success")
    case .failure(let error):
        print("Failure")
    }
}

使用模板参数调用响应

在这个示例中,我们用一个模板参数调用响应方法,以替换url中的{state}{city}的值。这允许我们使用同一个RestRequest对象创建多个响应调用,但可能使用不同的URL值。

let request = RestRequest(url: "http://api.weather.com/api/123456/conditions/q/{state}/{city}.json")
request.credentials = .apiKey

request.responseData(templateParams: ["state": "TX", "city": "Austin"]) { response in
	// Handle response
}

使用查询参数调用响应

在这个示例中,我们使用查询参数调用响应方法,将其附加到url的末尾,以便RestRequest执行以下urlhttp://api.weather.com/api/123456/conditions/q/CA/San_Francisco.json?hour=9。如果请求URL中已经指定了查询项,它们将被替换。

let request = RestRequest(url: "http://api.weather.com/api/123456/conditions/q/CA/San_Francisco.json")
request.credentials = .apiKey

request.responseData(queryItems: [URLQueryItem(name: "hour", value: "9")]) { response in
	// Handle response
}

断路器集成

SwiftyRequest现在提供了利用断路器库的额外内置功能,以提高应用稳定性。要使用此功能,只需将一个CircuitParameters对象提供给RestRequest初始化器。一个CircuitParameters对象将包含一个引用,指向在断路器快速失败时调用的回退函数。

回退

以下是一个回退闭包示例

let fallback = { (error: BreakerError, msg: String) in
    print("Fallback closure invoked... circuit must be open.")
}

CircuitParameters

我们初始化CircuitParameters对象并创建一个RestRequest实例。您需要为CircuitParameters设置的唯一值是fallback(其他默认值)。

let circuitParameters = CircuitParameters(timeout: 2000,
                                          maxFailures: 2,
                                          fallback: breakFallback)

let request = RestRequest(method: .get, url: "http://myApiCall/hello")
request.credentials = .apiKey,
request.circuitParameters = circuitParameters

此时,您可以使用以下章节中提到的任何响应方法。

响应方法

根据期望的结果类型,可以使用不同的响应方法,如下所述

  • responseData返回一个Data对象。
  • responseObject<T: Codable>返回一个类型为T的可编码对象。
  • responseObject<T: JSONDecodable>返回一个类型为T的对象。
  • responseArray<T: JSONDecodable>返回一个类型为T的数组。
  • responseString返回一个String
  • responseVoid返回Void

API文档

更多信息请访问我们的API参考

社区

我们热爱谈论服务器端Swift和Kitura。加入我们的Slack,结识我们的团队!

许可证

本库遵守Apache 2.0许可证。完整的许可证文本可在LICENSE中找到。