Django-rest-framework 是個什麼鬼?

削微寒發表於2020-04-17

作者:HelloGitHub-追夢人物

我們首先來回顧一下傳統的基於模板引擎的 django 開發工作流:

  1. 繫結 URL 和檢視函式。當使用者訪問某個 URL 時,呼叫繫結的檢視函式進行處理。
  2. 編寫檢視函式的邏輯。檢視中通常涉及資料庫的操作。
  3. 在檢視中渲染 HTML 模板,返回 HTTP 響應。

其實,基於 django-rest-framework 的 RESTful API 的開發,過程是完全類似的:

  1. 繫結 URL 和檢視函式。當使用者訪問某個 URL 時,呼叫繫結的檢視函式進行處理。
  2. 編寫檢視函式的邏輯,根據 HTTP 請求型別,對請求的資源進行相應操作,這個過程通常涉及資料庫的操作。
  3. 使用約定的資源描述格式(例如 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 的學習之旅吧!


關注公眾號加入交流群

相關文章