扬庆の博客

Moya(2) 和Alafmofire关系

字数统计: 547阅读时长: 2 min
2021/03/22 Share

Moya 解读

通常Swift 使用的网络框架是 Alamofire, 对于一些网络请求的细节经常还要单独处理, 比较头疼.

Alamofire

回顾一下 Alamofire 的网络请求方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 带参数请求
let parameters = ["foo": "bar"]
// All three of these calls are equivalent
AF.request("https://httpbin.org/get", parameters: parameters)
// encoding defaults to `URLEncoding.default`

2. 带有头部信息的请求
let headers: HTTPHeaders = [
"Authorization": "Basic VXNlcm5hbWU6UGFzc3dvcmQ=",
"Accept": "application/json"
]
AF.request("https://httpbin.org/headers", headers: headers).responseJSON { response in
debugPrint(response)
}

etc...

看上面 Alafmofire, 调用方式简单, 如果对头部信息, 参数 等详细信息区分做处理,写专有网络层, 就糟心了.一般我们会花费一部分精力去考虑, 封装一个网络抽象层, Network Layer.

Moya

特色

  1. 编译时检查正确的 API 端点访问.
  2. 允许你使用枚举关联值定义不同端点的明确用法.
  3. 将 test stub 视为一等公民, 所以单元测试超级简单.

思想

提供一些网络抽象层, 他们经过充分的封装, 并且调用 Alamofire. 他们能足够简单轻松地应对常见任务,

也应该足够全面, 应对复杂任务.

Alamofire 抽象专有网络层NetworkLayer, 无非就是对接口参数, 请求 path 等 ,做处理.

Moya 就很好的包装了 Alamofire 对网络的数据请求所需的信息. 比如上面说的通过枚举关联值定义不同端点.

点击查看moya 的介绍以及使用模板


Moya 的专有网络层, 和我们平时自己封装的有什么不同?

moya 解决了: 1. 编写新项目困难 2. 维护现有项目困难 3. 单元测试困难

moya结构图

如上图可以看出, 自己写的Network Layer并不能解决所有的网络请求封装需要, 但是 Moya 就很自信的阻断了 Alamofire, 和 app 直接接触. 可见性能以及体量是有多大.

总结: Moya 相当于 Alamofire 和 app 之间的一个 network layer

1. Moya 基本概念

2. Moya 和 Alamofire 关系

3. Moya 开发应用篇 1

4. Moya 开发应用篇 2

5. Moya 开发应用篇 3

CATALOG
  1. 1. Moya 解读
    1. 1.0.1. Alamofire
    2. 1.0.2. Moya