SessionPlus

一个用于 JSON API 的快速 请求 & 响应 框架。

此软件包旨在通过利用条件检查在多种 Swift 环境中工作。它已在 Apple 平台(macOS、iOS、tvOS、watchOS)以及 Linux (Ubuntu) 上进行过测试。

用法

SessionPlus 提供了一个默认实现 (URLSessionClient),允许从 JSON API 请求数据。 例如

let url = URL(string: "https://api.agify.io")!
let client = BaseURLSessionClient(baseURL: url)
let request = Get(queryItems: [URLQueryItem(name: "name", value: "bob")])
let response = try await client.request(request)

解码

Client 协议还提供了扩展,用于自动将响应解码为任何 Decodable 类型。

struct ApiResult: Decodable {
  let name: String
  let age: Int
  let count: Int
}


let response = try await client.request(request) as ApiResult
...
let response: ApiResult = try await client.request(request)

灵活性

Client 协议根据平台能力声明了最多三种形式的请求

// async/await for swift 5.5+
func performRequest(_ request: Request) async throws -> Response
// completion handler for backwards compatibility
func performRequest(_ request: Request, completion: @escaping (Result<Response, Error>) -> Void)
// Combine publisher that emits with a response
func performRequest(_ request: Request) -> AnyPublisher<Response, Error>

安装

SessionPlus 使用 Swift Package Manager 分发。您可以使用 Xcode 添加它,或者将其作为依赖项列在您的 Package.swift 清单文件中

let package = Package(
  ...
  dependencies: [
    .package(url: "https://github.com/richardpiazza/SessionPlus.git", .upToNextMajor(from: "2.0.0")
  ],
  ...
  targets: [
    .target(
      name: "MyPackage",
      dependnecies: [
        "SessionPlus"
      ]
    )
  ]
)

贡献

欢迎并鼓励为 SessionPlus 做出贡献! 请参阅 贡献指南 以获取更多信息。