版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.03.02 |
前言
我們做APP發(fā)起網(wǎng)絡(luò)請求猴蹂,都離不開一個非常有用的框架AFNetworking,可以說這個框架的知名度已經(jīng)超過了蘋果的底層網(wǎng)絡(luò)請求部分楣嘁,很多人可能不知道蘋果底層是如何發(fā)起網(wǎng)絡(luò)請求的晕讲,但是一定知道
AFNetworking
,接下來幾篇我們就一起詳細(xì)的解析一下這個框架马澈。感興趣的可以看上面寫的幾篇瓢省。
1. AFNetworking源碼探究(一) —— 基本介紹
2. AFNetworking源碼探究(二) —— GET請求實現(xiàn)之NSURLSessionDataTask實例化(一)
3. AFNetworking源碼探究(三) —— GET請求實現(xiàn)之任務(wù)進(jìn)度設(shè)置和通知監(jiān)聽(一)
4. AFNetworking源碼探究(四) —— GET請求實現(xiàn)之代理轉(zhuǎn)發(fā)思想(一)
5. AFNetworking源碼探究(五) —— AFURLSessionManager中NSURLSessionDelegate詳細(xì)解析(一)
6. AFNetworking源碼探究(六) —— AFURLSessionManager中NSURLSessionTaskDelegate詳細(xì)解析(一)
7. AFNetworking源碼探究(七) —— AFURLSessionManager中NSURLSessionDataDelegate詳細(xì)解析(一)
8. AFNetworking源碼探究(八) —— AFURLSessionManager中NSURLSessionDownloadDelegate詳細(xì)解析(一)
9. AFNetworking源碼探究(九) —— AFURLSessionManagerTaskDelegate中三個轉(zhuǎn)發(fā)代理方法詳細(xì)解析(一)
10. AFNetworking源碼探究(十) —— 數(shù)據(jù)解析之?dāng)?shù)據(jù)解析架構(gòu)的分析(一)
11. AFNetworking源碼探究(十一) —— 數(shù)據(jù)解析之子類中協(xié)議方法的實現(xiàn)(二)
12. AFNetworking源碼探究(十二) —— 數(shù)據(jù)解析之子類中協(xié)議方法的實現(xiàn)(三)
13. AFNetworking源碼探究(十三) —— AFSecurityPolicy與安全認(rèn)證 (一)
14. AFNetworking源碼探究(十四) —— AFSecurityPolicy與安全認(rèn)證 (二)
回顧
上一篇介紹了AFSecurityPolicy
與安全認(rèn)證,這一篇我們看一下請求參數(shù)的序列化問題痊班,對應(yīng)的都在文件AFURLRequestSerialization
中勤婚,下面我們就開始了。
請求序列化中的類和協(xié)議
下面我們就看一下請求序列化中的類和協(xié)議涤伐。
@protocol AFURLRequestSerialization <NSObject, NSSecureCoding, NSCopying>
@interface AFHTTPRequestSerializer : NSObject <AFURLRequestSerialization>
@protocol AFMultipartFormData
@interface AFJSONRequestSerializer : AFHTTPRequestSerializer
@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer
這里是一個父類馒胆,兩個子類缨称,父類遵循了一個協(xié)議,還有另外一個單獨的協(xié)議祝迂,它們之間的關(guān)系可以參考下圖睦尽。
上面這個圖是我畫的,應(yīng)該很清楚他們之間的關(guān)系了吧型雳。
請求序列化的架構(gòu)
大家還記得前面幾篇寫的response數(shù)據(jù)解析的結(jié)構(gòu)嗎当凡?其實這里request數(shù)據(jù)解析的架構(gòu)是一樣的,都是父類和子類均實現(xiàn)AFURLRequestSerialization
這個協(xié)議纠俭,實現(xiàn)了請求的序列化沿量。
/**
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
協(xié)議被一個對象所采用,該對象為指定的HTTP請求編碼參數(shù)冤荆。 請求序列化器可以將參數(shù)編碼為查詢字符串朴则,HTTP主體,根據(jù)需要設(shè)置適當(dāng)?shù)腍TTP頭字段钓简。
例如乌妒,JSON請求序列化器可以將請求的HTTP主體設(shè)置為JSON表示,并將Content-Type
HTTP標(biāo)頭字段值設(shè)置為application / json
外邓。
從這就能看出撤蚊,AFN這個框架的設(shè)計架構(gòu)和思想都是非常好,值得我們?nèi)W(xué)習(xí)的坐榆。
后記
本篇對請求序列化的類、協(xié)議以及架構(gòu)進(jìn)行了分析冗茸,下一篇將對序列化的流程進(jìn)行分析席镀,喜歡的就給個關(guān)注和贊~~