我們首先來回顧一下傳統的基於模板引擎的 django 開發工作流:
- 繫結 URL 和檢視函式。當使用者訪問某個 URL 時,呼叫繫結的檢視函式進行處理。
- 編寫檢視函式的邏輯。檢視中通常涉及資料庫的操作。
- 在檢視中渲染 HTML 模板,返回 HTTP 響應。
其實,基於 django-rest-framework 的 RESTful API 的開發,過程是完全類似的:
- 繫結 URL 和檢視函式。當使用者訪問某個 URL 時,呼叫繫結的檢視函式進行處理。
- 編寫檢視函式的邏輯,根據 HTTP 請求型別,對請求的資源進行相應操作,這個過程通常涉及資料庫的操作。
- 使用約定的資源描述格式(例如 XML 或者 JSON)序列化資源並將資料返回給客戶端(通過 HTTP 響應)。
對比發現,前兩步幾乎是完全相同的。不同點在於,在傳統的基於模板引擎的開發方式中,資源使用 HTML 文件進行描述並返回給客戶端,而在 RESTful API 的開發方式中,資源通常被描述為 JSON 或者 XML 的格式返回給客戶端。
有的同學就要問了,雖然 django 的檢視函式通常情況下返回 HTML 文件的響應,但是 django 也支援返回 XML 格式或者 JSON 格式的響應,那麼為什麼還要使用 django-rest-framework 呢?
事實上,的確能夠在 django 中返回 JSON 或者 XML 格式的資料,但是 django 框架本身只提供了十分基礎的功能。django-rest-framework 是基於 django 的擴充,專為 RESTful API 的開發而設計,提供了十分豐富的輔助類和函式,幫助我們方便地開發 API。下面就來簡單介紹 django-rest-framework 為我們提供了哪些功能特性,這些功能和特性我們在接下來的實戰中會進一步學習其用法,這裡可以先從巨集觀層面,做一個簡單的瞭解。
- 內容協商(Content Negotiation)。之前說過,在 RESFful 架構的系統中,資源以某種描述形式在客戶端和伺服器之間傳遞,django-rest-framework 根據客戶端能夠接受的資源格式,自動使用合適的資源描述工具,返回客戶端可接受的資源。
- 認證與鑑權(Authentication and Permission)。客戶端對資源的操作通常是受限的,有些資源只能由經過身份認證或具有相應許可權的使用者才能操作,django-rest-framework 提供了豐富的認證類和鑑權類,幫助我們對使用者的身份和許可權進行校驗。
- 序列化(Serialization)。django 基於 Python 語言開發,因此資源通常由 Python 物件描述,那麼在傳遞給客戶端時,就要進行轉換,例如將 Python 物件轉換為 JSON 字串,這個過程就叫做序列化。django 內建的序列化器功能有限,django-rest-framework 提供了功能更加豐富和強大的序列化器,讓資源的序列化工作變得異常簡單。
- 各種通用檢視(Generic Views)。django 針對 Web 開發中常見的處理邏輯,提供了各種通用檢視函式,以提高程式碼的複用性,減少開發者的工作量。django-rest-framework 同樣針對 RESTful API 開發中常見的處理邏輯,提供了各種通用檢視函式。
- 路由自動生成器(Router)。django-rest-framework 根據編寫的檢視函式,自動生成符合 RESTful 設計的 URL 路由。
- 文件(Documentation)。django-rest-framework 基於 OpenAPI 模式自動生成 API 文件,無需我們手動編寫和維護。
除此以外,django-rest-framework 還提供了分頁(Pagination)、API 版本控制(Versioning)、快取(Caching)、限流(Throtting)等各種功能類。
在接下來的實戰教程中,我們會逐一的學習並使用它們。
讓我們正式開啟 django-rest-framework 的學習之旅吧!
關注公眾號加入交流群