SwiftRequest 是一个轻量级、类型安全的 Swift HTTP 客户端,简化了 HTTP 请求的构建和执行。
概述 • 安装 • 支持的 HTTP 方法 • 参数 • 许可证
SwiftRequest 抽象出了通常与在 Swift 中设置 HTTP 请求相关的重复样板代码。它利用了 Swift 5.9 中引入的宏,这些宏可以与特定声明相关联,以增强和扩展其功能。
以下是定义一个获取报价服务的简单示例
@Service(resource: "quotes")
protocol QuoteService {
@GET("random")
func getRandomQuotes(@QueryParam limit: Int?) async throws -> [Quote]
@GET("{id}")
func getQuote(@Path by id: String) async throws -> Quote
}
要使用 SwiftRequest 发出请求,您只需要创建该服务的一个实例并调用您想要使用的方法
let service = QuoteServiceImpl(baseURL: "https://api.quotable.io")
let quotes = try await service.getRandomQuotes(limit: 5)
let quote = try await service.getQuote(by: "69Ldsxcdm-")
需要 Xcode 15 或更高版本。
在 Xcode 中,转到 File > Add Package Dependency
并粘贴仓库 URL
https://github.com/ailtonvivaz/swift-request.git
在 Package.swift
中
dependencies: [
.package(url: "https://github.com/ailtonvivaz/swift-request.git", from: "0.1.0")
]
然后将依赖项添加到您的 targets。
SwiftRequest 提供对以下 HTTP 方法的支持
@GET
@POST
@PUT
@PATCH
@DELETE
@HEAD
@OPTIONS
这些方法中的每一个都接受一个字符串作为请求路径(可选)。 如果你想指定路径,你可以只使用 @GET
或 @GET("path")
。
SwiftRequest 提供了几个可以与 HTTP 方法结合使用的参数
@Header
: 使用此属性包装器来定义请求标头。 标头名称是可选的。 如果未提供,SwiftRequest 将使用属性名称作为标头名称。func getQuote(@Header("Cache-Control") cacheControl: String) async throws -> Quote
@QueryParam
: 使用此属性包装器来定义 URL 查询参数。 查询参数名称是可选的。 如果未提供,SwiftRequest 将使用属性名称作为查询参数名称。func getRandomQuotes(@QueryParam limit: Int?) async throws -> [Quote]
https://api.quotable.io/quotes/random?limit=10
@Path
: 使用此属性包装器来定义 URL 中的路径参数。 路径参数名称是可选的。 如果未提供,SwiftRequest 将使用属性名称作为路径参数名称。@GET("{id}")
func getQuote(@Path by id: String) async throws -> Quote
https://api.quotable.io/quotes/123
重要的是要注意,路径参数名称必须与用于定义路径参数的属性的名称匹配,并且需要在花括号之间的路径中编写。
@Body
: 使用此属性包装器来定义请求正文。 此包装器只能与 @POST
、@PUT
、@PATCH
和 @DELETE
HTTP 方法一起使用。@POST("quotes")
func createQuote(@Body quote: Quote) async throws -> Quote
Content-Type: application/json
标头将自动添加到请求中。@FormField
: 使用此属性包装器来定义请求正文中的字段参数。 此包装器只能与 @POST
、@PUT
、@PATCH
和 @DELETE
HTTP 方法一起使用。@POST("quotes")
func createQuote(@FormField("author") authorName: String, @FormField content: String) async throws -> Quote
Content-Type: application/x-www-form-urlencoded
标头将自动添加到请求中。 示例:author=John%20Doe&content=Hello%20World
SwiftRequest 在 MIT 许可证下可用。 有关详细信息,请参见 LICENSE。