darrarski/SwiftEndpoint
Lightweight library providing higher level of abstraction for implementing networking in iOS and macOS applications
π Tech stack
π Description
Endpoint is a generic function that transforms some Request into some Response publisher:
typealias Endpoint<Request, Response> = (Request) -> AnyPublisher<Response, Error>π§© Foundation URL networking
Set of helpers for building API clients based on the native Foundation's networking.
urlEndpoint function creates an Endpoint that uses Foundation's networking:
func urlEndpoint<Request, Response>(
requestFactory: @escaping URLRequestFactory<Request>,
publisherFactory: @escaping URLResponsePublisherFactory,
responseValidator: @escaping URLResponseValidator,
responseDecoder: @escaping URLResponseDecoder<Response>
) -> Endpoint<Request, Response>URLRequestFactory<Request> is a generic function that transforms some Request into URLRequest, optionally throwing an error:
typealias URLRequestFactory<Request> = (Request) throws -> URLRequestURLResponsePublisherFactory is a function that transforms URLRequest into URLResponsePublisher:
typealias URLResponsePublisherFactory = (URLRequest) -> URLResponsePublisherConvenience extension allows to use URLSession as a URLResponsePublisherFactory:
extension URLSession {
var urlResponsePublisherFactory: URLResponsePublisherFactory { get }
}URLResponsePublisher is a combine publisher emitting network responses or failing with networking error:
typealias URLResponsePublisher = AnyPublisher<(data: Data, response: URLResponse), Error>URLResponseValidator is a function that validates response Data and URLResponse, optionally throwing validation error:
typealias URLResponseValidator = (Data, URLResponse) throws -> VoidURLResponseDecoder<Response> is a generic function that transforms response Data and URLResponse into some Response, optionally throwing decoding error:
typealias URLResponseDecoder<Response> = (Data, URLResponse) throws -> Responseπ§° Installation
SwiftEndpoint is compatible with Swift Package Manager. You can add it as a dependency to your Xcode project or swift package.
π Development
Running tests:
swift testDeveloping in Xcode:
swift package generate-xcodeproj
open -a SwiftEndpoint.xcodeprojβοΈ Do you like the project?
<a href="https://www.buymeacoffee.com/darrarski" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="60" width="217" style="height: 60px !important;width: 217px !important;" ></a>
π License
Copyright Β© 2020 Dariusz Rybicki Darrarski
License: GNU GPLv3
Package Metadata
Repository: darrarski/SwiftEndpoint
Stars: 5
Forks: 1
Open issues: 0
Default branch: master
Primary language: swift
License: GPL-3.0
Topics: combine-framework, endpoint, networking, swift, swift-package
README: README.md