REST 接口學習

1、REST 接口web

在請求層面,REST 規範能夠簡單粗暴抽象成如下兩個規則:api

請求 API 的 URL 表示用來定位資源;
請求的 METHOD 表示對這個描述資源進行的操做;數組

知乎大神Ivony有句話說的好:安全

URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操做。服務器

在設計web接口的時候,REST主要是用於定義接口名,接口名通常是用名詞寫,不用動詞,那怎麼表達「獲取」或者「刪除」或者「更新」這樣的操做呢——用請求類型來區分。架構

好比,咱們有一個friends接口,對於「朋友」咱們有增刪改查四種操做,怎麼定義REST接口?異步

增長一個朋友,uri: generalcode.cn/v1/friends 接口類型:POST佈局

刪除一個朋友,uri: generalcode.cn/va/friends 接口類型:DELETEpost

修改一個朋友,uri: generalcode.cn/va/friends 接口類型:PUTurl

查找朋友,uri: generalcode.cn/va/friends 接口類型:GET

注意:這就是REST接口,用url定位資源,用HTTP描述操做

上面咱們定義的四個接口就是符合REST協議的,請注意,這幾個接口都沒有動詞,只有名詞friends,都是經過Http請求的接口類型來判斷是什麼業務操做。

2、API的請求方法

在不少系統中,幾乎只用 GET 和 POST 方法來完成了全部的接口操做;這個行爲相似於全用 DIV 來佈局。實際上,咱們不僅有GET 和 POST 可用,在 REST 架構中,有如下幾個重要的請求方法:GET,POST,PUT,PATCH,DELETE。這幾個方法均可以與對數據的 CRUD 操做對應起來。

CRUD 是指在作計算處理時的增長(Create)、讀取查詢(Retrieve)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。即增刪改查

【Read】,資源的讀取,用 GET 請求;好比:
GET /api/users ( 表示讀取用戶列表)

GET 應當實現爲一個安全方法。用於獲取數據而不該該產生反作用。

【Created】,資源的建立,用 POST 方法;POST 是一個非冪等的方法,屢次調用會形成不一樣效果;
【Update】,資源的更新。用於更新的 HTTP 方法有兩個,PUT 和 PATCH。

他們都應當被實現爲冪等方法,即屢次一樣的更新請求應當對服務器產生一樣的反作用。

PUT 和 PATCH 有各自不一樣的使用場景:

PUT 用於更新資源的所有信息,在請求的 body 中須要傳入修改後的所有資源主體;

而 PATCH 用於局部更新,在 body 中只須要傳入須要改動的資源字段。

【Delete】,資源的刪除,相應的請求 HTTP 方法就是 DELETE。這個也應當被實現爲一個冪等的方法。

3、狀態碼

服務器向用戶返回的狀態碼和提示信息,常見的有如下一些(方括號中是該狀態碼對應的HTTP動詞)。

  • 200 OK - [GET]:服務器成功返回用戶請求的數據,該操做是冪等的(Idempotent)。
  • 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
  • 202 Accepted - [*]:表示一個請求已經進入後臺排隊(異步任務)
  • 204 NO CONTENT - [DELETE]:用戶刪除數據成功。
  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操做,該操做是冪等的。
  • 401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
  • 403 Forbidden - [*] 表示用戶獲得受權(與401錯誤相對),可是訪問是被禁止的。
  • 404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操做,該操做是冪等的。
  • 406 Not Acceptable - [GET]:用戶請求的格式不可得(好比用戶請求JSON格式,可是隻有XML格式)。
  • 410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再獲得的。
  • 422 Unprocesable entity - [POST/PUT/PATCH] 當建立一個對象時,發生一個驗證錯誤。
  • 500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將沒法判斷髮出的請求是否成功。

4、返回結果

針對不一樣操做,服務器向用戶返回的結果應該符合如下規範。

  • GET /collection:返回資源對象的列表(數組)
  • GET /collection/resource:返回單個資源對象
  • POST /collection:返回新生成的資源對象
  • PUT /collection/resource:返回完整的資源對象
  • PATCH /collection/resource:返回完整的資源對象
  • DELETE /collection/resource:返回一個空文檔
相關文章
相關標籤/搜索