测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released最后发布 | 2017年11月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✓ |
由 Lukas Schmidt 维护。
主要特性 | |
---|---|
类型化网络资源 | |
协议导向的架构 | |
可交换实现 | |
可扩展的 API | |
|
可组合特性 |
完全单元测试 |
这个项目的想法来源于这篇文章 talk.objc.io。
假设你想要获取一个 html
字符串。
首先,你必须创建一个服务,通过提供网络访问。你可以直接使用 NSURLSession
或通过实现 NetworkAccessProviding
接口提供自己的定制解决方案。此外,你还需要为请求映射注册 baseURLs 端点。这样,当环境发生改变时,你可以轻松地改变端点。
let url = NSURL(string: "https://httpbin.org")!
let baseURLKey = "httpBin"
let networkAccess = NSURLSession(configuration: .defaultSessionConfiguration())
let networkService = NetworkService(networkAccess: networkAccess, endPoints: [baseURLKey: url])
创建一个带有获取数据请求的资源。
let request = NetworkRequest(path: "/", baseURLKey: baseURLKey)
let resource = Resource(request: request, parse: { String(data: $0, encoding: NSUTF8StringEncoding) })
请求资源并处理响应
networkService.request(resource, onCompletion: { htmlText in
print(htmlText)
}, onError: { error in
//Handle errors
})
struct IPOrigin {
let ipAddress: String
}
extension IPOrigin: JSONMappable {
init(object: Dictionary<String, AnyObject>) throws {
/// Do your mapping
}
}
let request = NetworkRequest(path: "/ip", baseURLKey: baseURLKey)
let resource = JSONResource<IPOrigin>(request: request)
networkService.request(resource, onCompletion: { origin in
print(origin)
}, onError: { error in
//Handle errors
})
以下示例说明如何扩展 DBNetworkStack 以支持 XML 响应模型
protocol XMLMappable {
init(object: Dictionary<String, AnyObject>) throws
}
struct XMLResource<T : XMLMappable> : ResourceModeling {
let request: NetworkRequestRepresening
init(request: NetworkRequestRepresening) {
self.request = request
}
var parse: (data: NSData) throws -> T {
return { data in
let xmlObject = // Your data to xml object conversion
try! T(object: xmlObject) as T
}
}
}
XMLMappable
定义了一个协议,响应模型对象必须遵守。遵守此协议的模式类负责将模型的通用表示转换为它特定的形式。XMLResource<T : XMLMappable>
定义了一个基于给定 XMLMappable
模型的资源。解析函数负责将原始响应数据转换为通用表示。
下表显示了所有协议及其默认实现。
协议 | 默认实现 |
---|---|
NetworkAccessProviding |
NSURLSession |
NetworkServiceProviding |
NetworkService |
NetworkRequestRepresenting |
NetworkRequest |
NetworkTaskRepresenting |
NSURLSessionTask |
ResourceModelling |
Resource |
类 | 功能 |
---|---|
RetryNetworkService |
在网络服务出现错误且满足给定条件时,将在给定延迟后重试请求。 |
ModifyRequestNetworkService |
修改匹配的请求。可用于添加身份验证令牌或API密钥。 |
欢迎提交包含新功能、测试或文档改进和错误修复的拉取请求。请注意,我们欢迎经过良好测试和文档化的代码。
Lukas Schmidt (邮箱, @lightsprint09), Christian Himmelsbach (邮箱)
DBNetworkStack 在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE。