Python Falcon - 簡介



Falcon 是一個用於開發關鍵任務 REST API 和微服務的 Python 庫。它支援 WSGI 和 ASGI 規範。Falcon 框架由 Kurt Griffiths 於 2013 年 1 月開發。Falcon 的最新版本是 3.1.0,於 2022 年 3 月釋出。

Falcon 是一個輕量級的 Web 開發框架。其極簡主義的設計允許開發人員根據需要選擇最佳策略和第三方軟體包。

Falcon - 重要特性

Falcon 在 Apache 2.0 許可證的條款下發布。

Falcon 的一些重要特性包括:

  • 最新版本的 Falcon 支援 ASGI、WSGI 以及 WebSocket。

  • Falcon 提供對 asyncio 的原生支援。

  • 其穩定的介面確保向後相容性。

  • Falcon 遵循 REST 架構風格來構建 API。

  • 基於類的 HTTP 資源構建。

  • 高度最佳化、可擴充套件的程式碼庫。

  • Falcon 透過請求和響應類提供對標頭和主體內容的輕鬆訪問。

  • 提供中介軟體元件和鉤子,用於 DRY 請求處理。

  • 慣用的 HTTP 錯誤響應和異常處理。

Falcon - 設計理念

Falcon 最小化了物件例項的數量,以避免建立物件的開銷,並減少記憶體使用。同一個例項將用於服務該路由上所有傳入的請求。

  • 異常由資源響應器(如 on_get()、on_post() 等方法)正確處理。Falcon 不會努力保護響應器程式碼免受自身的影響。高質量的 Falcon API 應滿足以下要求:

    • 資源響應器將響應變數設定為合理的值。

    • 您的程式碼經過充分測試,具有較高的程式碼覆蓋率。

    • 在每個響應器中提供自定義錯誤處理程式,以預測、檢測和處理錯誤。

  • Falcon 框架是執行緒安全的。為每個傳入的 HTTP 請求建立單獨的新請求和響應物件。但是,附加到路由的每個資源類的單個例項在所有請求之間共享。中介軟體物件、鉤子和自定義錯誤處理程式也共享。因此,您的 WSGI 應用作為一個整體將是執行緒安全的。

  • 從 3.0 版本開始,Falcon 支援 asyncio。使用 falcon.asgi.App 類建立非同步應用程式,並透過 ASGI 應用程式伺服器(如 Uvicorn)提供服務。

  • Falcon 的非同步版本支援 ASGI WebSocket 協議。

Falcon - 與其他框架的比較

Python Web 框架主要分為兩大類:全棧微型框架。

  • 全棧框架帶有內建的功能和庫。Django、TurbogearsWeb2Py 是全棧框架。

  • 相反,微型框架是極簡主義的,只提供最基本的功能;因此,開發人員可以自由選擇官方或第三方擴充套件,並且只包含他們需要的外掛。Flask、Falcon、Pyramid 屬於微型框架類別。

我們根據以下引數比較 Falcon 框架與不同的框架:

效能

與 Flask 和 Pyramid 等微型框架相比,Falcon 應用程式非常快。全棧框架通常比較慢。

REST 支援

Falcon 旨在成為開發 REST API 和微服務的首選框架。FastAPI 也鼓勵 REST 開發。Flask 和 Django 沒有內建的 REST 支援。但是,可以使用擴充套件來啟用它。

模板

Falcon 應用程式不應該服務模板網頁。它沒有捆綁任何模板庫。但是,可以使用 jinja2Macho 庫。另一方面,Flask 內建支援 jinja2。Django 有自己的模板庫。FastAPI 也可以處理任何選擇的模板庫。

資料庫支援

在 Falcon 中,資料庫支援不是內建的。可以使用 SQLAlchemy 模型與關係資料庫(如 MySQL、PostgreSQL、SQLite 等)進行互動。另一方面,Django 有自己的 ORM 框架,可以開箱即用。

Flask 應用程式也可以透過 Flask 擴充套件與資料庫進行互動。早期版本的 TurboGears 與 SQLObject ORM 庫相容。較新的版本與 SQLAlchemy 相容。

靈活性

Falcon 應用程式非常靈活。它非常適合需要高度定製和效能最佳化的應用程式。FastAPI 和 Flask 也靈活易於編碼,並且不限制使用者使用特定的專案或程式碼佈局。

安全性

Falcon 沒有內建的安全支援。其他框架(如 Django 和 FastAPI)確保高度的安全。Flask 也提供了針對 CSRF 和 XSS 等安全威脅的出色保護。

測試

Falcon 使用 unittest 和 Pytest 提供內建測試支援。Flask 和 Django 也支援 unittest。FastAPI 支援 unittest 和 starlette 測試功能。

廣告

© . All rights reserved.