Moya作为具有可编码的网络层
莫雅是什么? 为什么呢?
Moya是我们想要一些网络抽象层来充分封装实际直接调用Alamofire的层。 它应该足够简单,以使常见的事情变得容易,但是应该足够全面,以使复杂的事情也变得容易。
Moya的出色功能:
- 编译时检查API端点访问是否正确。
- 使您可以定义具有关联的枚举值的不同端点的明确用法。
- 将测试存根视为一流公民,因此单元测试非常容易。
安装
安装部分在Moya的Github页面上描述得非常好。
API
我们将使用JSONPlaceholder作为我们的API。
让我们从模型开始
对于输出模型,我们将使用typealias Codable = Encodable&Decodable 。
使用TargetType创建API枚举
为了使发布尽可能容易,我们将只使用1个POST和2个GET路由。
让我们创建API枚举:
并在其之上添加Moya的必要扩展:
首先, baseURL 。 这用于我们的API的基本URL:
接下来, path 。 我们使用它来定义不同的路由(例如/ posts , / comments等):
接下来, 方法 。 我们可以为不同的func定义不同的方法:
接下来,我们需要样本数据进行测试。 我们不会在那个帖子上介绍这个。 因此,让我们给它一个简单的Data() :
接下来,我们需要定义任务 。
- 我们需要.requestPlain来获取所有Post 。
- .requestParameters用于获取特定的Post 。
- 最后, .requestJSONEncodable用于使用我们的Codable对象创建一个Post 。
最后,我们需要headers 。 这将与我们的所有请求一起发送:
创建我们的网络代表
我们的NetworkManager将需要遵循Networkable 。 我们将像这样创建我们的协议:
现在,NetworkManager
我们将为依赖注入创建一个NetworkManager对象。 让我们创建:
TL; DR :我们创建了带有必要请求`func`的NetworkManager,现在我们可以创建该类的对象并将其用于请求。
注意:
我正在使用Moya插件在该行中的控制台上显示所有请求和响应:
var provider = MoyaProvider (插件:[NetworkLoggerPlugin(verbose:true)])
在生产中这不是必需的。
让我们测试一下我们的代码
我们可以像这样使用我们的NetworkManager (不使用Dependency Injection ):
注意:使用dump可以获得更多风格的print版本。
而已!
现在您可以使用Moya了 。
您可以在我自己的博客上阅读此故事:
https://devgenes.com/posts/moya-as-network-layer-with-codable