在 Swift 中轻松地通过 HTTP 通信。
你可以将此 Package 添加到 Package.swift
,并将其包含在你的目标依赖项中。
let package = Package(
dependencies: [
.package(url: "https://github.com/uhooi/swift-http-client", .upToNextMajor(from: "0.6.0")),
],
targets: [
.target(
name: "<your-target-name>",
dependencies: ["HTTPClient"]),
]
)
你可以在 Xcode 上添加此 Package。请参阅文档。
此库可通过 CocoaPods 获取。要安装它,只需将以下行添加到你的 Podfile
pod 'UHIHTTPClient', '~> 0.6.0'
此库可通过 Carthage 获取。要安装它,只需将以下行添加到你的 Cartfile
github "uhooi/swift-http-client" ~> 0.6.0
你只需导入 HTTPClient
即可使用它。
实现一个符合 Encodable
协议的请求体结构。(可选)
struct RegisterUserRequestBody: Encodable {
let name: String
let description: String
}
实现一个符合 Decodable
协议的响应体结构。
struct RegisterUserResponseBody: Decodable {
let id: String
}
extension RegisterUserResponseBody {
func convertToUserID() -> UserID { .init(id: self.id) }
}
实现一个符合 Request
协议的请求结构。
import HTTPClient
struct RegisterUserRequest: Request {
typealias ResponseBody = RegisterUserResponseBody
var path: String { "user/create_user" }
var httpMethod: HTTPMethod { .post }
var httpHeaders: [HTTPHeaderField: String]? { [.contentType: ContentType.applicationJson.rawValue] }
}
创建一个 HTTPClient
类的实例并调用 request
方法。
struct UserID: Identifiable, Equatable {
let id: String
}
protocol VersatileRepository {
func registerUser(name: String, description: String) async throws -> UserID
}
import HTTPClient
final class VersatileAPIClient {
static let shared = VersatileAPIClient()
private let httpClient = HTTPClient(baseURLString: "https://example.com/api/")
}
extension VersatileAPIClient: VersatileRepository {
func registerUser(name: String, description: String) async throws -> UserID {
let requestBody = RegisterUserRequestBody(name: name, description: description)
let responseBody = try await httpClient.request(RegisterUserRequest(), requestBody: requestBody)
return responseBody.convertToUserID()
}
}
do {
let userID = try await VersatileAPIClient.shared.registerUser(name: "Uhooi", description: "Green monster.")
// Do something.
} catch {
// Do error handling.
print(error)
}
如果你能贡献代码,我将非常高兴 :)