TABResourceLoader
这个库旨在以一致和模块化的方式获取资源。用户可以通过遵守定义资源获取位置和方式的自定义协议来定义资源。然后,可以使用库提供的或未提供操作的泛型服务类型来检索这些资源。通过采用这种方法,很容易拥有可测试和模块化的网络堆栈。
示例用例
与Web服务一起工作
- 检索一个
可解析
对象 - 检索JSON对象
- 检索图片
- 响应当前网络活动
- 使用故障模型示例(请参阅文档/使用故障模型.md)
高级架构
该库定义/使用 4 个概念:模型、资源、服务和操作
- 模型:代码库中的强类型对象,可能或不映射到服务器模型
- 资源:通过协议一致性定义 哪里 和 如何 获取一个 模型。例如,一个资源可以定义 JSON 文件所在的 URL 并如何解析为强类型模型。
- 服务:一种知道如何检索特定类型 资源 的类型
- 操作:在调用 服务 时提供并发模型。在实现自定义业务逻辑(如限制获取操作的频率)时非常有用。
资源协议
根协议
ResourceType
:定义了一个通用的模型
NetworkResourceType
:定义了端点如何被访问。通过指定以下属性- URL (必需)
- HTTP方法 (可选,默认为GET)
- HTTP头部字段 (可选)
- 请求体(JSON编码) (可选)
- URL查询字符串 (可选)
ResourceType
符合 DataResourceType
:定义了一个可以创建从(NS)Data
生成Model
资源的资源
DataResourceType
符合 JSONDecodableResourceType
:定义将JSON响应转换为一个符合Decodable
的对象的转换JSONDictionaryResourceType
:定义将JSON对象(即[String: Any]
)转换为通用Model
的转换JSONArrayResourceType
:定义将JSON数组(即[Any]
)转换为通用Model
的转换ImageResourceType
:定义将(NS)Data
转换为UIImage
的转换PropertyListDecodableResourceType
:
继承多个协议的协议
NetworkJSONDictionaryResourceType
:结合了JSONDictionaryResourceType
和NetworkResourceType
,支持从网络服务中获取响应的 JSON 字典中的通用Model
。NetworkJSONArrayResourceType
:结合了JSONArrayResourceType
和NetworkResourceType
,支持从网络服务中获取响应的 JSON 数组中的通用Model
。NetworkJSONDecodableResourceType
:结合了JSONDecodableResourceType
和NetworkResourceType
,支持从网络服务 responses 中获取通用Model
的 JSON。
注意:上述都包含默认 ["Content-Type": "application/json"]
头部字段。
NetworkPropertyListDecodableResourceType
:结合了PropertyListDecodableResourceType
和NetworkResourceType
,支持从网络服务以 Property List 格式 XML 响应中检索通用Model
。它包括默认的["Content-Type": "application/x-plist"]
头部字段。
具体类型
NetworkImageResource
:符合ImageResourceType
接口,并且可以以URL
初始化
服务
NetworkDataResourceService
:用于检索符合NetworkResourceType
和DataResourceType
的资源fetch
函数返回一个可取消的Cancellable
对象,可用于取消网络请求- 当网络请求完成时,会调用完成处理程序,并传入一个包含
NetworkResponse<模型>
枚举的参数
GenericNetworkDataResourceService
:继承自NetworkDataResourceService
并符合ResourceServiceType
。此服务旨在与ResourceOperation
一起使用
资源操作
- 使用符合
资源服务类型
的服务来检索符合资源类型
的资源 - 是
(NS)Operation
的子类,用于使用特定服务检索资源 - 操作完成后使用完成处理程序传递其
结果
参与贡献
关于贡献的指南可以在这里找到:CONTRIBUTING.md。
作者
卢西亚诺·马里西 @lucianomarisi
此模式的最初想法在Swift中从网络服务中协议化加载资源的解释中阐述
授权协议
TABResourceLoader遵循MIT授权协议。更多信息请参阅LICENSE文件。