1. 程式人生 > >Django RESTful規範

Django RESTful規範

Restful :

web服務互動:

  我們在瀏覽器中能看到的每個網站, 都是一個web服務. 那麼我們在提供每個web服務的時候, 都需要前後端互動. 前後端互動就一定有一些實現方案, 我們通常叫web服務互動方案.

  目前主流的三種web服務互動方案:

    REST(Representational State Transfer) 表述性狀態轉移

    SOAP(Simple Object Access Protocol) 簡單的物件訪問協議

    XML-RPC(XML Remote Procedure Call) 基於XML的遠端過程呼叫

  XML-RPC是通過XML將呼叫函式封裝, 並使用HTTP協議作為傳送機制.

  後來在新的功能不斷被引入下, 這個標準慢慢演變後才能為今日的SOAP協定.

  SOAP服務則是以本身所定的操作集, 來訪問網路上的資源.

  SOAP也是基於XML的,但是它不只限於HTTP協議的傳輸,包括TCP協議,UDP協議都可以傳輸。

  REST是Roy Thomas Fielding博士於2000年在他的博士論文裡提出來的。

  REST相比SOAP更加簡潔,效能和開發效率也有突出的優勢。

  我們今天主要說一下這個REST,現在越來越多的web服務開始採用REST風格設計和實現。

  例如,amazon.com提供接近REST風格的Web服務進行圖書查詢;雅虎提供的Web服務也是REST風格的。

  我們接下來要學的框架也是遵循REST風格的,那麼我們來看下它到底是個什麼樣的風格,

  瞭解了它是什麼後,我們看下它的優點是什麼,我們為什麼用它。

 


 

理解REST :

如果我們想要理解restful, 就要理解Representational State Transfer這個片語的意思: 表徵性狀態轉移.

所謂的表徵性, 其實指的就是資源. 通常稱為資源狀態轉移.

什麼是資源:

  任何事物, 只要有被引用的必要, 它就是一個資源.

  我們在瀏覽器中看到的文字, 視訊, 圖片等都是資源. 這些都是實實在在存在的實體.

  資源可以是一個實體, 也可以是抽象概念.

  比如說:

    某個人的個人資訊

    某個人的手機號

    某個人和另外一個人的潛在關係.

  在網路中, 我們要引用資源, 資源一定要有一個標識, 在web中的唯一標識就是URI.

什麼是URI, URL:

  URI 統一資源識別符號

  URL 統一資源定位符

  URI是給我們的資源進行標識的, URL是描述我們資源地址的.

  比如每個人都有名字和身份證, 名字可以重複, 但是身份證號是唯一的.

  那麼身份證號就相當於我們的URI, 標識我們每一個人, 也可以說標識我們每一個資源.

  我們可以通過身份證號確定一個人, 但是想要找到這個人的具體位置就要通過具體的定位方式.

  這個就是我們的URL, 我們通過這兩種方式都可以找到我們的資源,

  其實URL可以說是URI的子集, 通過定位的方式實現的URI.

統一資源介面:

  現在我們可以通過URL去訪問到資源, 那麼我們隊資源會有很多不同的操作, 增刪查改

  以前我們可能會為了這個增加一個URL, 然後這個URL就是對資料進行增加的,

  還會為了更新和刪除分別設計一個URL, 現在不需要了, 只有一個URL,

  然後根據HTTP請求方式的不同, 對資源進行不同的操作, 這個就是統一資源介面.

資源的表述:

  資源的表述其實就是資源的展現形式, 我們客戶端和服務端傳輸的都是資源的表述, 而不是資源本身.

  例如文字資源可以採用html, xml, json等格式, 圖片可以使用PNG或JPG展現出來.

  那麼客戶端是怎麼知道服務端提供哪種表述形式的呢?

  可以通過HTTP內容協商, 客戶端可以通過Accept頭請求一種特定格式的表述, 服務端通過Content-Type告訴客戶端資源的表述形式.

  這些資源的表述呈現在頁面上, 就是我們說的資源狀態.

狀態轉移:

  我們在看頁面的時候,從當前資源的表述(也可以說狀態或者表現層)會跳轉到其他的資源狀態。

  服務端通過超媒體告訴客戶端當前狀態有哪些後續狀態可以進入。

  這些類似"下一頁"之類的連結起的就是這種推進狀態的作用——指引你如何從當前狀態進入下一個可能的狀態。

總結:

  可以得知REST風格的特點如下:

  (1)在web中,只要有被引用的必要都叫資源。

  (2)每個URI代表一個資源,獨一無二的。

  (3)客戶端通過HTTP的方法,對伺服器端資源進行操作;

  (4)客戶端和伺服器之間,傳遞這種資源的某種表現層;

  (5)通過超連結的指引,實現"表現層狀態轉移"。

 


 

RESTful :

如果一個架構符合REST的約束條件和原則, 我們就稱它為RESTful架構.

一種軟體的架構風格, 設計風格, 為客戶端和服務端的互動提供一組設計原則和約束條件.

 


 

restful規範 :

1. 面向資源程式設計:

  每一URL代表一種資源, URL中儘量不要用動詞, 多用名詞

2. 根據method不同, 進行不同的操作:

  GET/POST/PUT/DELETE/PATCH

3. 在URL中體現版本:

  https://www.bootcss.com/v1/mycss

  https://v1.bootcss.com/mycss

4. 在URL中體現是否是API:

  https://www.bootcss.com/api/mycss

  https://api.bootcss.com/mycss

5. 在URL中guolv條件

  https://www.bootcss.com/v1/mycss?page=3

6. 儘量使用HTTPS:

  https://www.bootcss.com/v1/mycss

7. 響應時設定狀態碼:

  1. 資訊, 伺服器收到請求, 需要請求者繼續執行操作

  2. 成功, 操作被成功接收並處理

  3. 重定向, 需要進一步的操作以完成請求

  4. 客戶端錯誤, 請求包含語法錯誤或無法完成請求

  5. 伺服器錯誤, 伺服器在處理請求的過程中發生了錯誤

8. 返回值:

  GET請求: 返回查到所有或單條資料

  POST請求: 返回新增的資料

  PUT請求: 返回更新的資料

  PATCH請求: 區域性更新, 返回更新的整條資料

  DELETE請求: 返回值為空

9. 返回錯誤資訊:

  返回值攜帶錯誤資訊

10. Hypermedia API

  如果遇到需要跳轉的情況 攜帶跳轉介面的URL

  ret = {                 code: 1000,                 data:{                     id:1,                     name:'小強',                     depart_id:http://www.baidu.com/api/v1/depart/8/                 }             }