主要特性 | |
---|---|
🛡 | 类型化的网络资源 |
🏠 | 面向值的架构 |
🔀 | 可交换的实现 |
🚄 | 可扩展的 API |
🎹 | 可组合的特性 |
✅ | 完全单元测试 |
📕 | 文档在此 |
这个项目背后的想法来自这篇 talk.objc.io 文章。
假设你想获取一个 html
字符串。
首先,你需要创建一个服务,通过提供网络访问。你可以直接使用 URLSession,或者通过实现 NetworkAccess
来提供你自己的自定义解决方案。
let networkAccess = URLSession(configuration: .default)
let networkService = BasicNetworkService(networkAccess: networkAccess)
创建一个资源,并包含一个获取数据的请求。
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) })
请求你的资源并处理结果
networkService.request(resource, onCompletion: { htmlText in
print(htmlText)
}, onError: { error in
//Handle errors
})
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
})
请求你的资源并处理结果和 http 响应。这类似于仅仅请求一个结果模型。
networkService.request(resource, onCompletionWithResponse: { origin, response in
print(origin, response)
}, onError: { error in
//Handle errors
})
下表显示了所有协议及其默认实现。
协议 | 默认实现 |
---|---|
NetworkAccess |
URLSession |
NetworkService |
BasicNetworkService |
NetworkTask |
URLSessionTask |
类 | 特性 |
---|---|
RetryNetworkService |
当错误符合给定条件时,在给定的延迟后重试请求。 |
ModifyRequestNetworkService |
修改匹配的请求。可以用于添加身份验证令牌或 API 密钥 |
NetworkServiceMock |
模拟 NetworkService。可在单元测试期间使用 |
SPM 与 Swift 构建系统集成,以自动执行下载、编译和链接依赖项的过程。
在你的 Package.swift
中指定以下内容
.package(url: "https://github.com/dbsystel/DBNetworkStack", from: "2.1.0"),
欢迎提交包含新特性、测试或文档改进以及 bug 修复的 pull request。请记住,我们欢迎经过良好测试和记录的代码。
Lukas Schmidt (邮件, @lightsprint09), Christian Himmelsbach (邮件)
DBNetworkStack 在 MIT 许可证下发布。 有关详细信息,请参见 LICENSE。