Swiftpack.co - dbsystel/DBNetworkStack as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by dbsystel.
dbsystel/DBNetworkStack v0.0.1
DBNetworkStack is a network abstraction for fetching request and mapping them to model objects
โญ๏ธ 33
๐Ÿ•“ 2 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/dbsystel/DBNetworkStack.git", from: "v0.0.1")

DBNetworkStack

Build Status codebeat badge codecov Swift Package Manager compatible

Main Features
๐Ÿ›ก Typed network resources
๐Ÿ  Value oriented architecture
๐Ÿ”€ Exchangeable implementations
๐Ÿš„ Extendable API
๐ŸŽนย  ย  ย  ย  Composable Features ย  ย  ย  ย  ย 
โœ… Fully unit tested
๐Ÿ“•ย  Documented hereย  ย  ย  ย  ย  ย 

The idea behind this project comes from this talk.objc.io article.

Basic Demo

Lets say you want to fetch a html string.

First you have to create a service, by providing a network access. You can use URLSession out of the box or provide your own custom solution by implementing NetworkAccess.


let networkAccess = URLSession(configuration: .default)
let networkService = BasicNetworkService(networkAccess: networkAccess)

Create a resource with a request to fetch your data.


let url = URL(staticString: "https://httpbin.org")
let request = URLRequest(path: "/", baseURL: url, HTTPMethod: .GET)
let resource = Resource(request: request, parse: { String(data: $0, encoding: .utf8) })

Request your resource and handle the result

networkService.request(resource, onCompletion: { htmlText in
    print(htmlText)
}, onError: { error in
    //Handle errors
})

Load types conforming to Swift-Decodable

struct IPOrigin: Decodable {
    let origin: String
}

let url = URL(staticString: "https://www.httpbin.org")
let request = URLRequest(path: "ip", baseURL: url)

let resource = Resource<IPOrigin>(request: request, decoder: JSONDecoder())

networkService.request(resource, onCompletion: { origin in
    print(origin)
}, onError: { error in
    //Handle errors
})

Accessing HTTPResponse

Request your resource and handle the result & http response. This is similar to just requesting a resulting model.

networkService.request(resource, onCompletionWithResponse: { origin, response in
    print(origin, response)
}, onError: { error in
    //Handle errors
})

Protocol oriented architecture / Exchangability

The following table shows all the protocols and their default implementations.

Protocol Default Implementation
NetworkAccess URLSession
NetworkService BasicNetworkService
NetworkTask URLSessionTask

Composable Features

Class Feature
RetryNetworkService Retrys requests after a given delay when an error meets given criteria.
ModifyRequestNetworkService Modify matching requests. Can be used to add auth tokens or API Keys
NetworkServiceMock Mocks a NetworkService. Can be use during unit tests

Requirements

  • iOS 9.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+

Installation

Swift Package Manager

SPM is integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.

Specify the following in your Package.swift:

.package(url: "https://github.com/dbsystel/DBNetworkStack", from: "2.1.0"),

Contributing

Feel free to submit a pull request with new features, improvements on tests or documentation and bug fixes. Keep in mind that we welcome code that is well tested and documented.

Contact

Lukas Schmidt (Mail, @lightsprint09), Christian Himmelsbach (Mail)

License

DBNetworkStack is released under the MIT license. See LICENSE for details.

GitHub

link
Stars: 33
Last commit: 6 days ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

Async ๐Ÿ™…๐Ÿผโ€โ™‚๏ธ
6 days ago
  • Async/Await support
  • Typed errors with RessourceWithError
  • improved NetworkServiceMock
  • Removes Carthage Support
  • Removes CocoaPods Support

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics