初識RESTful Web

參考借鑒:http://www.cnblogs.com/loveis715/p/4669091.html
一杭跪、定義
REST其實(shí)是一種組織Web服務(wù)的架構(gòu),而并不是我們想象的那樣是實(shí)現(xiàn)Web服務(wù)的一種新的技術(shù)绰精,更沒有要求一定要使用HTTP。其目標(biāo)是為了創(chuàng)建具有良好擴(kuò)展性的分布式系統(tǒng)诸衔。與目前常見的web設(shè)計(jì)架構(gòu)區(qū)別點(diǎn)在于着绷,REST是以資源為中心,而常規(guī)web架構(gòu)是以執(zhí)行了什么任務(wù)為中心。

二感耙、五大約束
1褂乍、使用客戶/服務(wù)器模型〖磁穑客戶和服務(wù)器之間通過一個(gè)統(tǒng)一的接口來互相通訊逃片。
2、層次化的系統(tǒng)只酥。在一個(gè)REST系統(tǒng)中褥实,客戶端并不會固定地與一個(gè)服務(wù)器打交道。
3层皱、無狀態(tài)性锭。在一個(gè)REST系統(tǒng)中,服務(wù)端并不會保存有關(guān)客戶的任何狀態(tài)叫胖。也就是說草冈,客戶端自身負(fù)責(zé)用戶狀態(tài)的維持,并在每次發(fā)送請求時(shí)都需要提供足夠的信息瓮增。
4怎棱、可緩存。REST系統(tǒng)需要能夠恰當(dāng)?shù)鼐彺嬲埱蟊僚埽员M量減少服務(wù)端和客戶端之間的信息傳輸拳恋,以提高性能。
5砸捏、統(tǒng)一的接口谬运。一個(gè)REST系統(tǒng)需要使用一個(gè)統(tǒng)一的接口來完成子系統(tǒng)之間以及服務(wù)與用戶之間的交互。這使得REST系統(tǒng)中的各個(gè)子系統(tǒng)可以獨(dú)自完成演化垦藏。(是REST服務(wù)設(shè)計(jì)的核心所在)

三梆暖、統(tǒng)一接口四個(gè)子約束
1、每個(gè)資源都擁有一個(gè)資源標(biāo)識掂骏。每個(gè)資源的資源標(biāo)識可以用來唯一地標(biāo)明該資源轰驳。
2、消息的自描述性弟灼。在REST系統(tǒng)中所傳遞的消息需要能夠提供自身如何被處理的足夠信息级解。例如該消息所使用的MIME類型,是否可以被緩存等田绑。
3勤哗、資源的自描述性。一個(gè)REST系統(tǒng)所返回的資源需要能夠描述自身掩驱,并提供足夠的用于操作該資源的信息芒划,如如何對資源進(jìn)行添加豁延,刪除以及修改等操作。也就是說腊状,一個(gè)典型的REST服務(wù)不需要額外的文檔對如何操作資源進(jìn)行說明。
4苔可、HATEOAS缴挖。即客戶只可以通過服務(wù)端所返回各結(jié)果中所包含的信息來得到下一步操作所需要的信息(客戶端僅可以決定資源ID),如到底是向哪個(gè)URL發(fā)送請求等焚辅。也就是說映屋,一個(gè)典型的REST服務(wù)不需要額外的文檔標(biāo)示通過哪些URL訪問特定類型的資源,而是通過服務(wù)端返回的響應(yīng)來標(biāo)示到底能在該資源上執(zhí)行什么樣的操作同蜻。一個(gè)REST服務(wù)的客戶端也不需要知道任何有關(guān)哪里有什么樣的資源這種信息棚点。

四、資源操作方式
1湾蔓、GET 等冪且安全瘫析,讀取資源
2、DELETE 等冪 默责,刪除資源
3贬循、POST 不等冪,創(chuàng)建資源桃序,ID由服務(wù)端創(chuàng)建
4杖虾、PUT 等冪,創(chuàng)建資源和更新整個(gè)資源媒熊,ID由客戶端創(chuàng)建奇适,一般通過GUID和UUID
5、PATCH 等冪芦鳍,更新部分資源

注:等冪性嚷往,是指每次操作結(jié)果都一樣

五、HTTP Code
參照:Hypermedia ControlsHypermedia Controlshttp://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
100 Continue
101 Switching
102 Processing
103-199 Unassigned
200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
207 Multi-Status
208 Already Reported
209-225 Unassigned
226 IM Used
227-299 Unassigned
300 Multiple Choices
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
305 Use Proxy
306 (Unused)
307 Temporary Redirect
308 Permanent Redirect
309-399 Unassigned
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Payload Too Large
414 URI Too Long
415 Unsupported Media Type
416 Range Not Satisfiable
417 Expectation Failed
418-420 Unassigned
421 Misdirected Request
422 Unprocessable Entity
423 Locked
424 Failed Dependency
425 Unassigned
426 Upgrade Required
427 Unassigned
428 Precondition Required
429 Too Many Requests
430 Unassigned
431 Request Header Fields Too Large
432-450 Unassigned
451 Unavailable For Legal Reasons
452-499 Unassigned
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
506 Variant Also Negotiates
507 Insufficient Storage
508 Loop Detected
509 Unassigned
510 Not Extended
511 Network Authentication Required
512-599 Unassigned

六怜校、開發(fā)注意
對于一個(gè)基于HTTP的REST服務(wù)而言间影,軟件開發(fā)人員需要遵守如下的守則以保持API的后向兼容性(即兼容舊版本):

1、不能在請求中添加新的必須的參數(shù)茄茁。
2魂贬、不能更改操作資源的動詞。
3裙顽、不能更改響應(yīng)的HTTP status付燥。

七、性能優(yōu)化
  接下來我們就來簡單地說說基于HTTP的REST服務(wù)中的性能問題愈犹。在基于HTTP的REST服務(wù)中键科,性能提升主要分為兩個(gè)方面:REST架構(gòu)本身在提高性能方面做出的努力闻丑,以及基于HTTP協(xié)議的優(yōu)化。

首先要討論的就是對登陸性能的優(yōu)化勋颖。在前面我們已經(jīng)介紹過嗦嗡,在一個(gè)基于HTTP的REST服務(wù)中,每次都將用戶的用戶名和密碼發(fā)送到服務(wù)端并由服務(wù)端驗(yàn)證這些信息是否合法是一個(gè)非常消耗資源的流程饭玲。因此我們常常需要在登陸服務(wù)中使用一個(gè)緩存侥祭,或者是使用第三方單點(diǎn)登陸(SSO)類庫。

除此之外茄厘,軟件開發(fā)人員還可以通過為同一個(gè)資源提供不同的表現(xiàn)形式來減少在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)量矮冬,從而提高REST服務(wù)的性能。

而在集群內(nèi)部服務(wù)之間次哈,我們則可以不再使用JSON胎署,XML等這種用戶可以讀懂的負(fù)載格式,而是使用二進(jìn)制格式窑滞。這樣可以大大地減少內(nèi)部網(wǎng)絡(luò)所需要傳輸?shù)臄?shù)據(jù)量琼牧。這在內(nèi)部網(wǎng)絡(luò)交換數(shù)據(jù)頻繁并且所傳輸?shù)臄?shù)據(jù)量巨大時(shí)較為有效。

接下來就是REST系統(tǒng)的橫向擴(kuò)展葛假。在REST的無狀態(tài)約束的支持下障陶,我們可以很容易地向REST系統(tǒng)中添加一個(gè)新的服務(wù)器。

除了這些和REST架構(gòu)本身相關(guān)的性能提升之外聊训,我們還可以在如何更高效地使用HTTP協(xié)議上努力抱究。一個(gè)最常見的方法就是使用條件請求(Conditional Request)。簡單地說带斑,我們可以使用如下的HTTP頭來有條件地存取資源:

1鼓寺、ETag:一個(gè)對用戶不透明的用來標(biāo)示資源實(shí)例的哈希值
2、Data-Modified:資源被更改的時(shí)間
3勋磕、If-Modified-Since:根據(jù)資源的更改時(shí)間有條件地Get資源妈候。這將允許客戶端對4、未更改的資源使用本地緩存挂滓。
5苦银、If-None-Match:根據(jù)ETag的值有條件地Get資源。
6赶站、If-Unmodified-Since:根據(jù)資源的更改時(shí)間有條件地Put或Delete資源幔虏。
7、If-Match:根據(jù)ETag的值有條件地Put或Delete資源贝椿。
  當(dāng)然想括,這里所提到的一系列性能優(yōu)化方案實(shí)際上僅僅是比較常見的,與基于HTTP的REST服務(wù)關(guān)聯(lián)較大的方案烙博。只是顧慮到過多地陳述和REST關(guān)聯(lián)不大的話題一方面顯得比較沒有效率瑟蜈,另一方面也是因?yàn)橥ㄟ^寫另一個(gè)系列博客可以將問題陳述得更加清楚烟逊,因此在這里我們將不再繼續(xù)討論性能相關(guān)的話題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铺根,一起剝皮案震驚了整個(gè)濱河市宪躯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌位迂,老刑警劉巖眷唉,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異囤官,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛤虐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門党饮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驳庭,你說我怎么就攤上這事刑顺。” “怎么了饲常?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵蹲堂,是天一觀的道長。 經(jīng)常有香客問我贝淤,道長柒竞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任播聪,我火速辦了婚禮朽基,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘离陶。我一直安慰自己稼虎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布招刨。 她就那樣靜靜地躺著霎俩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沉眶。 梳的紋絲不亂的頭發(fā)上打却,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音沦寂,去河邊找鬼学密。 笑死,一個(gè)胖子當(dāng)著我的面吹牛传藏,可吹牛的內(nèi)容都是我干的腻暮。 我是一名探鬼主播彤守,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哭靖!你這毒婦竟也來了具垫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤试幽,失蹤者是張志新(化名)和其女友劉穎筝蚕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺坞,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡起宽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了济榨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坯沪。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖擒滑,靈堂內(nèi)的尸體忽然破棺而出腐晾,到底是詐尸還是另有隱情,我是刑警寧澤丐一,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布藻糖,位于F島的核電站,受9級特大地震影響库车,放射性物質(zhì)發(fā)生泄漏巨柒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一柠衍、第九天 我趴在偏房一處隱蔽的房頂上張望潘拱。 院中可真熱鬧,春花似錦拧略、人聲如沸芦岂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禽最。三九已至,卻和暖如春袱饭,著一層夾襖步出監(jiān)牢的瞬間川无,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工虑乖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懦趋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓疹味,卻偏偏與公主長得像仅叫,于是被迫代替她去往敵國和親帜篇。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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

  • 一說到REST诫咱,我想大家的第一反應(yīng)就是“啊笙隙,就是那種前后臺通信方式】茬裕”但是在要求詳細(xì)講述它所提出的各個(gè)約束竟痰,以及如...
    時(shí)待吾閱讀 3,415評論 0 19
  • REST是Roy Fielding博士在他的畢業(yè)論文中首先提出來的。Roy Fielding何許人也掏呼?他是HTTP...
    歌灣汐云閱讀 2,116評論 1 18
  • API定義規(guī)范 本規(guī)范設(shè)計(jì)基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高坏快,建議使用雙通...
    有涯逐無涯閱讀 2,521評論 0 6
  • 轉(zhuǎn)自:http://www.runoob.com/w3cnote/restful-architecture.htm...
    艾爾溫閱讀 1,000評論 0 51
  • 好想去看電影,越虐越好憎夷,然后痛痛快快哭一下假消。 小時(shí)候惹媽媽生氣了,我會突然想哭岭接,然后哭著哭著一直停不下來,哭到最后...
    早已氣定神閑閱讀 180評論 0 1