一个轻量级的 Swift REST API 请求生成库。
RetroSwift 支持 Swift Package Manager。
要使用 Swift Package Manager 安装 RetroSwift,您可以按照 Apple 发布的教程,使用 RetroSwift 仓库的 URL 和当前版本。
或者您可以将以下依赖项添加到您的 Package.swift
文件中
.package(url: "https://github.com/rmichelberger/RetroSwift/", from: "1.0.0")
您可以通过以下方式创建 HTTP 请求。首先,您需要将基本 URL 定义为 String
类型,并指定 HTTP 方法。
示例
let baseUrl = "https://example.com"
@GET(baseURL: baseUrl) var request
您还可以选择性地定义 path
(路径)。
@Path(path: "/my/path") var path
您还可以在 path
(路径)中定义动态参数。示例
let id = 123
@Path(path: "/api/v1/items/{id}", name: "id") var path = id
或
let id = "xyz"
@Path(path: "/api/v1/items/{parameter}", name: "parameter") var path = id
参数必须实现 CustomStringConvertible
协议。
@Query(name: "name") var query = 123
或
@Query(name: "name") var query = "value"
name
(名称)需要是 String
类型,而 value(值)必须实现 CustomStringConvertible
协议。
@Body(value: value) var body
value
(值)必须实现 Encodable
协议。
您还可以定义自己的 DataEncoder
(数据编码器),默认的是 JSONEncoder
(JSON 编码器)。
@Body(value: value, encoder: encoder) var body
您可以将请求体添加到 HTTP 请求中
func getItem(id: Int) async throws -> Item {
let baseUrl = "https://example.com"
@Path(path: "/api/v1/items/{id}", name: "id") var path = id
let user = ["Name": "John Doe"]
@Body(value: user) var body
@POST(baseURL: baseUrl, path: path, body: body) var request
return try await retroSwift.execute(request: request)
}
您可以按如下方式指定请求头
@Header(name: "Content-Type") var contentType = "application/json"
name
(名称)是请求头的名称,而 value(值)必须符合 CustomStringConvertible
协议。
func getItem(id: Int) async throws -> Item {
let client = ... // see below
let baseUrl = "https://example.com"
let retroSwift = RetroSwift(client: client)
@Path(path: "/api/v1/items/{id}", name: "id") var path = id
@Query(name: "fields") var fields = "id,title"
@Query(name: "limit") var fields = 100
@GET(baseURL: baseUrl, path: path, queries: [fields]) var request
return try await retroSwift.execute(request: request)
}
这将生成以下请求
HTTP GET https://example.com/api/v1/items/14572?fields=id,title&limit=100
支持的方法
HTTP 方法 | 用法 |
---|---|
GET | @GET(...) |
PUT | @PUT(...) |
POST | @POST(...) |
DELETE | @DELETE(...) |
OPTIONS | 即将推出 |
TRACE | 即将推出 |
PATCH | 即将推出 |
CONNECT | 即将推出 |
HEAD | 即将推出 |
您需要为 RetroSwift
提供一个 HTTP 客户端。该客户端必须实现 HTTPClient
协议。
protocol HTTPClient {
func execute<T: Decodable>(request: URLRequest) async throws -> T
}
推荐使用 OkHTTPClient 作为网络客户端。
@Path
添加动态参数列表。@Body
添加 Data
初始化方法。我们始终欢迎来自社区的贡献。请确保您的更改包含单元测试。
灵感来源于 Retrofit。