REST架構設計簡介
一、restful api
可以總結為一句話:REST是所有Web應用都應該遵守的架構設計指導原則Representational State Transfer,翻譯是"表現層狀態轉化"。面向資源是REST最明顯的特徵,對於同一個資源的一組不同的操作。資源是伺服器上一個可命名的抽象概念,資源是以名詞為核心來組織的,首先關注的是名詞。REST要求,必須通過統一的介面來對資源執行各種操作。對於每個資源只能執行一組有限的操作
(7個HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)
1.Restful API設計規範
-
資源。首先是弄清楚資源的概念。資源就是網路上的個實體,一段文字張圖片或者一首歌曲。資源總是要通過一種載體來反應它的內容。文字可以用TXT,也可以用HTML或者XML、圖片可以用IPG格式或者PNG格式,JSON是現在最常用的資源表現形式。
-
統一介面。RESTful鳳格的資料元操 CRUD(create,read,update,delete)分別對應HTP方法:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELE用來刪除資源,這樣就統一了資料操作的介面
-
URI。可以用一個URI(統一資源識別符號)指向資源,即每個URI都對應一個特定的資源。要獲取這個資源訪問它的URI就可以,因此URI就成了每一個資源的地址或識別符,一般的,每個資源至少有一個UR與之對應,最典型的URI就是URL
-
無狀態。所謂無狀態即所有的資源都可以URI定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而變化。有狀態和無狀態的區別,舉個例子說明一下
例如要查詢員工工資的步驟為第一步:登入系統。第二步:進入查詢工資的頁面。第三步:搜尋該員工。第四步:點選姓名檢視工資。這樣的操作流程就是有狀態的,查詢工資的每一個步驟都依賴於前一個步驟,只要前置操作不成功,後續操作就無法執行。如果輸入一個URL就可以得到指定員工的工資,則這種情況就是無狀態的,因為獲取工資不依賴於其他資源或狀態,且這種情況下,員工工資是一個資源,由一個URL與之對應可以通過HTTP中的GET方法得到資源,這就是典型的RESTfu風格。
-
RESTful API還有其他一些規範。
-
應該將AP的版本號放入URL。
Get:http://www.xxx.com/v1/friend/123。或者將版本號放在HTTP頭資訊中。版本號取決於自己開發團隊的習慣和業務的需要,不是強制的。
-
URL中只能有名詞而不能有動詞,操作的表達是使用HTTP的動詞GET,POST,PUT,DELETE。URL只標識資源的地址,既然是資源那就是名詞了。
-
如果記錄數量很多,伺服器不可能都將它們返回給使用者。API應該提供引數,過濾返回結果。?limit=10:指定返回記錄的數量、?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。
-
2、到底什麼是 RESTful架構
- 每一個URI代表一種資源
- 客戶端和伺服器之間,傳遞這種資源的某種表現層
- 客戶端通過四個HTTP動詞,對服務端資源進行操作,實現表現層狀態轉換
3、HTTP常用動詞
- GET(SELECT) : 從伺服器取出資源
- POST(CREATE or UPDATE) : 在伺服器建立資源或更新資源
- PUT(UPDATE) : 在伺服器更新資源(客戶端提供改變後的完整資源)
- PATCH(UPDATE) : 在伺服器更新資源(客戶端提供改變的屬性)
- DELETE(DELETE) : 從伺服器刪除資源
- HEAD:獲取資源的元資料
- OPTIONS:獲取資訊,關於資源的哪些屬性是客戶端可以改變的
示例
- GET/students:獲取所有學生
- POST/students:新建學生
- GET/students/id:獲取某一個學生
- PUT/students/id:更新某個學生的資訊(需要提供學生的全部資訊)
- PATCH/students/id:更新某個學生的資訊(需要提供學生變更部分資訊)
- DELETE/students/id:刪除某個學生
4、restful相關的網路請求狀態碼
- 200 OK-[GET]:伺服器成功返回使用者請求的資料
- 201 CREATED-[POST/PUT/PATCH]:使用者新建或修改資料成功
- 202 Accepted-[*]:表示一個請求已經進入後臺排隊(非同步任務)
- 204 NO CONTENT-[DELETE]:表示資料刪除成功
- 400 INVALID REQUEST-[POST/PUT/PATCH]:使用者發出的請求有錯誤
- 401 Unauthorized-[]:表示使用者沒有許可權(令牌,使用者名稱,密碼錯誤)
- 403 Forbidden-[]:表示使用者得到授權,但是訪問是被禁止的
- 404 NOT FOUND--[]:使用者發出的請求針對的是不存在的記錄
- 406 Not Acceptable-[*]:使用者請求格式不可得
- 410 Gone-[GET]:使用者請求的資源被永久移除,且不會再得到的
- 422 Unprocesable entity [POST/PUT/PATCH]:當建立一個物件時,發生一個驗證錯誤
- 500 INTERNAL SERVER ERROR-[*]:伺服器內部發生錯誤
二、重量級 RESTful框架
1、web應用模式
-
前後端不分離
在前後端不分離的引用模式中,前端頁面看到的效果都是由後端控制的,由後端頁面渲染或者重定向,也就是後端需要控制前端的展示,前端與後端的耦合度很高,這種模式比較適合純網頁應用,但是後端對接APP時,App可能並不需要後端返回一個HTML網頁,而僅僅是資料本身,所以後端原本返回網頁的介面不再適用前端APP應用,為了對接APP後端還需再開發一套介面。
-
前後端分離
在前後端分離的應用模式中,後端僅返回前端所需要的資料,不再渲染HTML頁面,不再控制前端的效果,只要前端使用者看到什麼效果,從後端請求的資料如何載入到前端中,都由前端自己決定,網頁有網頁自己的處理方式,APP有APP的處理方式,但無論哪種前端所需要的資料基本相同,後端僅需開發一套邏輯對外提供資料即可,在前後端分離的應用模式中,前端與後端的耦合度相對較低
2、Django Rest Framework
Django Rest Framework(DRF)是一個強大且靈活的工具包,用以構建Web APl。Django REST Framework可以在 Django的基礎上迅速實現API,並且自身還帶有WEB的測試頁面,可以方便的測試自己的API
- 特性
- 可瀏覽API
- 提供豐富認證
- 支援資料序列化
- 可以輕量嵌入,僅使用fbv
- 強大的社群支援
官方網站:
https://www.django-rest-framework.org/
中文翻譯網站:
https://q1mi.github.io/Django-REST-framework-documentation/
安裝 djangorestframework
pip install djangorestframework
3、django-rest-framework內容
- 序列化
- request和response物件
- 基於類的檢視
- 認證和鑑權