AFNetworking原始碼探究(十五) —— 請求序列化之架構分析(一)
版本記錄
版本號 | 時間 |
---|---|
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-Type
HTTP標頭欄位值設定為application / json
。
從這就能看出,AFN這個框架的設計架構和思想都是非常好,值得我們去學習的。
後記
本篇對請求序列化的類、協議以及架構進行了分析,下一篇將對序列化的流程進行分析,喜歡的就給個關注和贊~~
相關文章
- 【Zookeeper】原始碼分析之請求處理鏈(一)原始碼
- OkHttp 原始碼分析(一)—— 請求流程HTTP原始碼
- AFNetworking 原始碼分析(一)原始碼
- ThinkPHP6 原始碼分析之請求流程PHP原始碼
- ThinkPHP6 原始碼分析之請求處理PHP原始碼
- Laravel 請求類原始碼分析Laravel原始碼
- Okhttp同步請求原始碼分析HTTP原始碼
- 原始碼分析Retrofit請求流程原始碼
- 【Zookeeper】原始碼分析之請求處理鏈(三)之SyncRequestProcessor原始碼
- 【Zookeeper】原始碼分析之請求處理鏈(二)之PrepRequestProcessor原始碼
- 原始碼閱讀:AFNetworking(十五)——UIRefreshControl+AFNetworking原始碼UI
- AFNetworking原始碼分析原始碼
- DRF之請求執行流程和APIView原始碼分析APIView原始碼
- 深入OKHttp原始碼分析(一)----同步和非同步請求流程和原始碼分析HTTP原始碼非同步
- 【Zookeeper】原始碼分析之序列化原始碼
- 原始碼分析Gateway請求轉發原始碼Gateway
- SpringMVC請求流程原始碼分析SpringMVC原始碼
- axios原始碼分析——取消請求iOS原始碼
- axios原始碼分析——請求流程iOS原始碼
- 【Zookeeper】原始碼分析之請求處理鏈(四)之FinalRequestProcessor原始碼
- OkHttp3原始碼解析(一)之請求流程HTTP原始碼
- Django(48)drf請求模組原始碼分析Django原始碼
- AFNetWorking原始碼之AFURLSessionManager原始碼Session
- AFNetWorking原始碼之AFURLRequestSerialization原始碼
- OkHttp 3.7原始碼分析(一)——整體架構HTTP原始碼架構
- Retrofit原始碼解析之網路請求原始碼
- Vue原始碼探究-資料繫結邏輯架構Vue原始碼架構
- MongoDB原始碼分析之Command體系架構CJMongoDB原始碼架構
- Android官方架構元件之LiveData + ViewModel + Room 原始碼分析一Android架構元件LiveDataViewOOM原始碼
- Volley 原始碼解析之圖片請求原始碼
- Volley 原始碼解析之網路請求原始碼
- thrift原始碼分析-架構設計原始碼架構
- spark 原始碼分析之十五 -- Spark記憶體管理剖析Spark原始碼記憶體
- AFNetworking(一)從一次請求瞭解AFHTTPSessionManagerHTTPSession
- flask 原始碼解析:請求Flask原始碼
- AFNetworking3.0 HTTPS請求HTTP
- 深入理解OkHttp原始碼(一)——提交請求HTTP原始碼
- OkHttpClient原始碼分析(一)—— 同步、非同步請求分析和Dispatcher的任務排程HTTPclient原始碼非同步