SwiftEndpoint 是一个轻量级的库,为在 iOS 和 macOS 应用程序中实现网络功能提供更高级别的抽象。
Endpoint 是一个泛型函数,可以将某种 Request 转换为某种 Response 发布者 (publisher)
typealias Endpoint<Request, Response> = (Request) -> AnyPublisher<Response, Error>
一组帮助程序,用于基于原生 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 是一个函数,用于验证响应 Data 和 URLResponse,可以选择抛出验证错误
typealias URLResponseValidator = (Data, URLResponse) throws -> Void
URLResponseDecoder<Response> 是一个泛型函数,可以将响应 Data 和 URLResponse 转换为某种 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
版权所有 © 2020 Dariusz Rybicki Darrarski
许可证: GNU GPLv3