RESTful規(guī)范

協(xié)議

  • API與用戶通信協(xié)議使用HTTPS

域名

  • 盡量將API放入專有域名下

版本號(hào)

  • 將版本號(hào)放入U(xiǎn)RL中

路徑

  • 在RESTful架構(gòu)中,每個(gè)網(wǎng)址代表一種資源(resource),所以網(wǎng)址中不能有動(dòng)詞,只能有名詞,而且所用的名詞往往與數(shù)據(jù)庫(kù)的表格名對(duì)應(yīng)。一般來(lái)說(shuō),數(shù)據(jù)庫(kù)中的表都是同種記錄的"集合"(collection),所以API中的名詞也應(yīng)該使用復(fù)數(shù)。

  • 舉例來(lái)說(shuō),有一個(gè)API提供動(dòng)物園(zoo)的信息,還包括各種動(dòng)物和雇員的信息,則它的路徑應(yīng)該設(shè)計(jì)成下面這樣。

https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees

HTTP動(dòng)詞

  • GET(SELECT):從服務(wù)器取出資源(一項(xiàng)或多項(xiàng))。
  • POST(CREATE):在服務(wù)器新建一個(gè)資源。
  • PUT(UPDATE):在服務(wù)器更新資源(客戶端提供改變后的完整資源)。
  • PATCH(UPDATE):在服務(wù)器更新資源(客戶端提供改變的屬性)。
  • DELETE(DELETE):從服務(wù)器刪除資源。
  • HEAD:獲取資源的元數(shù)據(jù)。
  • OPTIONS:獲取信息,關(guān)于資源的哪些屬性是客戶端可以改變的。

過(guò)濾信息

  • 如果記錄數(shù)量很多,服務(wù)器不可能都將它們返回給用戶。API應(yīng)該提供參數(shù),過(guò)濾返回結(jié)果。
    下面是一些常見的參數(shù)。

?limit=10:指定返回記錄的數(shù)量
?offset=10:指定返回記錄的開始位置。
?page=2&per_page=100:指定第幾頁(yè),以及每頁(yè)的記錄數(shù)。
?sortby=name&order=asc:指定返回結(jié)果按照哪個(gè)屬性排序,以及排序順序。
?animal_type_id=1:指定篩選條件

狀態(tài)碼

200系列

  • 200 OK 請(qǐng)求成功(其后是對(duì)GET和POST請(qǐng)求的應(yīng)答文檔。)
  • 201 Created 請(qǐng)求被創(chuàng)建完成,同時(shí)新的資源被創(chuàng)建。
  • 202 Accepted 供處理的請(qǐng)求已被接受,但是處理未完成。

300系列

  • 300 Multiple Choices 多重選擇。鏈接列表。用戶可以選擇某鏈接到達(dá)目的地。最多允許五個(gè)地址。
  • 301 Moved Permanently 所請(qǐng)求的頁(yè)面已經(jīng)轉(zhuǎn)移至新的url。
  • 302 Found 所請(qǐng)求的頁(yè)面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url。

400系列

  • 400 Bad Request 服務(wù)器未能理解請(qǐng)求。
  • 401 Unauthorized 被請(qǐng)求的頁(yè)面需要用戶名和密碼。
  • 402 Payment Required 此代碼尚無(wú)法使用。
  • 403 Forbidden 對(duì)被請(qǐng)求頁(yè)面的訪問被禁止。
  • 404 Not Found 服務(wù)器無(wú)法找到被請(qǐng)求的頁(yè)面。

500系列

  • 500 Internal Server Error 請(qǐng)求未完成。服務(wù)器遇到不可預(yù)知的情況。
  • 501 Not Implemented 請(qǐng)求未完成。服務(wù)器不支持所請(qǐng)求的功能。
  • 502 Bad Gateway 請(qǐng)求未完成。服務(wù)器從上游服務(wù)器收到一個(gè)無(wú)效的響應(yīng)。
  • 503 Service Unavailable 請(qǐng)求未完成。服務(wù)器臨時(shí)過(guò)載或當(dāng)機(jī)。
  • 504 Gateway Timeout 網(wǎng)關(guān)超時(shí)。

返回錯(cuò)誤

  • 如果狀態(tài)碼是4xx,就應(yīng)該向用戶返回出錯(cuò)信息。一般來(lái)說(shuō),返回的信息中將error作為鍵名,出錯(cuò)信息作為鍵值即可。

{
error: "Invalid API key"
}

返回結(jié)果

針對(duì)不同操作,服務(wù)器向用戶返回的結(jié)果應(yīng)該符合以下規(guī)范。

  • GET /collection:返回資源對(duì)象的列表(數(shù)組)
  • GET /collection/resource:返回單個(gè)資源對(duì)象
  • POST /collection:返回新生成的資源對(duì)象
  • PUT /collection/resource:返回完整的資源對(duì)象
  • PATCH /collection/resource:返回完整的資源對(duì)象
  • DELETE /collection/resource:返回一個(gè)空文檔
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容