Patron 构建状态

使用 JSON HTTP API

程序通常通过 HTTP 进行通信。在这种通信中,有效负载的事实标准表示法是 JSON。Patron Swift 包提供了一个简单的接口来与 HTTP 服务器发送和接收数据。它的目的是减少冗余的客户端代码,同时保持简单。

符号

Patron 对象表示远程 HTTP JSON 服务端点。

协议

JSONService 协议定义了一个 JSON 服务。

结构体

Patron

Patron 类是表示远程 HTTP JSON 服务端点的便捷方式。Patron 对象通过 GETPOST HTTP 方法提供对特定主机上单个服务的访问。它假定两个方向的有效负载都是 JSON。

由于 Patron 在调用线程上序列化 JSON 有效负载,因此最好不要从主线程使用它,相反,我建议您从 Operation 中运行它,或者将闭包分派到另一个队列。通常需要更多的工作,例如序列化,这应该从主线程卸载。

创建客户端

init(URL baseURL: URL, session: URLSession, log: OSLog)

为指定的 URL 上的服务创建一个客户端。

参数

返回值

返回新初始化的 Patron 客户端。

发起 GET 请求

@discardableResult func get(
  path: String,
  cb: @escaping (AnyObject?, URLResponse?, Error?) -> Void
) -> URLSessionTask

向远程 API 发起 GET 请求。

参数

返回值

一个正在执行的 URLSessionTask

示例

在 GitHub 上搜索 Swift Repos 并打印其名称。

import Foundation
import Patron

let github = URL(string: "https://api.github.com")!
let patron = Patron(URL: github, session: URLSession.shared)

patron.get(path: "/search/repositories?q=language:swift") { json, res, er in
  let repos = json!["items"] as! [[String : AnyObject]]
  let names = repos.map { $0["name"]! }
  print(names)
}

在此 repo 中包含的 Playground 中查找此示例。

查询字符串

如果您不想自己将路径连接在一起,则可以传递 URL 查询项。

@discardableResult func get(
  path: String,
  with query: [URLQueryItem],
  cb: @escaping (AnyObject?, URLResponse?, Error?) -> Void
) throws -> URLSessionTask

使用查询字符串向远程 API 发起 GET 请求。

参数

返回值

一个正在执行的 URLSessionTask

附加参数

为了获得更多控制,还有一种带有 allowsCellularAccesscachePolicy 参数的替代方法。

@discardableResult func get(
  path: String,
  allowsCellularAccess: Bool,
  cachePolicy: URLRequest.CachePolicy,
  cb: @escaping (AnyObject?, URLResponse?, Error?) -> Void
) -> URLSessionTask

发起 POST 请求

@discardableResult func post(
  path: String,
  json: AnyObject,
  cb: @escaping (AnyObject?, URLResponse?, Error?) -> Void
) throws -> URLSessionTask

向远程 API 发起 POST 请求。

参数

返回值

一个正在执行的 URLSessionTask

抛出

PatronError.InvalidJSON,如果潜在的 json 有效负载无法通过 NSJSONSerialization 序列化为 JSON。

获取信息

var host: String { get }

远程服务的主机名。

var status: (Int, TimeInterval)? { get }

上次 URLSessionJSONSerialization 错误代码,以及它在 Unix 时间发生的时间戳,自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。下一个成功的请求会将 status 重置为 nil

测试

为了进行测试,我们运行一个小的 Node.js 服务器 – 在 Tests/Server 中找到它。

$ make test

安装

📦 将 https://github.com/michaelnisi/patron 添加到您的包清单中。

许可证

MIT