Alamofire 为 HTTP 网络请求提供了一个优雅且可组合的接口。它没有实现自己的 HTTP 网络功能。取而代之的是,它建立在由 Foundation 框架提供的 URL 加载系统之上。系统的核心是 URLSession 和 URLSessionTask 子类。Alamofire 将这些 APIs 和许多其他 APIs 封装在一个更易于使用的接口中,并提供使用 HTTP 网络进行现代应用程序开发所必需的各种功能。但是,了解 Alamofire 的许多核心行为来自何处很重要,因此熟悉 URL 加载系统非常重要。归根结底,Alamofire 的网络特性受到该系统功能的限制,应该始终记住并遵守其行为和最佳实践。
此外,Alamofire(以及 URL 加载系统)中的联网是异步完成的。异步编程可能会让不熟悉这个概念的程序员感到沮丧,但是有很好的理由这样做。
另外:AF
命名空间和引用
以前的 Alamofire 文档使用了类似 Alamofire.request()
的示例。这个 API 虽然看起来需要 Alamofire
前缀,但实际上在没有它的情况下也可以。request
方法和其他函数在任何带有 import Alamofire
的文件中都是全局可用的。从 Alamofire 5 开始,此功能已被删除,被更改为 AF
,它是对 Session.default
的引用。这允许 Alamofire 提供同样的便利功能,同时不必每次使用 Alamofire 时都污染全局命名空间,也不必全局复制 Session
API。类似地,由 Alamofire 扩展的类型将使用 af
属性扩展来将 Alamofire 添加的功能与其他扩展分开。
发起请求
Alamofire 为发出 HTTP 请求提供了多种方便的方法。最简单的是,只需提供一个可以转换为 URL 的 String
:
所有示例都需要在源文件中的某个位置
import Alamofire
。
这实际上是 Alamofire Session
类型上用于发出请求的两个顶层 APIs 的一种形式。它的完整定义如下:
open func request<Parameters: Encodable>(
_ convertible: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default,
headers: HTTPHeaders? = nil,
interceptor: RequestInterceptor? = nil
) -> DataRequest
此方法创建一个 DataRequest
,同时允许组合来自各个组件(如 method
和 headers
)的请求,同时还允许每个传入 RequestInterceptors
和 Encodable
参数。
还有其他方法允许您使用
Parameters
字典和ParameterEncoding
类型来发出请求。不再推荐此 API,最终将被弃用并从 Alamofire 中删除。
这个 API 的第二个版本要简单得多:
open func request(
_ urlRequest: URLRequestConvertible,
interceptor: RequestInterceptor? = nil
) -> DataRequest
此方法为遵循 Alamofire
的 URLRequestConvertible
协议的任何类型创建 DataRequest
。所有不同于前一版本的参数都封装在该值中,这会产生非常强大的抽象。这将在我们的高级用法中讨论。