django-rest-framework框架 第一篇

本課件是爲了教學任務本身寫的學習django-rest-framework框架。 方便本身授課,也成爲學生的複習教程。 本課程學習後:具備REST編程思惟;並能夠經過django及專業的django-rest框架來完成REST風格的網站後臺。前端

RESTful架構ajax

REST的起源 REST即表現層狀態轉移(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格,是一組架構約束條件和原則。數據庫

REST的名稱 Fielding將他對互聯網軟件的架構原則,定名爲REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現層狀態轉移"。知足REST約束條件和原則的應用程序或設計就是RESTful。REST 近年來已經成爲最主要的 Web 服務設計模式。django

RESTful的用處 常常用在先後端分離的開發模式中,服務端提供API服務,前端用來展現數據,直接經過ajax來溝通。編程

RESTful架構的資源 所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體信息。例如:一個網頁、圖片、歌曲、視頻、服務接口等。 每種資源對應一個特定的URI,,所以URI就成了每個資源的地址或獨一無二的識別符。json

RESTful架構的表現層 "資源"是一種信息實體,它能夠有多種外在表現形式。咱們把"資源"具體呈現出來的形式,叫作它的"表現層"(Representation)。 一個圖片能夠用jpeg格式表現,也能夠用png格式來表現。後端

RESTful架構的表現層狀態轉移 資源存放在服務端,資源狀態發生改變,必然也在服務端。咱們能夠經過HTTP協議 的請求方式不一樣 完成資源的狀態變化。設計模式

REST API 設計api

REST API 的協議 API與用戶的通訊協議,老是使用HTTPS協議。 REST API 的域名規範 應該儘可能將API部署在專用域名之下。 https://api.example.com 若是肯定API很簡單,不會有進一步擴展,能夠考慮放在主域名下。 https://example.org/api/ REST API 的版本位置 應該將API的版本號放入URL。 https://api.example.com/v1/ 另外一種作法是,將版本號放在HTTP頭信息中,但不如放入URL方便和直觀。數組

REST API 設計

REST API 的路徑url路徑又稱"終點"(endpoint),表示API的具體網址。 在RESTful架構中,每一個網址表明一種資源(resource),因此網址中不能有動詞,只能有名詞,並且所用的名詞每每與數據庫的表名對應。通常來講,數據庫中的表都是同種記錄的"集合"(collection),因此API中的名詞也應該使用複數。 https://api.example.com/v1/users HTTP動詞 對於資源的具體操做類型,由HTTP動詞表示。 經常使用的HTTP動詞有下面五個(括號裏是對應的SQL命令)。 GET(SELECT):從服務器取出資源(一項或多項)。 POST(CREATE):在服務器新建一個資源。 PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源)。 PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。 DELETE(DELETE):從服務器刪除資源。

下面是一些常見的參數。

?limit=10:指定返回記錄的數量 ?offset=10:指定返回記錄的開始位置。

?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。

?sortby=name&order=asc:指定返回結果按照哪一個屬性排序,以及排序順序。

?animal_type_id=1:指定篩選條件

參數的設計容許存在冗餘,即容許API路徑和URL參數偶爾有重複。好比,GET /zoo/ID/animals 與 GET /animals?zoo_id=ID 的含義是相同的。

 

REST API中狀態碼(Status Codes) 服務器向用戶返回的狀態碼和提示信息,常見的有如下一些(方括號中是該狀態碼對應的HTTP動詞)。

REST API中錯誤處理(Error handling) 若是狀態碼是4xx,就應該向用戶返回出錯信息。通常來講,返回的信息中將error做爲鍵名,出錯信息做爲鍵值便可。 { error: "Invalid API key" }

 

API中返回接口規範

針對不一樣操做,服務器向用戶返回的結果應該符合如下規範。

GET /collection:返回資源對象的列表(數組)

GET /collection/resource:返回單個資源對象

POST /collection:返回新生成的資源對象

PUT /collection/resource:返回完整的資源對象

PATCH /collection/resource:返回完整的資源對象

DELETE /collection/resource:返回一個空文檔

 

REST API中Hypermedia API 超媒體做爲應用狀態的引擎(Hypermedia as the engine of application state) RESTful API最好作到Hypermedia,即返回結果中提供連接,連向其餘API方法,使得用戶不查文檔,也知道下一步應該作什麼。 好比,當用戶向api.example.com的根目錄發出請求,會獲得這樣一個文檔。 {"link": { "rel": "collection https://www.example.com/zoos", "href": "https://api.example.com/zoos", "title": "List of zoos", "type": "application/vnd.yourformat+json" }} 上面代碼表示,文檔中有一個link屬性,用戶讀取這個屬性就知道下一步該調用什麼API了。rel表示這個API與當前網址的關係(collection關係,並給出該collection的網址),href表示API的路徑,title表示API的標題,type表示返回類型。

 

view編寫

CBV和FBV 咱們以前寫過的都是基於函數的view,就叫FBV。還能夠把view寫成基於類的 叫CBV。 FBV(function base views) 就是在視圖裏使用函數處理請求。 CBV(class base views) 就是在視圖裏使用類處理請求。 CBV的優勢: 提升了代碼的複用性,可使用面嚮對象的技術,好比Mixin(多繼承) 能夠用不一樣的函數針對不一樣的HTTP方法處理,而不是經過不少if判斷,提升代碼可讀性

相關文章
相關標籤/搜索