使用RESTful操作資源
【GET】 /users # 查詢用戶信息列表
【GET】 /users/1001 # 查看某個用戶信息
【POST】 /users # 新建用戶信息
【PUT】 /users/1001 # 更新用戶信息(全部字段)
【PATCH】 /users/1001 # 更新用戶信息(部分字段)
【DELETE】 /users/1001 # 刪除用戶信息
之前的操作是沒有問題的,大神認(rèn)為是有問題的,有什么問題呢?你每次請求的接口或者地址,都在做描述,例如查詢的時候用了queryUser,新增的時候用了saveUser 涩澡,修改的時候用了updateUser,其實(shí)完全沒有這個必要,我使用了get請求,就是查詢.使用post請求,就是新增的請求,PUT就是修改,delete就是刪除扼鞋,我的意圖很明顯,完全沒有必要做描述,這就是為什么有了restful.
API設(shè)計風(fēng)格基本規(guī)則
1.使用名詞而不是動詞
不要使用:
/getAllUsers
/createNewUser
/deleteAllUser
2.Get方法和查詢參數(shù)不應(yīng)該涉及狀態(tài)改變
使用PUT, POST 和DELETE 方法 而不是 GET 方法來改變狀態(tài)欺抗,不要使用GET 進(jìn)行狀態(tài)改變:
3.使用復(fù)數(shù)名詞
不要混淆名詞單數(shù)和復(fù)數(shù)宪塔,為了保持簡單,只對所有資源使用復(fù)數(shù)埂蕊。
/cars 而不是 /car
/users 而不是 /user
/products 而不是 /product
/settings 而部署 /setting
4. 使用子資源表達(dá)關(guān)系
如果一個資源與另外一個資源有關(guān)系揪利,使用子資源:
GET /cars/711/drivers/ 返回 car 711的所有司機(jī)
GET /cars/711/drivers/4 返回 car 711的4號司機(jī)
5.使用Http頭聲明序列化格式
在客戶端和服務(wù)端歉提,雙方都要知道通訊的格式笛坦,格式在HTTP-Header中指定
Content-Type 定義請求格式
Accept 定義系列可接受的響應(yīng)格式
6.為集合提供過濾 排序 選擇和分頁等功能
Filtering過濾:
使用唯一的查詢參數(shù)進(jìn)行過濾:
GET /cars?color=red 返回紅色的cars
GET /cars?seats<=2 返回小于兩座位的cars集合
Sorting排序:
允許針對多個字段排序
GET /cars?sort=-manufactorer,+model
這是返回根據(jù)生產(chǎn)者降序和模型升序排列的car集合
Field selection
移動端能夠顯示其中一些字段,它們其實(shí)不需要一個資源的所有字段苔巨,給API消費(fèi)者一個選擇字段的能力版扩,這會降低網(wǎng)絡(luò)流量,提高API可用性恋拷。
GET /cars?fields=manufacturer,model,id,color
Paging分頁
使用 limit 和offset.實(shí)現(xiàn)分頁资厉,缺省limit=20 和offset=0;
GET /cars?offset=10&limit=5
為了將總數(shù)發(fā)給客戶端蔬顾,使用訂制的HTTP頭: X-Total-Count.
鏈接到下一頁或上一頁可以在HTTP頭的link規(guī)定,遵循Link規(guī)定:
Link: <https://blog.mwaysolutions.com/sample/api/v1/cars?offset=15&limit=5>; rel="next",
<https://blog.mwaysolutions.com/sample/api/v1/cars?offset=50&limit=3>; rel="last",
<https://blog.mwaysolutions.com/sample/api/v1/cars?offset=0&limit=5>; rel="first",
<https://blog.mwaysolutions.com/sample/api/v1/cars?offset=5&limit=5>; rel="prev",
7.版本化你的API
使得API版本變得強(qiáng)制性湘捎,不要發(fā)布無版本的API诀豁,使用簡單數(shù)字,避免小數(shù)點(diǎn)如2.5.
一般在Url后面使用?v
/blog/api/v1
8. 使用Http狀態(tài)碼處理錯誤
如果你的API沒有錯誤處理是很難的窥妇,只是返回500和出錯堆棧不一定有用
Http狀態(tài)碼提供70個出錯舷胜,我們只要使用10個左右:
200 – OK – 一切正常
201 – OK – 新的資源已經(jīng)成功創(chuàng)建
204 – OK – 資源已經(jīng)成功擅長
304 – Not Modified – 客戶端使用緩存數(shù)據(jù)
400 – Bad Request – 請求無效,需要附加細(xì)節(jié)解釋如 "JSON無效"
401 – Unauthorized – 請求需要用戶驗(yàn)證
403 – Forbidden – 服務(wù)器已經(jīng)理解了請求活翩,但是拒絕服務(wù)或這種請求的訪問是不允許的烹骨。
404 – Not found – 沒有發(fā)現(xiàn)該資源
422 – Unprocessable Entity – 只有服務(wù)器不能處理實(shí)體時使用,比如圖像不能被格式化材泄,或者重要字段丟失沮焕。
500 – Internal Server Error – API開發(fā)者應(yīng)該避免這種錯誤。
使用詳細(xì)的錯誤包裝錯誤:
{undefined
"errors": [
{undefined
"userMessage": "Sorry, the requested resource does not exist",
"internalMessage": "No car found in the database",
"code": 34,
"more info": "http://dev.mwaysolutions.com/blog/api/v1/errors/12345"
}
]
}
9.允許覆蓋http方法
一些代理只支持POST 和 GET方法拉宗, 為了使用這些有限方法支持RESTful API峦树,需要一種辦法覆蓋http原來的方法辣辫。