21.Django_RESTful簡介

REST

  • REST是REpresentationsal State Transfer的縮寫,具象狀態轉換
  • RESTful是一種開發理念,是一種API設計風格,而不是標準

主要的規範

  • 每一個URL代表一種資源,具體要對資源進行什麼操作,是根據請求方式來區分的,而不是在URL上直接體現:
    GET http://www.xxx.com/get_user/01(不安全、繁瑣、難維護等弊端),可以設計成GET http://www.xxx.com/user/01
  • 後端返回的資源數據類型有:
    1. json格式數據
    2. text文本
    3. 圖片、視頻等
  • 客戶端和服務器之間,傳遞這種資源的某種表現形式
    1. 後端通過請求頭Content-Type來指明傳給服務端的參數類型,比如application/json
    2. 後端通過請求頭中Accept來指明希望後端返回的相應數據的類型,比如application/json
  • 客戶端通過請求方式的不同,指明對服務器資源進行不同的操作
    1. GET:read
    2. POST:create
    3. PUT:update/replace
    4. PATCH:partial/update/modify
    5. DELETE:delete

REST常用的設計規範

一、URL

1. 命名

- 儘量使用名詞複數形式,儘量不要使用動詞
- 往往與數據庫的表名對應
差的設計:

在這裏插入圖片描述
好的設計:

在這裏插入圖片描述

2. 過濾條件

如果記錄數量很多,則需添加條件進行限制,否則返回數據太多,影響性能

?limit = 10 # 指定返回記錄的數量
?offset = 10 # 指定返回記錄的開始位置
?currPage=2&pageSize=10 # 指定第幾頁和每頁多少條數據
?sort=name # 指定返回結果按照指定的屬性進行排序

3.域名

  • 儘量使用專用域名
http://api.wwj.com

4.版本號

  • 在url中呈現版本號
http://xxx/app/1.0/
http://xxx/app/1.1/
  • 也可以在請求頭呈現
Accept:application/vnd.example.v1.0+json
Accept:application/vnd.example.v1.1+json;version=1.1

二、請求方式/動詞

  • 常見的http請求(括號中對應的sql命令)
    GET(select) : 從服務器獲取資源(一個或多個)
    POST(create) : 在服務器創建一個資源
    PUT(update): 在服務器更新資源(客戶端提供所要更新的完整資源,比如要更新user的age,但如果是put,需要提供user的全部數據)
    DELETE(delete): 從服務器刪除資源
  • 下面是不常見的三種
    PATCH(update where):在服務器進行部分資源的更新(客戶端提供改變的屬性)
    HEAD:獲取資源的元數據
    OPTIONS:獲取關於資源的哪些屬性是客戶端可以改變的信息,一般 後面會跟其它常用請求

例子(很重要)

GET /projects        # 獲取所有項目信息
POST /projects       # 創建一個新項目 
GET / projects/6     # 獲取id=6的項目信息 
PUT /projects/6      # 更新id=6的項目信息(全更新)
PATCH /projects/6    # 更新id=6的項目信息(部分更新)
DELETE /projects/6   # 刪除id=6的項目
''' 多層級信息的獲取的設計 '''
GET /projects/6/interfaces    # 獲取id=6的項目信息中所有的接口信息
GET /projects/6/interfaces/1  #獲取id=6的項目信息中id=1的接口信息

三、常見狀態碼(RESTful)

Status Codes

200  ok - [GET]:                                           服務器成功返回用戶請求的數據
201  CREATED - [POST/PUT/PATCH]:      用戶創建成功或修改數據成功
204  NO CONTENT - [DELETE]:                用戶刪除數據成功
400  INVALID REQUEST - [POST/PUT/PATCH]:用戶請求有誤(請求參數有問題)
401 Unauthorized = [^] :         表示用戶沒有權限(cookies、用戶名、密碼錯誤)
403 Forbidden - [^]:        表示用戶得到授權(和401錯誤相對),但是訪問是禁止的
404 NOT FOUND - [^]:   表示用戶請求的路徑不存在
500 INTERNAL SERVER ERROR - [^]:   服務器發生錯誤

四、錯誤處理

當請求有誤時,服務器需將錯誤信息以json的格式返回,比如:

{
    "code":1001,
    "data":null,
    "msg":"用戶不存在"
}

五、超鏈接API

響應數據中,可以包含下一步操作的url鏈接(比如說上一頁、下一頁的鏈接字段)
在這裏插入圖片描述

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