swift-http-client

CI Release CocoaPods Version Carthage compatible Swift Compatibility Platform Compatibility License Twitter

在 Swift 中轻松地通过 HTTP 通信。

目录

系统要求

安装

Swift Package Manager (推荐)

Package

你可以将此 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

你可以在 Xcode 上添加此 Package。请参阅文档

CocoaPods

此库可通过 CocoaPods 获取。要安装它,只需将以下行添加到你的 Podfile

pod 'UHIHTTPClient', '~> 0.6.0'

Carthage

此库可通过 Carthage 获取。要安装它,只需将以下行添加到你的 Cartfile

github "uhooi/swift-http-client" ~> 0.6.0

如何使用

你只需导入 HTTPClient 即可使用它。

  1. 实现一个符合 Encodable 协议的请求体结构。(可选)

    struct RegisterUserRequestBody: Encodable {
        let name: String
        let description: String
    }
  2. 实现一个符合 Decodable 协议的响应体结构。

    struct RegisterUserResponseBody: Decodable {
        let id: String
    }
    
    extension RegisterUserResponseBody {
        func convertToUserID() -> UserID { .init(id: self.id) }
    }
  3. 实现一个符合 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] }
    }
  4. 创建一个 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)
    }

贡献

如果你能贡献代码,我将非常高兴 :)

统计

Stats