10個有關RESTful API良好設計的最佳實踐

2022-01-17 16:25:37 字數 3241 閱讀 9116

web api已經在最近幾年變成重要的話題,乙個乾淨的api設計對於後端系統是非常重要的。

通常我們為web api使用restful設計,rest概念分離了api結構和邏輯資源,通過http方法get, delete, post 和 put來操作資源。

下面是進行restful web api十個最佳實踐,能為你提供乙個良好的api設計風格。

resource

資源get

讀post

建立put

修改patch

部分修改

delete

/cars

返回 cars集合

建立新的資源

批量更新cars

批量更新cars部分內容

刪除所有cars

/cars/711

返回特定的car

該方法不允許(405)

更新乙個指定的資源

更新指定資源的部分內容

擅長指定資源

不要使用:

/getallcars

/createnewcar

/deleteallredcars

使用put, postdelete方法 而不是get方法來改變狀態,不要使用get進行狀態改變:

get /users/711?activate 

get /users/711/activate

不要混淆名詞單數和複數,為了保持簡單,只對所有資源使用複數。

/cars 而不是 /car

/users 而不是 /user

/products 而不是 /product

/settings 而部署 /setting

如果乙個資源與另外乙個資源有關係,使用子資源:

get /cars/711/drivers/ 返回 car 711的所有司機

get /cars/711/drivers/4 返回 car 711的4號司機

在客戶端和服務端,雙方都要知道通訊的格式,格式在http-header中指定

content-type 定義請求格式

accept 定義系列可接受的響應格式

hypermediaastheengineofapplicationstate 超**作為應用狀態的引擎,超文字鏈結可以建立更好的文字瀏覽:

"id": 711,

"manufacturer": "bmw",

"model": "x5",

"seats": 5,

"drivers": [

"id": "23",

"name": "stefan jauker",

"links": [

"rel": "self",

"href": "/api/v1/drivers/23"

注意href指向下乙個url

filtering過濾:

使用唯一的查詢引數進行過濾:

get /cars?color=red 返回紅色的cars

get /cars?seats<=2 返回小於兩座位的cars集合

sorting排序:

允許針對多個字段排序

get /cars?sort=-manufactorer,+model

這是返回根據生產者降序和模型公升序排列的car集合

field selection

移動端能夠顯示其中一些字段,它們其實不需要乙個資源的所有字段,給api消費者乙個選擇欄位的能力,這會降低網路流量,提高api可用性。

get /cars?fields=manufacturer,model,id,color

paging分頁

使用 limit 和offset.實現分頁,預設limit=20 和offset=0;

get /cars?offset=10&limit=5

為了將總數發給客戶端,使用訂製的http頭: x-total-count.

link: ; rel="next",

; rel="last",

; rel="first",

; rel="prev",

使得api版本變得強制性,不要發布無版本的api,使用簡單數字,避免小數點如2.5.

一般在url後面使用?v

/blog/api/v1

如果你的api沒有錯誤處理是很難的,只是返回500和出錯堆疊不一定有用

http狀態碼提供70個出錯,我們只要使用10個左右:

200 – ok – 一切正常

201 – ok – 新的資源已經成功建立

204 – ok – 資源已經成功擅長

304 – not modified – 客戶端使用快取資料

400 – bad request – 請求無效,需要附加細節解釋如 "json無效"

401 – unauthorized – 請求需要使用者驗證

403 – forbidden – 伺服器已經理解了請求,但是拒絕服務或這種請求的訪問是不允許的。

404 – not found – 沒有發現該資源

422 – unprocessable entity – 只有伺服器不能處理實體時使用,比如影象不能被格式化,或者重要字段丟失。

500 – internal server error – api開發者應該避免這種錯誤。

使用詳細的錯誤包裝錯誤:

"errors": [

"usermessage": "sorry, the requested resource does not exist",

"internalmessage": "no car found in the database",

"code": 34,

"more info": ""

一些**只支援postget方法,為了使用這些有限方法支援restful api,需要一種辦法覆蓋http原來的方法。

使用訂製的http頭x-http-method-override來覆蓋post 方法.

**:

用python寫乙個restful API

coding utf 8 package.module python實現的圖書的乙個restful api.restful api 一般模式 get select 從伺服器取出資源 一項或多項 post create 在伺服器新建乙個資源。put update 在伺服器更新資源 客戶端提供改變後的完...

10個有關於Google的有意思的事情

我想大部分人都已經知道 google 最開始是2個史丹福大學的 ph.d.學生 larry page 和 sergeybrin 的研究課題。但你可否知道 google 最初的儲存裝置其實只是乙個樂高玩具積木所拼搭起來的機器?或者 google正式成立之前,就已經有人簽了一張 10萬美金的支票送給這兩...

乙個Restful Api的訪問控制方法

分類 演算法研究 最近在做的兩個專案,都需要使用restful api,介面的安全性和訪問控制便成為乙個問題,看了一下別家的api訪問控制辦法。1 api請求 url 的後面加上乙個accesstoken 2 http頭裡面加乙個欄位accesstoken 1 為每個應用頒發乙個賬號 user 和密...