美文网首页AFNetworking源码探究
AFNetworking源码探究(十五) —— 请求序列化之架构

AFNetworking源码探究(十五) —— 请求序列化之架构

作者: 刀客传奇 | 来源:发表于2018-03-02 15:31 被阅读54次

    版本记录

    版本号 时间
    V1.0 2018.03.02

    前言

    我们做APP发起网络请求,都离不开一个非常有用的框架AFNetworking,可以说这个框架的知名度已经超过了苹果的底层网络请求部分,很多人可能不知道苹果底层是如何发起网络请求的,但是一定知道AFNetworking,接下来几篇我们就一起详细的解析一下这个框架。感兴趣的可以看上面写的几篇。
    1. AFNetworking源码探究(一) —— 基本介绍
    2. AFNetworking源码探究(二) —— GET请求实现之NSURLSessionDataTask实例化(一)
    3. AFNetworking源码探究(三) —— GET请求实现之任务进度设置和通知监听(一)
    4. AFNetworking源码探究(四) —— GET请求实现之代理转发思想(一)
    5. AFNetworking源码探究(五) —— AFURLSessionManager中NSURLSessionDelegate详细解析(一)
    6. AFNetworking源码探究(六) —— AFURLSessionManager中NSURLSessionTaskDelegate详细解析(一)
    7. AFNetworking源码探究(七) —— AFURLSessionManager中NSURLSessionDataDelegate详细解析(一)
    8. AFNetworking源码探究(八) —— AFURLSessionManager中NSURLSessionDownloadDelegate详细解析(一)
    9. AFNetworking源码探究(九) —— AFURLSessionManagerTaskDelegate中三个转发代理方法详细解析(一)
    10. AFNetworking源码探究(十) —— 数据解析之数据解析架构的分析(一)
    11. AFNetworking源码探究(十一) —— 数据解析之子类中协议方法的实现(二)
    12. AFNetworking源码探究(十二) —— 数据解析之子类中协议方法的实现(三)
    13. AFNetworking源码探究(十三) —— AFSecurityPolicy与安全认证 (一)
    14. AFNetworking源码探究(十四) —— AFSecurityPolicy与安全认证 (二)

    回顾

    上一篇介绍了AFSecurityPolicy与安全认证,这一篇我们看一下请求参数的序列化问题,对应的都在文件AFURLRequestSerialization中,下面我们就开始了。


    请求序列化中的类和协议

    下面我们就看一下请求序列化中的类和协议。

    • @protocol AFURLRequestSerialization <NSObject, NSSecureCoding, NSCopying>
    • @interface AFHTTPRequestSerializer : NSObject <AFURLRequestSerialization>
    • @protocol AFMultipartFormData
    • @interface AFJSONRequestSerializer : AFHTTPRequestSerializer
    • @interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer

    这里是一个父类,两个子类,父类遵循了一个协议,还有另外一个单独的协议,它们之间的关系可以参考下图。

    上面这个图是我画的,应该很清楚他们之间的关系了吧。


    请求序列化的架构

    大家还记得前面几篇写的response数据解析的结构吗?其实这里request数据解析的架构是一样的,都是父类和子类均实现AFURLRequestSerialization这个协议,实现了请求的序列化。

    /**
     The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary.
    
     For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`.
     */
    @protocol AFURLRequestSerialization <NSObject, NSSecureCoding, NSCopying>
    
    /**
     Returns a request with the specified parameters encoded into a copy of the original request.
    
     @param request The original request.
     @param parameters The parameters to be encoded.
     @param error The error that occurred while attempting to encode the request parameters.
    
     @return A serialized request.
     */
    - (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                                   withParameters:(nullable id)parameters
                                            error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW;
    
    @end
    

    AFURLRequestSerialization协议被一个对象所采用,该对象为指定的HTTP请求编码参数。 请求序列化器可以将参数编码为查询字符串,HTTP主体,根据需要设置适当的HTTP头字段。

    例如,JSON请求序列化器可以将请求的HTTP主体设置为JSON表示,并将Content-TypeHTTP标头字段值设置为application / json

    从这就能看出,AFN这个框架的设计架构和思想都是非常好,值得我们去学习的。

    后记

    本篇对请求序列化的类、协议以及架构进行了分析,下一篇将对序列化的流程进行分析,喜欢的就给个关注和赞~~

    相关文章

      网友评论

        本文标题:AFNetworking源码探究(十五) —— 请求序列化之架构

        本文链接:https://www.haomeiwen.com/subject/obdaxftx.html