Alamofire 结构解读

源码阅读,我觉得首先了解 它的框架,结构,或许就是架构吧。

  • request,download,upload,
    iOS进行网络请求:URLSession,创建session,sessionconfig,request(请求体,url,方法等)。
    查看请求的数据data,有两种方式,一种是代理,另一种是block(您的URLSession对象不需要委托。如果没有分配委托,则使用系统提供的委托,并且必须提供一个completion回调函数来获取数据)。
    1
    2
    初始化方法:
    URLSession(configuration: URLSessionConfiguration, delegate: URLSessionDelegate?, delegateQueue: OperationQueue?)

URLSession:支持data file ftp http 和 https的url,支持代理服务和SOCKS通道。并被配置到用户的系统中;支持HTTP/1.1,SPDY,HTTP/2协议。HTTP/2的支持被描述在RFC 7540,并且需要一个服务支持,无论是ALPN还是NPN。
首先,要建立HTTP连接,需要用到URLSession;每一个被指定了URL的session的任务,需要共享一个URLSessionConfiguration,这个object定义了网络链接的行为,例如,对于同一个host最大并发连接数量等;


URLSessionTask是一个表示任务对象的抽象类,一个会话创建一个任务,这里任务是指获取数据、下载或上传文件。
有三种类型的会话
URLSessionDataTask: 处理从HTTP get请求中从服务器获取数据到内存中。
URLSessionUploadTask:上传硬盘中的文件到服务器,一般是HTTP POST 或 PUT方式
URLSessionDownloadTask: 从远程服务器下载文件到临时文件位置。


AFError.swift
里面定义了很多Alamofire请求返回的错误类型。
包括:判断url是否可用,response序列化,response失败原因,参数编码失败等,
描述的localizedDescription,会返回错误原因。


目录结构
Alamofire目录.png

备注
AFError

Alamofire


Alamofire.swift
进行网络请求的任务,所有的方法都封装在这。
内部也是通过SessionManager来处理请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public protocol URLConvertible {
/// Returns a URL that conforms to RFC 2396 or throws an `Error`.
///
/// - throws: An `Error` if the type cannot be converted to a `URL`.
///
/// - returns: A URL or throws an `Error`.
func asURL() throws -> URL
}
request,download,upload,
SessionManager:负责创建和管理“Request”对象,以及他们底层“NSURLSession”
open static let `default`: SessionManager = {
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders
return SessionManager(configuration: configuration)
}()
defaultHTTPHeaders:
return [
"Accept-Encoding": acceptEncoding,
"Accept-Language": acceptLanguage,
"User-Agent": userAgent
]
///request请求
public func request(
_ url: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil)
-> DataRequest
{
return SessionManager.default.request(
url,
method: method,
parameters: parameters,
encoding: encoding,
headers: headers
)
}

Request:负责发送和接收从服务器返回的响应和相关数据,以及管理他的底层“URLSessionTask”,还有分类DataRequest,负责请求回来的数据