網(wǎng)絡請求

YTKNetworkConfig的功能使用方法讥脐?

1因悲、配置所有網(wǎng)絡請求的主機地址和CDN地址2厚者、與url過濾類一起來統(tǒng)一對所有的url進行更改 3、本質(zhì)是一個單例類促煮,所以直接實例化對象邮屁,設置對象的baseUrl和cdnUrl屬性

網(wǎng)絡請求類YTKRequest?

這相當于我們的BaseRequest菠齿,以后每一個網(wǎng)絡請求對象都將繼承于它佑吝,一個網(wǎng)絡請求一個對象。使用就是通過覆蓋父類的方法來建立特定的網(wǎng)絡請求對象绳匀,主要就是覆蓋requestUrl芋忿、requestMethod炸客、requestArgument等方法,需要特別注意的是因為詳細網(wǎng)址已經(jīng)設置在YTKNetworkConfig類的baseUrl屬性里戈钢,因此這里的requestUrl就不用再寫服務器的主機地址了痹仙。請求數(shù)據(jù)之前先判斷已有的JSON數(shù)據(jù)是否無效的屬性:jsonValidator檢查網(wǎng)絡請求到的JSON與已有的JSON是否一致:statusCodeValidator屬性如果我們要POST文件就需要用到屬性:constructingBodyBlock

什么叫支持文件的斷點續(xù)傳?

如何打破Block回調(diào)中的循環(huán)引用在block里直接用self殉了?

就是在網(wǎng)絡請求結(jié)束之后开仰,調(diào)用將Block置空的方法來防止循環(huán)引用,這樣就可以少些很多的typeof self weafSelf;使用方法宣渗?pod ‘YTKNetwork’抖所。將每一個網(wǎng)絡請求都封裝成對象,每一個請求都需要繼承YTKRequest類痕囱,通過覆蓋父類的一些方法來構(gòu)造制定的網(wǎng)絡請求田轧。就是在網(wǎng)絡請求結(jié)束之后,調(diào)用將Block置空的方法來防止循環(huán)引用鞍恢,這樣就可以少些很多的__weak typeof (self) weafSelf = self;

網(wǎng)絡封裝的適用場景傻粘?

1、需要緩存2帮掉、網(wǎng)絡請求之間存在依賴弦悉,即B網(wǎng)絡請求是否開始與A網(wǎng)絡請求的結(jié)果直接相關(guān)3、依賴特定的版本號來判斷緩存的內(nèi)容已過期4蟆炊、不僅可以實現(xiàn)Block回調(diào)稽莉,更是可以通過設置delegate屬性等于self,同時調(diào)用start方法進行委托回調(diào)涩搓。按時間緩存網(wǎng)絡請求內(nèi)容污秆?意思是說按一定的時間規(guī)律來進行緩存還是說超過了一定時間后已經(jīng)緩存的內(nèi)容失效,其實兩者并不矛盾昧甘,正是因為緩存的內(nèi)容在一段時間之后失效良拼,所以需要重新請求數(shù)據(jù),進行緩存充边。什么叫按版本號緩存網(wǎng)絡請求地址庸推?網(wǎng)絡請求中統(tǒng)一設置CDN地址,什么是CDN地址浇冰?全稱content delivery Network,內(nèi)容分發(fā)網(wǎng)絡贬媒。通過在網(wǎng)絡各處放置節(jié)點服務器實現(xiàn)在現(xiàn)有的服務器基礎(chǔ)上補充一層智能虛擬網(wǎng)絡,智能引導用戶到最近的服務器上肘习,是內(nèi)容傳輸?shù)母旒食恕⒏€(wěn)定。相互依賴的網(wǎng)絡請求的發(fā)送井厌?就是一個網(wǎng)絡請求的啟動開關(guān)取決于另一個網(wǎng)絡請求的請求結(jié)果蚓庭。

為什么要驗證JSON的合法性?

因為從服務器獲得的JSON數(shù)據(jù)不一定總是可信賴的仅仆,如果數(shù)據(jù)是從有故障的服務器返回了一個錯誤的格式器赞,就非常容易造成客戶端崩潰。就加入說正常情況下墓拜,我們登錄個人中心港柜,返回的昵稱總是字符串,用戶年齡都是數(shù)字咳榜,可是假如返回的文件格式出現(xiàn)問題夏醉,那么客戶端必崩無疑。所以驗證的方法就是重寫父類基礎(chǔ)網(wǎng)絡請求YTKRequest類的- (id)jsonValidator方法涌韩。返回的是一個字典畔柔,這個字典里面的鍵就是字符串形參,鍵值對的值就是【NSString class】臣樱。

在YTKNetworkConfig的對象里同時設置了baseUrl和cdnUrl屬性靶擦?

1、默認使用baseUrl2雇毫、如果想要使用cdnUrl玄捕,就必須重寫基礎(chǔ)網(wǎng)絡請求YTKRequest類的-(BOOL)useCDN方法并返回YES

實現(xiàn)斷點續(xù)傳下載?

重寫基礎(chǔ)網(wǎng)絡請求YTKRequest類的resumableDownloadPath方法棚放,直接返回一個文件路徑字符串枚粘。這里面就涉及到庫路徑Lib Path。

緩存路徑cachePath如何實現(xiàn)緩存數(shù)據(jù)的存绕恰馍迄?

首先就是通過重寫基礎(chǔ)網(wǎng)絡請求YTKRequest類的- (NSInteger的)cacheTimeInSeconds方法設定高速緩存數(shù)據(jù)的有效秒數(shù),如果緩存的數(shù)據(jù)沒有到期孝冒,在緩存期內(nèi)調(diào)用start方法或是startWithCompletionBlockWithSuccess方法時實際上并不會發(fā)送真正的請求柬姚,而是直接返回當初高速緩存的數(shù)據(jù),只有在緩存過期時庄涡,才會真正地發(fā)送網(wǎng)絡請求量承。

高級用法

批量編輯網(wǎng)絡請求路徑?

首先分析url參數(shù)過濾的類的實現(xiàn)原理穴店,其實本質(zhì)就是通過一個全新的自定義類來整合基礎(chǔ)的url和新增的參數(shù)字典撕捍,然后介紹url參數(shù)過濾的類的使用方法。1泣洞、新建一個url參數(shù)過濾的類忧风,這個類的.h方法里面有一個協(xié)議,協(xié)議里面主要實現(xiàn)了兩個方法球凰,第一個方法輸入?yún)?shù)是一個字典狮腿,返回一個自定義類的對象腿宰;第二個方法就是輸入?yún)?shù)一為原始url的字符串,參數(shù)二為基礎(chǔ)網(wǎng)絡請求類的對象缘厢,返回參數(shù)是一個全新的url字符串吃度。2、.m方法里面首先包括一個名為參數(shù)arguments的全局變量字典贴硫。前面說過返回的參數(shù)為url參數(shù)過濾的類的對象本身椿每,恰好這個url參數(shù)過濾的類的對象的初始化就需要傳入argument字典。讓我奇怪的是為什么是url參數(shù)過濾的類生成類時的self對象來調(diào)用alloc來開辟內(nèi)存空間英遭。而且又返回一個url參數(shù)過濾的類的對象间护,好奇怪。3挖诸、在輸入原始url和增加的request兩個參數(shù)之后返回一個全新的url字符串汁尺。這里面務必注意這里是通過網(wǎng)絡請求私有類來調(diào)用一個方法拼接原始的url和新增的參數(shù)字典,最后返回一個字符串多律,反而當初傳進來的request網(wǎng)絡請求類對象并沒有使用均函。

舉例現(xiàn)在要把客戶端的版本號添加到所有的網(wǎng)絡請求url之中?

其實就是在設置根控制器為可見的方法里使用兩個類來實現(xiàn)網(wǎng)絡參數(shù)的統(tǒng)一添加菱涤,所有的url都變成全新的url苞也,當務之急還是先通過url參數(shù)過濾的類調(diào)用類方法傳入?yún)?shù)實例化一個url參數(shù)過濾的類的對象。然后再通過網(wǎng)絡配置這個單例類對象調(diào)用添加url參數(shù)過濾的類的對象的方法粘秆,其目的就是將添加后的參數(shù)推廣到所有網(wǎng)絡請求url如迟。

同一時間發(fā)送批量的網(wǎng)絡請求并統(tǒng)一處理同時請求成功時的回調(diào)?

1攻走、實例化4個Api對象2殷勘、把這4個對象以數(shù)組的元素的形式傳入初始化YTKBatchRequest對象的數(shù)組形參里3、YTKBatchRequest對象調(diào)用startWithCompletionBlockWithSuccess方法4昔搂、在4個Api對象全部請求成功的Block回調(diào)里實例化一個臨時數(shù)組并賦值為YTKBatchRequest對象的requestArray屬性5玲销、再各自使用4個Api類實例四個Api對象,一一對應requestArray的每一個元素摘符,但然需要強轉(zhuǎn)6贤斜、現(xiàn)在就跟一個Api請求成功獲得的request沒有什么區(qū)別了。

加載緩存數(shù)據(jù)的高級用法逛裤?

由于加載慢瘩绒,所以先調(diào)用方法[api cacheJson]顯示上次緩存的內(nèi)容,加載成功后带族,再用最新的內(nèi)容替換上次的內(nèi)容锁荔,如是斷網(wǎng)狀態(tài)也先顯示上次緩存中的內(nèi)容。當初不是還需要Api先來判斷緩存的數(shù)據(jù)是否在有效時間內(nèi)蝙砌,然后再決定是否是真的請求數(shù)據(jù)阳堕。而現(xiàn)在就是直接調(diào)用- (id)cacheJson方法獲得上次緩存的內(nèi)容跋理。前提必須重寫父類設定緩存有效時間的方法- (NSInteger)cacheTimeInSeconds返回一個大于0的值,這樣才能開啟基礎(chǔ)網(wǎng)絡請求類的緩存功能恬总。因為默認情況下緩存數(shù)據(jù)的有效時間為0秒薪介。

上傳文件獲得一個訪問文件的Api?

關(guān)鍵就是重寫基礎(chǔ)網(wǎng)絡請求類的- (AFConstructingBlock)constructingBodyBlock方法越驻,在這個方法里直return一個Block代碼塊,返回參數(shù)為void直接忽略沒寫道偷,輸入?yún)?shù)為一個滿足協(xié)議的formData值缀旁,數(shù)據(jù)類型自然不確定是id啦。這就相當于直接return一個NSString *tempString = @“”勺鸦,只不過這里的tempString是一個^(idformData)輸入?yún)?shù)為fromData的Block,而且這個地方直接給Block賦值了并巍,真的是既聲明又賦值。賦值的代碼里面首先就是壓縮圖片成NSData數(shù)據(jù)换途。最后通過formData調(diào)用appendPartWithFileData方法正式上傳圖片懊渡。尤其注意這里需要傳入三個參數(shù),其一是文件的二進制數(shù)據(jù)军拟,其二是文件名字剃执,其三是文件夾的名字,其四很關(guān)鍵懈息,需要傳入文件類型肾档,圖片通常都是image/jpeg。另外文件名字和文件夾的名字可以相同辫继,而且通常來說就是image怒见。

統(tǒng)一設置網(wǎng)絡請求Api的請求頭HeaderField?

重寫覆蓋基礎(chǔ)網(wǎng)絡請求類的-(NSDictionnary*)requestHeaderFieldValueDictionary方法返回一個請求頭的鍵值對的字典姑宽。務必注意遣耍,請求頭字典的鍵和值都必須是NSString類型。

定制自定義的網(wǎng)絡請求類對象炮车?

重寫最最基礎(chǔ)網(wǎng)絡請求YTKBaseRequest類的- (NSURLRequest *)buildCustomUrlRequest

方法舵变,返回一個基礎(chǔ)網(wǎng)絡請求類的對象。尤其注意的是瘦穆,只要返回的基礎(chǔ)網(wǎng)絡請求類的對象非nil不為空棋傍,那么會忽略其它一切自定義request的方法。

按時間緩存網(wǎng)絡請求內(nèi)容难审?

意思是說按一定的時間規(guī)律來進行緩存還是說超過了一定時間后已經(jīng)緩存的內(nèi)容失效瘫拣,其實兩者并不矛盾,正是因為緩存的內(nèi)容在一段時間之后失效告喊,所以需要重新請求數(shù)據(jù)麸拄,進行緩存派昧。

按版本號緩存網(wǎng)絡請求地址?

網(wǎng)絡請求中統(tǒng)一設置CDN地址拢切,什么是CDN地址蒂萎?

全稱content delivery Network,內(nèi)容分發(fā)網(wǎng)絡。通過在網(wǎng)絡各處放置節(jié)點服務器實現(xiàn)在現(xiàn)有的服務器基礎(chǔ)上補充一層智能虛擬網(wǎng)絡淮椰,智能引導用戶到最近的服務器上五慈,是內(nèi)容傳輸?shù)母臁⒏€(wěn)定主穗。

相互依賴的網(wǎng)絡請求的發(fā)送泻拦?

就是一個網(wǎng)絡請求的啟動開關(guān)取決于另一個網(wǎng)絡請求的請求結(jié)果。

一次性對所有的網(wǎng)絡請求路徑進行更改忽媒?

首先分析url參數(shù)過濾的類的實現(xiàn)原理争拐,其實本質(zhì)就是通過一個全新的自定義類來整合基礎(chǔ)的url和新增的參數(shù)字典,然后介紹url參數(shù)過濾的類的使用方法晦雨。

1架曹、新建一個url參數(shù)過濾的類,這個類的.h方法里面有一個協(xié)議闹瞧,協(xié)議里面主要實現(xiàn)了兩個方法绑雄,第一個方法輸入?yún)?shù)是一個字典,返回一個自定義類的對象奥邮;第二個方法就是輸入?yún)?shù)一為原始url的字符串绳慎,參數(shù)二為基礎(chǔ)網(wǎng)絡請求類的對象,返回參數(shù)是一個全新的url字符串漠烧。

2杏愤、.m方法里面首先包括一個名為參數(shù)arguments的全局變量字典。前面說過返回的參數(shù)為url參數(shù)過濾的類的對象本身已脓,恰好這個url參數(shù)過濾的類的對象的初始化就需要傳入argument字典珊楼。讓我奇怪的是為什么是url參數(shù)過濾的類生成類時的self對象來調(diào)用alloc來開辟內(nèi)存空間。而且又返回一個url參數(shù)過濾的類的對象度液,好奇怪厕宗。

3、在輸入原始url和增加的request兩個參數(shù)之后返回一個全新的url字符串堕担。這里面務必注意這里是通過網(wǎng)絡請求私有類來調(diào)用一個方法拼接原始的url和新增的參數(shù)字典已慢,最后返回一個字符串,反而當初傳進來的request網(wǎng)絡請求類對象并沒有使用霹购。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佑惠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膜楷,老刑警劉巖旭咽,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赌厅,居然都是意外死亡穷绵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門特愿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仲墨,“玉大人,你說我怎么就攤上這事揍障∧垦” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵亚兄,是天一觀的道長。 經(jīng)常有香客問我采驻,道長审胚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任礼旅,我火速辦了婚禮膳叨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痘系。我一直安慰自己菲嘴,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布汰翠。 她就那樣靜靜地躺著龄坪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪复唤。 梳的紋絲不亂的頭發(fā)上健田,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音佛纫,去河邊找鬼妓局。 笑死,一個胖子當著我的面吹牛呈宇,可吹牛的內(nèi)容都是我干的好爬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甥啄,長吁一口氣:“原來是場噩夢啊……” “哼存炮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤僵蛛,失蹤者是張志新(化名)和其女友劉穎尚蝌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體充尉,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡飘言,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驼侠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姿鸿。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倒源,靈堂內(nèi)的尸體忽然破棺而出苛预,到底是詐尸還是另有隱情,我是刑警寧澤笋熬,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布热某,位于F島的核電站,受9級特大地震影響胳螟,放射性物質(zhì)發(fā)生泄漏昔馋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一糖耸、第九天 我趴在偏房一處隱蔽的房頂上張望秘遏。 院中可真熱鬧,春花似錦嘉竟、人聲如沸邦危。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倦蚪。三九已至,卻和暖如春边苹,著一層夾襖步出監(jiān)牢的瞬間审丘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工勾给, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滩报,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓播急,卻偏偏與公主長得像脓钾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子桩警,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • AFHTTPRequestOperationManager 網(wǎng)絡傳輸協(xié)議UDP可训、TCP、Http、Socket握截、X...
    Carden閱讀 4,343評論 0 12
  • Android 異步網(wǎng)絡請求框架-Volley 1. 功能介紹 1.1. Volley Volley 是 Goog...
    Brian512閱讀 3,905評論 2 40
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理飞崖,服務發(fā)現(xiàn),斷路器谨胞,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 網(wǎng)絡請求是android客戶端很重要的部分固歪。下面從入門級開始介紹下自己Android網(wǎng)絡請求的實踐歷程。希望能給剛...
    passiontim閱讀 1,386評論 0 17
  • 近日在閱讀《與神對話》2胯努,第一部幾年前便已看過牢裳,覺得未能好好消化,一直未動手準備第二部的閱讀叶沛。一經(jīng)打開蒲讯,便如重拾前...
    左手咖啡右手娃閱讀 1,035評論 0 0