RESTful

什么是REST

全拼:Representational State Transfer徽诲,中文直譯就是,要理解RESTful吵血,首先得知道什么是REST谎替。

REST其實(shí)是一組架構(gòu)約束條件和原則,所以蹋辅,它首先是需要在符合架構(gòu)原理的前提下的一組原則钱贯,再者,其以網(wǎng)絡(luò)為基礎(chǔ)侦另,所以其充分利用了web的約束條件與原則秩命,其本身就受Web技術(shù)的影響很深。

那么RESTful呢褒傅?一個(gè)架構(gòu)如果符合REST的約束條件和原則弃锐,我們就稱它為RESTful架構(gòu)

理論上REST架構(gòu)風(fēng)格并不是綁定在HTTP上,只不過目前HTTP是唯一與REST相關(guān)的實(shí)例殿托。所以這里描述的REST也是通過HTTP實(shí)現(xiàn)的REST

那什么是REST原則與約束

一般都會有5個(gè)關(guān)鍵的概念:

資源與URI

資源拿愧,這里涉及了REST的第一個(gè)關(guān)鍵詞R(Representational)。任何事物(具體或抽象都可)碌尔,只要有被引用到的必要浇辜,它就是一個(gè)資源

比如:

  • 電話號碼
  • 用戶套餐
  • 物品價(jià)值

要讓一個(gè)資源可以被識別唾戚,需要有個(gè)唯一標(biāo)識柳洋,在Web中這個(gè)唯一標(biāo)識就是URI(Uniform Resource Identifier)。

URI既可以看成是資源的地址叹坦,也可以看成是資源的名稱熊镣。如果某些信息沒有使用URI來表示,那它就不能算是一個(gè)資源, 只能算是資源的一些信息而已绪囱。URI的設(shè)計(jì)應(yīng)該遵循可尋址性原則测蹲,具有自描述性,需要在形式上給人以直覺上的關(guān)聯(lián)鬼吵,這里就涉及了URI的設(shè)計(jì)技巧扣甲。

URI設(shè)計(jì)技巧:

  • 使用_或-替換數(shù)字,使其具有更好的可讀性

  • 使用/來表示資源的層級關(guān)系

  • 使用?用來過濾資源

    有開發(fā)經(jīng)驗(yàn)的可能想齿椅?后面的應(yīng)該是參數(shù)傳遞才對琉挖,但更好的理解應(yīng)該是對資源的過濾

  • 使用“,或;”表示同級關(guān)系

統(tǒng)一資源接口

標(biāo)準(zhǔn)的HTTP的GET,DELETE涣脚,PUT和POST示辈;一般默認(rèn)地對應(yīng)“查、刪遣蚀、改矾麻、增”。另外還有HEAD和OPTIONS芭梯。

按照HTTP方法的語義來暴露資源险耀,那么接口將會擁有安全性和冪等性的特性,例如GET和HEAD請求都是安全的粥帚, 無論請求多少次,都不會改變服務(wù)器狀態(tài)限次。而GET芒涡、HEAD、PUT和DELETE請求都是冪等的卖漫,無論對資源操作多少次费尽, 結(jié)果總是一樣的,后面的請求并不會產(chǎn)生比第一次更多的影響

資源的表述與多重表述

客戶端通過HTTP方法可以獲取資源羊始,是吧? 不旱幼,確切的說,客戶端獲取的只是資源的表述而已突委。資源可以有多種表述形式柏卤,如文本資源可以使用json、xml等匀油,圖片可以為jpg缘缚、png等。而客戶端與服務(wù)端需要通過一種機(jī)制協(xié)商資源的表述形式敌蚜,那就是客戶端可以通過Accept頭請求一種特定格式的表述桥滨,服務(wù)端則通過Content-Type告訴客戶端資源的表述形式

在http中,content-type一共有3鐘:

  • text/*

    *可為text/json/xml/html,其中不含任何控件或格式字符

  • multipart/form-data

    數(shù)據(jù)被編碼為一條消息齐媒,頁上的每個(gè)控件對應(yīng)消息中的一個(gè)部分

  • application/x-www-form-urlencoded

    數(shù)據(jù)被編碼為名稱/值對

URL:如果我們把版本號理解成資源的不同表述形式的話蒲每,就應(yīng)該只是用一個(gè)URL,并通過Accept頭部來區(qū)分

資源的鏈接

當(dāng)你瀏覽Web網(wǎng)頁時(shí)喻括,從一個(gè)連接跳到一個(gè)頁面邀杏,再從另一個(gè)連接跳到另外一個(gè)頁面,這其實(shí)就是超媒體的概念:把一個(gè)個(gè)把資源鏈接起來(這其實(shí)是構(gòu)成動態(tài)應(yīng)用的一種有效方式)双妨,類似于頁面中各種a標(biāo)簽

無狀態(tài)通信or狀態(tài)的轉(zhuǎn)移

注意了淮阐,無狀態(tài)通信——并不是說客戶端應(yīng)用不能有狀態(tài),而是指服務(wù)端不應(yīng)該保存客戶端狀態(tài)刁品。

狀態(tài)應(yīng)該區(qū)分應(yīng)用狀態(tài)資源狀態(tài)泣特,客戶端負(fù)責(zé)維護(hù)應(yīng)用狀態(tài),而服務(wù)端維護(hù)資源狀態(tài)挑随。REST要求狀態(tài)要么被放入資源狀態(tài)中状您,要么保存在客戶端上;換句話說兜挨,服務(wù)器端不能保持除了單次請求之外的膏孟,任何與其通信的客戶端的通信狀態(tài)。這樣做的最直接的理由就是可伸縮性—— 如果服務(wù)器需要保持客戶端狀態(tài)拌汇,那么大量的客戶端交互會嚴(yán)重影響服務(wù)器的內(nèi)存可用空間柒桑。服務(wù)端不需要在請求間保留應(yīng)用狀態(tài),只有在接受到實(shí)際請求的時(shí)候噪舀,服務(wù)端才會關(guān)注應(yīng)用狀態(tài)魁淳。

無狀態(tài)約束使服務(wù)器的變化對客戶端是不可見的,因?yàn)樵趦纱芜B續(xù)的請求中与倡,客戶端并不依賴于同一臺服務(wù)器界逛。

這種無狀態(tài)通信原則,使得服務(wù)端和中介能夠理解獨(dú)立的請求和響應(yīng)纺座。

"會話"狀態(tài)不是作為資源狀態(tài)保存在服務(wù)端的息拜,而是被客戶端作為應(yīng)用狀態(tài)進(jìn)行跟蹤的【幌欤客戶端應(yīng)用狀態(tài)在服務(wù)端提供的超媒體的指引下發(fā)生變遷少欺,服務(wù)端通過超媒體(其實(shí)就是資源的鏈接)告訴客戶端當(dāng)前狀態(tài)有哪些后續(xù)狀態(tài)可以進(jìn)入。這也就是狀態(tài)的轉(zhuǎn)移過程馋贤。

參考:

http://www.runoob.com/w3cnote/restful-architecture.html
http://www.infoq.com/cn/articles/rest-introduction/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狈茉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掸掸,更是在濱河造成了極大的恐慌氯庆,老刑警劉巖蹭秋,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異堤撵,居然都是意外死亡仁讨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門实昨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洞豁,“玉大人,你說我怎么就攤上這事荒给≌尚” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵志电,是天一觀的道長曙咽。 經(jīng)常有香客問我,道長挑辆,這世上最難降的妖魔是什么例朱? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鱼蝉,結(jié)果婚禮上洒嗤,老公的妹妹穿的比我還像新娘。我一直安慰自己魁亦,他們只是感情好渔隶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洁奈,像睡著了一般间唉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睬魂,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天终吼,我揣著相機(jī)與錄音镀赌,去河邊找鬼氯哮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛商佛,可吹牛的內(nèi)容都是我干的喉钢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼良姆,長吁一口氣:“原來是場噩夢啊……” “哼肠虽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玛追,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤税课,失蹤者是張志新(化名)和其女友劉穎闲延,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韩玩,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垒玲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了找颓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合愈。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖击狮,靈堂內(nèi)的尸體忽然破棺而出佛析,到底是詐尸還是另有隱情,我是刑警寧澤彪蓬,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布寸莫,位于F島的核電站,受9級特大地震影響寞焙,放射性物質(zhì)發(fā)生泄漏储狭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一捣郊、第九天 我趴在偏房一處隱蔽的房頂上張望辽狈。 院中可真熱鬧,春花似錦呛牲、人聲如沸刮萌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽着茸。三九已至,卻和暖如春琐旁,著一層夾襖步出監(jiān)牢的瞬間涮阔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工灰殴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敬特,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓牺陶,卻偏偏與公主長得像伟阔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子掰伸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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