DBNetworkStack 0.7

DBNetworkStack 0.7

测试已测试
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
})

JSON 映射演示

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密钥。

需求

  • iOS 9.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 8.0+
  • Swift 3.0

贡献

欢迎提交包含新功能、测试或文档改进和错误修复的拉取请求。请注意,我们欢迎经过良好测试和文档化的代码。

联系方式

Lukas Schmidt (邮箱, @lightsprint09), Christian Himmelsbach (邮箱)

许可证

DBNetworkStack 在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE。