1. 程式人生 > 實用技巧 >REST架構設計簡介

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還有其他一些規範。

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物件
  • 基於類的檢視
  • 認證和鑑權