前言:因爲有點危機感,所以時常看看招聘網站的招聘信息,看看自己面對那些崗位要求,有哪些不滿足。最近瀏覽的時候,經常看到崗位要求上有一個熟悉Restful。所以最近在做項目時,就邊學邊做,用上了這個設計風格。
Restful
簡單的說:符合REST的約束條件和原則,就稱它爲RESTful架構。
REST:Representational State Transfer的縮寫,翻譯:“具象狀態傳輸”。一般解釋爲 “表現層狀態轉換” 。
REST是設計風格而不是標準。是指客戶端和服務器的交互形式。需要關注的重點是如何設計REST風格的網絡接口。
REST本身並沒有創造新的技術、組件或服務,而隱藏在RESTful背後的理念就是使用Web的現有特徵和能力, 更好地使用現有Web標準中的一些準則和約束。雖然REST本身受Web技術的影響很深, 但是理論上REST架構風格並不是綁定在HTTP上,只不過目前HTTP是唯一與REST相關的實例。 所以我們這裏描述的REST也是通過HTTP實現的REST。
特點:
- 具象的:一般指表現層,要表現的對象就是資源。比如,客戶端訪問服務器,獲取的數據就是資源。比如文字、圖片、音視頻等。
- 表現:資源的表現形式。txt格式、html格式、json格式、jpg格式等。瀏覽器通過URL確定資源的位置,但是需要在HTTP請求頭中,用Accept和Content-Type字段指定,這兩個字段是對資源表現的描述。
- 狀態轉換:客戶端和服務器交互的過程。在這個過程中,一定會有數據和狀態的轉化,這種轉化叫做狀態轉換。其中,GET表示獲取資源,POST表示新建資源,PUT表示更新資源,DELETE表示刪除資源。HTTP協議中最常用的就是這四種操作方式。
RESTful架構:
- 每個URL代表一種資源;
- 客戶端和服務器之間,傳遞這種資源的某種表現層;
- 客戶端通過四個http動詞,對服務器資源進行操作,實現表現層狀態轉換。
設計符合RESTful風格的API:
一、域名:
將api部署在專用域名下:
http://api.example.com
或者將api放在主域名下:
http://www.example.com/api/
二、版本:
將API的版本號放在url中。
http://www.example.com/api/v1.0/app
http://www.example.com/api/v1.2/app
三、路徑:
路徑表示API的具體網址。每個網址代表一種資源。 資源作爲網址,網址中不能有動詞只能有名詞,一般名詞要與數據庫的表名對應。而且名詞要使用複數。
//獲取單個商品
http://www.example.com/app/goods/1
//獲取所有商品
http://www.example.com/app/goods
四、使用標準的HTTP方法:
對於資源的具體操作類型,由HTTP動詞表示。 常用的HTTP動詞有四個。
GET SELECT :獲取資源。
POST CREATE :新建資源。
PUT UPDATE :更新資源。
DELETE DELETE :刪除資源。
示例:
#獲取指定商品的信息
GET: http://www.example.com/goods/ID
#新建商品的信息
POST: http://www.example.com/goods
#更新指定商品的信息
PUT: http://www.example.com/goods/ID
#刪除指定商品的信息
DELETE: http://www.example.com/goods/ID
其中最常用的就是GET和POST,這4個也是我在項目中最常用的。
HTTP請求方法詳解參考文章:https://www.cnblogs.com/lnlvinso/p/11000568.html.
五、過濾信息:
如果資源數據較多,服務器不能將所有數據一次全部返回給客戶端。API應該提供參數,過濾返回結果。
(這裏可以用Paginator和Page在後端實現)
示例:
#指定返回數據的數量
http://www.example.com/goods?limit=10
#指定返回數據的開始位置
http://www.example.com/goods?offset=10
#指定第幾頁,以及每頁數據的數量
http://www.example.com/goods?page=2&per_page=20
六、狀態碼:
服務器向瀏覽器返回的狀態碼和提示信息,常用的有:
200 OK :服務器成功返回用戶請求的數據
201 CREATED :用戶新建或修改數據成功。
202 Accepted:表示請求已進入後臺排隊。
400 INVALID REQUEST :用戶發出的請求有錯誤。
401 Unauthorized :用戶沒有權限。
403 Forbidden :訪問被禁止。
404 NOT FOUND :請求針對的是不存在的記錄。
406 Not Acceptable :用戶請求的的格式不正確。
500 INTERNAL SERVER ERROR :服務器發生錯誤。
我個人調試代碼的時候常見的報錯狀態碼 :400 、404 、405 、500
- 這個很重要,可以在後端寫一個專門負責狀態碼的類,專門維護狀態碼,這樣維護起來就方便很多,需要的時候直接導入、調用就行了,在前後端分離的時候,通過 jsonify返回給前端。
七、錯誤信息:
一般來說,服務器返回的錯誤信息,以鍵值對的形式通過 jsonify返回。
(服務器返回的數據格式,應該儘量使用JSON,避免使用XML。)
示例:
{
error:'Invalid API KEY'
}
參考文章:
RESTful 架構詳解:https://www.runoob.com/w3cnote/restful-architecture.html
RESTful 理解總結:https://www.cnblogs.com/wang-yaz/p/9237981.html
HTTP請求方法詳解參考文章:https://www.cnblogs.com/lnlvinso/p/11000568.html.
如有侵權請聯繫我!!!