Alamofire 源码解析

Alamofire浅析 <二> 实现URLReque

2018-08-31  本文已影响57人  狼性刀锋

http 协议 必备要素

  1. URL
  2. method
  3. header
  4. body
  5. query parameters

构建URLRequest

  1. 拼接URL: baseURL + relativeURL + query parameters
  2. set header
  3. set body

抽象层协议 URLRequestConvertible protocol

public protocol URLRequestConvertible {
    /// Returns a URL request or throws if an `Error` was encountered.
    ///
    /// - throws: An `Error` if the underlying `URLRequest` is `nil`.
    ///
    /// - returns: A URL request.
    func asURLRequest() throws -> URLRequest
}

用户层 协议示范

public protocol MFURLRequestConvertible: URLRequestConvertible {
    var baseURL: URL { get }
    var path: String { get }
    var method: HTTPMethod { get }
    var headers: Header { get }
    var parameter: MFParameter { get }
    var queryParameterEncoding: ParameterEncoding { get }
}


public enum MFParameter {
    case url(Parameters)
    case body(Parameters, encoding: ParameterEncoding)
    case mix(url: Parameters, body: (Parameters, encoding: ParameterEncoding))
}

这样协议详细描述URLRequest, 这里要注意的是参数的编码方式,这个真的很重要。通常情况get方法的参数以查询字符串拼接,post
以json格式出现。但有的时候就是很奇葩,我就碰到过get方法以json字符串拼接的,post方法以查询字符串拼接的,真的是要吐血。所以应当配置参数的编码方式

好了有了这个协议现在可以愉快的编码了,已经能够快速便捷的构建http请求(暂不包括upload 和download method),但这仅仅是解决单个http请求,
如果要构建多个http请求,你需要建立一个路由表, 可以参照开源框架:Moya或者自己尝试使用枚举创建路由表

上一篇 下一篇

猜你喜欢

热点阅读