python web開發筆記--Restful

前言:因爲有點危機感,所以時常看看招聘網站的招聘信息,看看自己面對那些崗位要求,有哪些不滿足。最近瀏覽的時候,經常看到崗位要求上有一個熟悉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架構:

  1. 每個URL代表一種資源;
  2. 客戶端和服務器之間,傳遞這種資源的某種表現層;
  3. 客戶端通過四個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.

如有侵權請聯繫我!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章