Moya作为具有可编码的网络层

莫雅是什么? 为什么呢?

Moya是我们想要一些网络抽象层来充分封装实际直接调用Alamofire的层。 它应该足够简单,以使常见的事情变得容易,但是应该足够全面,以使复杂的事情也变得容易。

Moya的出色功能:

  1. 编译时检查API端点访问是否正确。
  2. 使您可以定义具有关联的枚举值的不同端点的明确用法。
  3. 将测试存根视为一流公民,因此单元测试非常容易。

安装

安装部分在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