TABResourceLoader 9.0.0

TABResourceLoader 9.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上一个版本2020年6月
SPM支持SPM

Neil HortonSam DodsKane CheshireSuyash Srijan维护。



  • 作者
  • Luciano Marisi

The App Business

TABResourceLoader

Build Status codecov.io

这个库旨在以一致和模块化的方式获取资源。用户可以通过遵守定义资源获取位置和方式的自定义协议来定义资源。然后,可以使用库提供的或未提供操作的泛型服务类型来检索这些资源。通过采用这种方法,很容易拥有可测试和模块化的网络堆栈。

示例用例

与Web服务一起工作

高级架构

该库定义/使用 4 个概念:模型、资源、服务和操作

  1. 模型:代码库中的强类型对象,可能或不映射到服务器模型
  2. 资源:通过协议一致性定义 哪里如何 获取一个 模型。例如,一个资源可以定义 JSON 文件所在的 URL 并如何解析为强类型模型。
  3. 服务:一种知道如何检索特定类型 资源 的类型
  4. 操作:在调用 服务 时提供并发模型。在实现自定义业务逻辑(如限制获取操作的频率)时非常有用。

资源协议

根协议

  • 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:结合了 JSONDictionaryResourceTypeNetworkResourceType,支持从网络服务中获取响应的 JSON 字典中的通用 Model
  • NetworkJSONArrayResourceType:结合了 JSONArrayResourceTypeNetworkResourceType,支持从网络服务中获取响应的 JSON 数组中的通用 Model
  • NetworkJSONDecodableResourceType:结合了 JSONDecodableResourceTypeNetworkResourceType,支持从网络服务 responses 中获取通用 Model 的 JSON。

注意:上述都包含默认 ["Content-Type": "application/json"] 头部字段。

  • NetworkPropertyListDecodableResourceType:结合了 PropertyListDecodableResourceTypeNetworkResourceType,支持从网络服务以 Property List 格式 XML 响应中检索通用 Model。它包括默认的 ["Content-Type": "application/x-plist"] 头部字段。

具体类型

  • NetworkImageResource:符合ImageResourceType接口,并且可以以URL初始化

服务

  • NetworkDataResourceService:用于检索符合NetworkResourceTypeDataResourceType的资源
    • fetch函数返回一个可取消的Cancellable对象,可用于取消网络请求
    • 当网络请求完成时,会调用完成处理程序,并传入一个包含NetworkResponse<模型>枚举的参数
  • GenericNetworkDataResourceService:继承自NetworkDataResourceService并符合ResourceServiceType。此服务旨在与ResourceOperation一起使用

资源操作

  • 使用符合资源服务类型的服务来检索符合资源类型的资源
  • (NS)Operation的子类,用于使用特定服务检索资源
  • 操作完成后使用完成处理程序传递其结果

参与贡献

关于贡献的指南可以在这里找到:CONTRIBUTING.md

作者

卢西亚诺·马里西 @lucianomarisi

此模式的最初想法在Swift中从网络服务中协议化加载资源的解释中阐述

授权协议

TABResourceLoader遵循MIT授权协议。更多信息请参阅LICENSE文件。