| 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.
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.
letnetworkAccess=URLSession(configuration:.default)letnetworkService=BasicNetworkService(networkAccess: networkAccess)Create a resource with a request to fetch your data.
leturl=URL(staticString:"https://httpbin.org")letrequest=URLRequest(path:"/", baseURL: url, HTTPMethod:.GET)letresource=Resource(request: request, parse:{String(data: $0, encoding:.utf8)})Request your resource and handle the result
networkService.request(resource, onCompletion:{ htmlText inprint(htmlText)}, onError:{ error in
//Handle errors
})structIPOrigin:Decodable{letorigin:String}leturl=URL(staticString:"https://www.httpbin.org")letrequest=URLRequest(path:"ip", baseURL: url)letresource=Resource<IPOrigin>(request: request, decoder:JSONDecoder())
networkService.request(resource, onCompletion:{ origin inprint(origin)}, onError:{ error in
//Handle errors
})Request your resource and handle the result & http response. This is similar to just requesting a resulting model.
networkService.request(resource, onCompletionWithResponse:{ origin, response inprint(origin, response)}, onError:{ error in
//Handle errors
})The following table shows all the protocols and their default implementations.
| Protocol | Default Implementation |
|---|---|
NetworkAccess | URLSession |
NetworkService | BasicNetworkService |
NetworkTask | URLSessionTask |
| 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 |
- iOS 9.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
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"),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.
Lukas Schmidt (Mail, @lightsprint09), Christian Himmelsbach (Mail)
DBNetworkStack is released under the MIT license. See LICENSE for details.