RESTful快速入門

一、概述

Representational State Transfer (REST) is a software architecture style consisting of guidelines and best practices for creating scalable web services. REST is a coordinated set of constraints applied to the design of components in a distributed hypermedia system that can lead to a more performant and maintainable architecture.

REST是一種軟件架構風格,是創建可擴展web服務的指南和最佳實踐。在分布式系統中提出一系列約束和規范,以創建高性能和可維護的架構。如果一個架構符合REST原則,就可以稱它為RESTful架構。

二、概念

1、資源

所謂資源,就是網絡上的一個實體,可以是一段文本、一張圖片、一種服務等具體的存在。用URI(統一資源標識符)來指向資源,每種資源對應一個特定的URI。要想獲取資源,訪問該資源的URI即可。

2、表現層

網絡實體(資源)可以有多種表現形式,其具體表現出來的形式,稱為它的表現層。比如文本可以用txt格式表現,也可以使用HTML格式、XML格式、JSON格式表現。圖片可以用JPG格式表現,也可以使用PNG格式表現。URI只代表資源的位置,它的表現形式應該在請求的頭信息中指定。

3、狀態轉換

當客戶端與服務器之間進行互動時,會涉及到數據和狀態的變化。由于HTTP協議是一個無狀態協議,客戶端需要通過HTTP動作使服務器端發生狀態轉化。

三、約束

要想構建RESTful的架構,有以下幾個約束:

  1. 使用客戶端/服務器模型。
  2. 使用層次化的系統。
  3. 無狀態。客戶端在每次發送請求時都需要提供足夠的信息。
  4. 可緩存。能夠緩存請求,以盡量減少客戶端和服務器之間的信息傳輸。
  5. 統一的接口。使用統一的接口來完成用戶與服務之間以及各子系統之間的交互。

關于接口,有以下幾個原則:

  1. 每個資源都擁有一個資源標識。
  2. 消息的自描述性。所傳遞的消息需要能夠提供自身的足夠信息。
  3. 資源的自描述性。所返回的資源需要能夠描述自身,并提供足夠的用于操作該資源的信息。
  4. HATEOAS。只可以通過服務端所返回各結果中所包含的信息來得到下一步操作所需要的信息。

四、設計原則

1、資源識別

REST中的API是以資源為中心,而不是以執行的動作為中心。通常所執行動作的對象被看成是系統中的資源。如果一個動作沒有明確的操作對象,就需要考慮該動作產生了哪些影響或哪些狀態發生了改變,發生變化的實體就是資源。

在抽象出資源的過程中,按照自頂向下的方式,首先識別出主要資源,然后識別主要資源的子資源,依次迭代。

判斷一個資源定義是否合理,有以下幾種方法:

  • 對資源的CRUD是否有意義。
  • 是否需要除CRUD之外的操作。
  • 資源是否被整體使用。

2、資源的URL

當標識出一個資源之后,需要為資源分配對應的URL。一個URL主要由幾部分組成:

  • 協議,即HTTP或HTTPS。
  • 域名,盡量將API部署在專有域名下。如果API很簡單,不會進一步擴展,也可以放在主域名下。
  • 相對路徑,每個網址代表一種資源,所以只使用名詞,而不使用動詞。所用的名詞通常與數據庫對應,并且數據庫通常都是記錄的集合,所以API中的名詞應該使用復數形式。如果API版本更迭,應該將API的版本號也放到URL中。
  • 請求參數,即由“?”開始,并由“&”連接的多個鍵值對組成的字符串。

對于返回的記錄數量很多的場合,API應該提供參數,過濾返回結果:

  • ?Limit=10,指定返回記錄的數量。
  • ?offset=10,指定返回記錄的開始位置。
  • ?page=2&per_page=100,指定第幾頁,以及每頁的記錄數。
  • ?sortby=name&order=asc,指定返回結果按照哪個屬性排序,以及排序的升降順序。
  • ?type_id=1,指定過濾條件。

3、使用合適的動詞

對資源的具體操作類型,由HTTP動詞表示。

  • GET(SELECT),從服務器獲取資源。
  • POST(CREATE),在服務器創建一個資源。
  • PUT(UPDATE),更新服務器上的資源(客戶端提供更新后的完整資源)。
  • PATCH(UPDATE),更新服務器上的資源(客戶端提供更新的屬性)。
  • DELETE(DELETE),刪除服務器上的資源。
  • HEAD,獲取資源的元數據。
  • OPTIONS,獲取關于資源的哪些屬性是可以改變的信息。

()內表示與動詞等價的數據庫操作。

4、使用標準的狀態碼

服務器向客戶端返回的狀態碼和提示信息,具體可參見HTTP響應碼。如果狀態碼是4xx,就應該向客戶端返回出錯信息。通常返回的信息中將error作為鍵名,出錯信息作為鍵值。

5、選擇適當的表示結構

服務器返回的數據格式,應該盡量使用JSON,避免使用XML。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,828評論 18 139
  • 一說到REST,我想大家的第一反應就是“啊,就是那種前后臺通信方式?!钡窃谝笤敿氈v述它所提出的各個約束,以及如...
    時待吾閱讀 3,446評論 0 19
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,760評論 25 708
  • 歡呼起來吧 愚笨的生靈 蝙蝠掠過天空 只留下一片沉寂 短促尖細的叫聲 摻雜著稀薄的空氣和風 把健康與寧靜輕輕喚醒 ...
    絳洞花王閱讀 242評論 9 5
  • 愛情有著各種各樣的偽裝,有如波濤洶涌的,也有細水長流的,有天崩地裂的,也有恬靜安寧的,可是無論我們看過多少種愛情的...
    荏苒_追憶閱讀 205評論 0 0