SwiftEndpoint is a lightweight library providing higher level of abstraction for implementing networking in iOS and macOS applications.
Endpoint
is a generic function that transforms some Request
into some Response
publisher:
typealias Endpoint<Request, Response> = (Request) -> AnyPublisher<Response, Error>
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 -> URLRequest
URLResponsePublisherFactory
is a function that transforms URLRequest
into URLResponsePublisher
:
typealias URLResponsePublisherFactory = (URLRequest) -> URLResponsePublisher
Convenience 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 -> Void
URLResponseDecoder<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
SwiftEndpoint is compatible with Swift Package Manager. You can add it as a dependency to your Xcode project or swift package.
Running tests:
swift test
Developing in Xcode:
swift package generate-xcodeproj
open -a SwiftEndpoint.xcodeproj
Copyright © 2020 Dariusz Rybicki Darrarski
License: GNU GPLv3