Restful簡單理解

不·一發表於2019-02-15

Resource Representational State Transfer   直接翻譯:表現層狀態轉移

簡單概括:

URL:定位資源

HTTP請求方式:(GET POST DELETE PUT)描述操作

請求狀態碼:描述結果


看url就知道要什麼

看http method就知道幹什麼

看http status code就知道結果如何


簡介版

REST描述的是在網路中client和server的一種互動模式.

在Server提供的RESTful API中,url只使用名詞來指定資源

資源是REST架構或者整個網路處理的核心.

通過HTTP請求方式來實現資源的狀態扭轉.

Server和Client之間傳遞某資源的一種方式,用JSON或者其他方式

用HTTP Status Code傳遞Server的狀態資訊.最常見的200表示成功,500表示Server內部錯誤

Web端和Server只使用上述定義的API來傳遞資料和改變資料狀態。格式一般是JSON。iOS和Android同理可得。由此可見,Web,iOS,Android和第三方開發者變為平等的角色通過一套API來共同消費Server提供的服務。

Transfer:通俗來講就是:資源在網路中以某種表現形式進行狀態轉移。分解開來:

Resource:資源,即資料(前面說過網路的核心)。比如 newsfeed,friends等;

Representational:某種表現形式,比如用JSON,XML,JPEG等;

State Transfer:狀態變化。通過HTTP動詞實現。

image.jpeg

略詳細版

參考

  1. 協議
    API與使用者的通訊協議,總是使用HTTPs協議

  2. 域名 應該儘量將API部署在專用域名之下 https://api.example.com 如果確定API很簡單,不會有進一步擴充套件,可以考慮放在主域名下
    https://example.org/api/

  3. 版本

    應該將API的版本號放入URL
    https://api.example.com/v1/ 另一種做法是:將版本號放在HTTP頭資訊中,

  4. 路徑
    https://api.example.com/v1/zoos https://api.example.com/v1/animals https://api.example.com/v1/employees

  5. 動詞 對於資源的具體操作型別,由HTTP動詞表示 GET(SELECT):從伺服器取出資源(一項或多項)。 POST(CREATE):在伺服器新建一個資源。 PUT(UPDATE):在伺服器更新資源(客戶端提供改變後的完整資源)。 PATCH(UPDATE):在伺服器更新資源(客戶端提供改變的屬性)。 DELETE(DELETE):從伺服器刪除資源。 還有兩個不常用的HTTP動詞
    GET /zoos:列出所有動物園 POST /zoos:新建一個動物園 GET /zoos/ID:獲取某個指定動物園的資訊 PUT /zoos/ID:更新某個指定動物園的資訊(提供該動物園的全部資訊) PATCH /zoos/ID:更新某個指定動物園的資訊(提供該動物園的部分資訊) DELETE /zoos/ID:刪除某個動物園 GET /zoos/ID/animals:列出某個指定動物園的所有動物 DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物

  6. 過濾資訊(Filtering) 如果記錄數量很多,伺服器不可能都將它們返回給使用者,API應該提供引數,過濾返回結果 ?limit=10:指定返回記錄的數量 ?offset=10:指定返回記錄的開始位置。 ?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。 ?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。 ?animal_type_id=1:指定篩選條件

  7. 狀態碼(Status Code)

      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 - [*]:伺服器發生錯誤,使用者將無法判斷髮出的請求是否成功。		
複製程式碼

相關文章