什麼是RESTful,REST api設計時應該遵守什麼樣的規則?

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第22天,點選檢視活動詳情

作為一名開發者,相信在看的各位都知道“REST”這個術語,但是 REST 是什麼意思,什麼是 RESTful 服務?今天筆者帶大家好好了解一下 RESTful。

什麼是REST?

  • 英文全稱:Representational State Transfer
  • 中文意思:表現層狀態轉換

REST是客戶端應用程式(也就是前端),使用 HTTP 協議與 Web 服務(後端)互動以建立、刪除、更新和刪除資料(CRUD 操作)的過程。

REST 是由電腦科學家 Roy Fielding 定義的,他在 2000 年的博士論文中介紹了 REST 原則。

符合 REST 的系統,通常稱為 RESTful 系統,其特點是它們是無狀態的,並且將客戶端和伺服器的關注點分開,即前後端分離

前後端分離

在沒有前後端分離的時候,開發人員是非常痛苦,這個好比一家公司只有老闆一人一樣,財務、業務、產品、技術樣樣都要關心,而且不管前端還是後端,稍微改點東西就會互相影響,測試、維護成本極大。

在 REST 架構風格中,客戶端的實現和伺服器的實現可以獨立完成,彼此不知道對方。這意味著客戶端的程式碼可以隨時更改而不影響伺服器的執行,而伺服器端的程式碼可以更改而不影響客戶端的執行。

只要雙方都知道要傳送給對方的訊息格式,它們就可以保持模組化分離,將使用者介面關注點與資料儲存關注點分開,這樣可以極大提高跨平臺介面的靈活性,並通過簡化伺服器元件來提高可擴充套件性。

這就是前後端分離的優勢所在。

如何使用REST API?

HTTP 動詞

REST API 通過各種 HTTP 請求方法,使前端與伺服器的通訊過程更容易,最常用的方法是: - GET : 用於讀取伺服器上的資料。 - POST : 用於建立資料。 - PATCH/PUT:用於更新資料。 - DELETE : 用於刪除資料。

路徑

請求必須包含指向應該對其執行操作的資源的路徑。

在RESTful風格中,應該遵守以下原則:

1. URL 應該包含名詞,而不是動詞

比如獲取使用者列表,正確的是:

https://www.wljslmz.cn/users

錯誤的是:

https://www.wljslmz.cn/getUsers

2、URL使用複數,而不是單數

還是上面的例子,獲取使用者列表,正確的是:

https://www.wljslmz.cn/users

錯誤的是:

https://www.wljslmz.cn/user

3、URL中最好包含版本號,假如沒有,那麼應該認為是最新版,而不是穩定版

比如:

https://www.wljslmz.cn/v1/users

4、URL中使用巢狀來顯示關係

比如獲取id為1的使用者資訊:

https://www.wljslmz.cn/v1/users/1

5、URL分頁

分頁可以輕鬆處理大量請求結果,例如,Web 服務包含數百或數千個頁面,當請求顯示其所有頁面時,將獲得相同數量的結果作為迴應。

比如分頁顯示使用者資訊列表:

https://www.wljslmz.cn/v1/users/page=1?limit=10

6、使用連字元增加可讀性

最好用連字元-,而不是_或者駝峰,在所有 RESTful API 中,連字元等同於空格。

比如使用者id為1的使用者開始工作:

https://www.wljslmz.cn/v1/users/1/start-work

7、URL最好不用大寫

使用大寫字母定義資源會使 URL 鍵敏感,在特定情況下可能會導致混淆,使用小寫字母將確保命令的正確性,即使 URL 是用大寫字母輸入的,但反之則不然:

比如上面第6個url最好不要寫成:

https://www.wljslmz.cn/v1/users/1/Start-Sork

你寫成這樣:

https://www.wljslmz.cn/v1/users/1/start-work

即使你在瀏覽器中輸入:https://www.wljslmz.cn/v1/users/1/Start-Sork,也會正確匹配到https://www.wljslmz.cn/v1/users/1/start-work

但是假如api是https://www.wljslmz.cn/v1/users/1/start-work,那麼你在瀏覽器中必須是大寫形式。

常見的 HTTP 狀態碼

  • 1xxs:資訊響應,伺服器仍在處理請求。
  • 2xxs:成功,請求成功完成
  • 3xxs:重定向,收到的請求重定向到另一個地址。
  • 4xxs:客戶端錯誤,例如,404 - 找不到頁面。
  • 5xxs:伺服器錯誤,請求失敗。

一些常見的 HTTP 狀態程式碼包括:

  • 200:成功的請求,通常是 GET
  • 201:建立後請求成功,通常是 POST
  • 204:請求成功,沒有返回內容,通常是 PUT 或 PATCH
  • 301:永久重定向到另一個端點
  • 400:錯誤請求(客戶端應修改請求)
  • 401:未經授權,憑據無法識別
  • 403:禁止,憑據接受但沒有許可權
  • 404:未找到,資源不存在
  • 410:消失了,資源以前存在但現在不存在
  • 429:請求過多,用於速率限制,應包含重試標頭
  • 500:伺服器錯誤,一般性,值得檢視其他 500 級錯誤
  • 503:服務不可用,另一個重試標頭有用

總結

REST是一種軟體架構風格,用於 Web 架構的設計,任何遵循 REST 設計原則的 API都被稱為 RESTful,在開發初期,開發者需要花費大量的時間去設計介面,這些介面一般都是遵循RESTful風格,力爭介面簡單、易懂。