p_網(wǎng)絡(luò)工具類

  • 1.post珊拼、put、patch:與冪等性
    總:
    用于上傳數(shù)據(jù)的方法只有POST友雳、PUT稿湿、PATCH。
    PUT方法和PATCH方法所請(qǐng)求的目標(biāo)地址都是直接指向資源的押赊,而POST方法請(qǐng)求的目標(biāo)是一個(gè)行為處理器缎罢。PUT用于替換資源,而PATCH用于更新部分資源考杉。
    分:
    POST所對(duì)應(yīng)的URI并非創(chuàng)建的資源本身策精,而是資源的接收者。比如:POST http://www.forum.com/articles 的語義是在http://www.forum.com/articles 下創(chuàng)建一篇帖子崇棠,HTTP響應(yīng)中應(yīng)包含帖子的創(chuàng)建狀態(tài)以及帖子的URI咽袜。兩次相同的POST請(qǐng)求會(huì)在服務(wù)器端創(chuàng)建兩份資源,它們具有不同的URI枕稀;所以询刹,POST方法不具備冪等性谜嫉。
    而PUT所對(duì)應(yīng)的URI是要?jiǎng)?chuàng)建或更新的資源本身。比如:PUT http://www.forum/articles/4231 的語義是創(chuàng)建或更新ID為4231的帖子凹联。對(duì)同一URI進(jìn)行多次PUT的副作用和一次PUT是相同的沐兰;因此,PUT方法有冪等性蔽挠。

POST方法非冪等可以理解住闯,因?yàn)樗?qǐng)求服務(wù)器執(zhí)行一個(gè)動(dòng)作,多次發(fā)起請(qǐng)求可能導(dǎo)致動(dòng)作多次執(zhí)行澳淑。
而像PATCH這樣請(qǐng)求的目標(biāo)是一個(gè)資源的比原,PATCH方法和POST方法有個(gè)很相似的地方,它們的實(shí)體部分都是結(jié)構(gòu)化的數(shù)據(jù)杠巡。POST方法的實(shí)體結(jié)構(gòu)一般是 multipart/form-data 或 application/x-www-form-urlencoded 而PATCH方法的實(shí)體結(jié)構(gòu)則隨其它規(guī)范定義量窘。
這和PUT方法的無結(jié)構(gòu)實(shí)體相比就是最大的區(qū)別∏庥担  PUT方法的實(shí)體無結(jié)構(gòu)的蚌铜,它直接把實(shí)體部分的數(shù)據(jù)替換到服務(wù)器的資源上。f而PATCH提供的實(shí)體則需要根據(jù)程序或其它協(xié)議的定義嫩海,解析后在服務(wù)器上執(zhí)行厘线,以此來修改服務(wù)器上的數(shù)據(jù)。也就是說出革,PATCH請(qǐng)求是會(huì)執(zhí)行某個(gè)程序的造壮,如果重復(fù)提交,程序可能執(zhí)行多次骂束,對(duì)服務(wù)器上的資源就可能造成額外的影響耳璧,這就可以解釋它為什么是不冪等的了。


  • 2.為什么需要冪等性呢展箱?我們先從一個(gè)例子說起旨枯,假設(shè)有一個(gè)從賬戶取錢的遠(yuǎn)程API(可以是HTTP的,也可以不是)混驰,我們暫時(shí)用類函數(shù)的方式記為:

bool withdraw(account_id, amount)
withdraw的語義是從account_id對(duì)應(yīng)的賬戶中扣除amount數(shù)額的錢攀隔;如果扣除成功則返回true,賬戶余額減少amount栖榨;如果扣除失敗則返回false昆汹,賬戶余額不變。值得注意的是:和本地環(huán)境相比婴栽,我們不能輕易假設(shè)分布式環(huán)境的可靠性满粗。一種典型的情況是withdraw請(qǐng)求已經(jīng)被服務(wù)器端正確處理,但服務(wù)器端的返回結(jié)果由于網(wǎng)絡(luò)等原因被掉丟了愚争,導(dǎo)致客戶端無法得知處理結(jié)果映皆。如果是在網(wǎng)頁上挤聘,一些不恰當(dāng)?shù)脑O(shè)計(jì)可能會(huì)使用戶認(rèn)為上一次操作失敗了,然后刷新頁面捅彻,這就導(dǎo)致了withdraw被調(diào)用兩次组去,賬戶也被多扣了一次錢。

另一種更輕量級(jí)的解決方案是冪等設(shè)計(jì)步淹。我們可以通過一些技巧把withdraw變成冪等的从隆,比如:
int create_ticket() bool idempotent_withdraw(ticket_id, account_id, amount)

create_ticket的語義是獲取一個(gè)服務(wù)器端生成的唯一的處理號(hào)ticket_id,它將用于標(biāo)識(shí)后續(xù)的操作贤旷。idempotent_withdraw和withdraw的區(qū)別在于關(guān)聯(lián)了一個(gè)ticket_id广料,一個(gè)ticket_id表示的操作至多只會(huì)被處理一次砾脑,每次調(diào)用都將返回第一次調(diào)用時(shí)的處理結(jié)果幼驶。這樣,idempotent_withdraw就符合冪等性了韧衣,客戶端就可以放心地多次調(diào)用盅藻。
基于冪等性的解決方案中一個(gè)完整的取錢流程被分解成了兩個(gè)步驟:1.調(diào)用create_ticket()獲取ticket_id;2.調(diào)用idempotent_withdraw(ticket_id, account_id, amount)畅铭。雖然create_ticket不是冪等的氏淑,但在這種設(shè)計(jì)下,它對(duì)系統(tǒng)狀態(tài)的影響可以忽略硕噩,加上idempotent_withdraw是冪等的假残,所以任何一步由于網(wǎng)絡(luò)等原因失敗或超時(shí),客戶端都可以重試炉擅,直到獲得結(jié)果辉懒。如圖2所示:


idempotent

  • 3.說一下get 、delete:
    HTTP GET方法用于獲取資源谍失,不應(yīng)有副作用眶俩,所以是冪等的。比如:GET http://www.bank.com/account/123456 快鱼,不會(huì)改變資源的狀態(tài)颠印,不論調(diào)用一次還是N次都沒有副作用。請(qǐng)注意抹竹,這里強(qiáng)調(diào)的是一次和N次具有相同的副作用线罕,而不是每次GET的結(jié)果相同。GET http://www.news.com/latest-news 這個(gè)HTTP請(qǐng)求可能會(huì)每次得到不同的結(jié)果窃判,但它本身并沒有產(chǎn)生任何副作用闻坚,因而是滿足冪等性的。

HTTP DELETE方法用于刪除資源兢孝,有副作用窿凤,但它應(yīng)該滿足冪等性仅偎。比如:DELETE http://www.forum.com/article/4231 ,調(diào)用一次和N次對(duì)系統(tǒng)產(chǎn)生的副作用是相同的雳殊,即刪掉id為4231的帖子橘沥;因此,調(diào)用者可以多次調(diào)用或刷新頁面而不必?fù)?dān)心引起錯(cuò)誤夯秃。

  • 4.說一下post 和 get的區(qū)別座咆?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仓洼,隨后出現(xiàn)的幾起案子介陶,更是在濱河造成了極大的恐慌,老刑警劉巖色建,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哺呜,死亡現(xiàn)場離奇詭異,居然都是意外死亡箕戳,警方通過查閱死者的電腦和手機(jī)某残,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陵吸,“玉大人玻墅,你說我怎么就攤上這事∽吵妫” “怎么了澳厢?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長囚似。 經(jīng)常有香客問我剩拢,道長,這世上最難降的妖魔是什么谆构? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任裸扶,我火速辦了婚禮,結(jié)果婚禮上搬素,老公的妹妹穿的比我還像新娘呵晨。我一直安慰自己,他們只是感情好熬尺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布摸屠。 她就那樣靜靜地躺著,像睡著了一般粱哼。 火紅的嫁衣襯著肌膚如雪季二。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音胯舷,去河邊找鬼刻蚯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛桑嘶,可吹牛的內(nèi)容都是我干的炊汹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逃顶,長吁一口氣:“原來是場噩夢啊……” “哼讨便!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起以政,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤霸褒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盈蛮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體废菱,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年眉反,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昙啄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穆役。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寸五,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耿币,到底是詐尸還是另有隱情梳杏,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布淹接,位于F島的核電站十性,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏塑悼。R本人自食惡果不足惜劲适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厢蒜。 院中可真熱鬧霞势,春花似錦、人聲如沸斑鸦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷屿。三九已至固以,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憨琳。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工诫钓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人篙螟。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓尖坤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親闲擦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慢味,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 前言 HTTP Method的歷史: HTTP 0.9 這個(gè)版本只有GET方法 HTTP 1.0 這個(gè)版本有G...
    老馬的春天閱讀 25,918評(píng)論 3 9
  • 如果要追根溯源,冪等性是數(shù)學(xué)中的一個(gè)概念墅冷,表達(dá)的是N次變換與1次變換的結(jié)果相同纯路。 基于HTTP協(xié)議的Web API...
    Ray雷磊閱讀 1,896評(píng)論 0 1
  • 轉(zhuǎn)載自 Programming.log - a place to keep my thoughts on prog...
    廚子閱讀 408評(píng)論 0 4
  • 理解HTTP冪等性 基于HTTP協(xié)議的Web API是時(shí)下最為流行的一種分布式服務(wù)提供方式。無論是在大型互聯(lián)網(wǎng)應(yīng)用...
    阿燈_supwinr閱讀 442評(píng)論 0 0
  • 關(guān)于數(shù)據(jù)庫的淺顯認(rèn)知# -什么是數(shù)據(jù)庫寞忿?-數(shù)據(jù)的集散地驰唬,能夠有效的存儲(chǔ)和管理數(shù)據(jù)-關(guān)系型數(shù)據(jù)庫:關(guān)系型數(shù)據(jù)庫:1....
    hoggenWang閱讀 697評(píng)論 0 0