8000
Skip to content

Lightweight library providing higher level of abstraction for implementing networking in iOS and macOS applications

License

Notifications You must be signed in to change notification settings

darrarski/SwiftEndpoint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📦 SwiftEndpoint

Swift v5.1 Swift Package Manager platforms iOS macOS

SwiftEndpoint is a 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 -> 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

🧰 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 test

Developing in Xcode:

swift package generate-xcodeproj
open -a SwiftEndpoint.xcodeproj

☕️ Do you like the project?

Buy Me A Coffee

📄 License

Copyright © 2020 Dariusz Rybicki Darrarski

License: GNU GPLv3

About

Lightweight library providing higher level of abstraction for implementing networking in iOS and macOS applications

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

0