📦 SwiftEndpoint

Swift v5.1 Swift Package Manager platforms iOS macOS

SwiftEndpoint 是一个轻量级的库,为在 iOS 和 macOS 应用程序中实现网络功能提供更高级别的抽象。

🛠 技术栈

📝 描述

Endpoint 是一个泛型函数,可以将某种 Request 转换为某种 Response 发布者 (publisher)

typealias Endpoint<Request, Response> = (Request) -> AnyPublisher<Response, Error>

🧩 基础 URL 网络

一组帮助程序,用于基于原生 Foundation 的网络构建 API 客户端。

urlEndpoint 函数创建一个使用 Foundation 网络的 Endpoint

func urlEndpoint<Request, Response>(
  requestFactory: @escaping URLRequestFactory<Request>,
  publisherFactory: @escaping URLResponsePublisherFactory,
  responseValidator: @escaping URLResponseValidator,
  responseDecoder: @escaping URLResponseDecoder<Response>
) -> Endpoint<Request, Response>

URLRequestFactory<Request> 是一个泛型函数,可以将某种 Request 转换为 URLRequest,可以选择抛出错误

typealias URLRequestFactory<Request> = (Request) throws -> URLRequest

URLResponsePublisherFactory 是一个函数,可以将 URLRequest 转换为 URLResponsePublisher

typealias URLResponsePublisherFactory = (URLRequest) -> URLResponsePublisher

便捷的扩展允许将 URLSession 用作 URLResponsePublisherFactory

extension URLSession {
  var urlResponsePublisherFactory: URLResponsePublisherFactory { get }
}

URLResponsePublisher 是一个 combine 发布者,发出网络响应或以网络错误失败

typealias URLResponsePublisher = AnyPublisher<(data: Data, response: URLResponse), Error>

URLResponseValidator 是一个函数,用于验证响应 DataURLResponse,可以选择抛出验证错误

typealias URLResponseValidator = (Data, URLResponse) throws -> Void

URLResponseDecoder<Response> 是一个泛型函数,可以将响应 DataURLResponse 转换为某种 Response,可以选择抛出解码错误

typealias URLResponseDecoder<Response> = (Data, URLResponse) throws -> Response

🧰 安装

SwiftEndpoint 兼容 Swift Package Manager。 您可以将其作为依赖项添加到您的 Xcode 项目swift 包

🛠 开发

运行测试

swift test

Xcode 中开发

swift package generate-xcodeproj
open -a SwiftEndpoint.xcodeproj

☕️ 喜欢这个项目吗?

Buy Me A Coffee

📄 许可证

版权所有 © 2020 Dariusz Rybicki Darrarski

许可证: GNU GPLv3