FastAPI 特性

2022-08-19 17:59 更新

FastAPI 提供了以下內(nèi)容:

基于開放標準

  • 用于創(chuàng)建 API 的 OpenAPI 包含了路徑操作,請求參數(shù),請求體,安全性等的聲明。
  • 使用 JSON Schema (因為 OpenAPI 本身就是基于 JSON Schema 的)自動生成數(shù)據(jù)模型文檔。
  • 經(jīng)過了縝密的研究后圍繞這些標準而設(shè)計。并非狗尾續(xù)貂。
  • 這也允許了在很多語言中自動生成客戶端代碼。

自動生成文檔

交互式 API 文檔以及具探索性 web 界面。因為該框架是基于 OpenAPI,所以有很多可選項,F(xiàn)astAPI 默認自帶兩個交互式 API 文檔。

  • Swagger UI,可交互式操作,能在瀏覽器中直接調(diào)用和測試你的 API 。


  • 另外的 API 文檔:ReDoc


更主流的 Python

全部都基于標準的 Python 3.6 類型聲明(感謝 Pydantic )。沒有新的語法需要學(xué)習(xí)。只需要標準的 Python 。

如果你需要2分鐘來學(xué)習(xí)如何使用 Python 類型(即使你不使用 FastAPI ),看看這個簡短的教程:Python Types。

編寫帶有類型標注的標準 Python:

from datetime import date

from pydantic import BaseModel

# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
    return user_id


# A Pydantic model
class User(BaseModel):
    id: int
    name: str
    joined: date

可以像這樣來使用:

my_user: User = User(id=3, name="John Doe", joined="2018-07-19")

second_user_data = {
    "id": 4,
    "name": "Mary",
    "joined": "2018-11-30",
}

my_second_user: User = User(**second_user_data)

Info

**second_user_data 意思是:

直接將second_user_data字典的鍵和值直接作為key-value參數(shù)傳遞,等同于:User(id=4, name="Mary", joined="2018-11-30")

編輯器支持

整個框架都被設(shè)計得易于使用且直觀,所有的決定都在開發(fā)之前就在多個編輯器上進行了測試,來確保最佳的開發(fā)體驗。

在最近的 Python 開發(fā)者調(diào)查中,我們能看到 被使用最多的功能是"自動補全"。

整個 FastAPI 框架就是基于這一點的。任何地方都可以進行自動補全。

你幾乎不需要經(jīng)?;貋砜次臋n。

在這里,你的編輯器可能會這樣幫助你:

  • Visual Studio Code 中:

editor support

  • PyCharm 中:

editor support

你將能進行代碼補全,這是在之前你可能曾認為不可能的事。例如,在來自請求 JSON 體(可能是嵌套的)中的鍵 price。

不會再輸錯鍵名,來回翻看文檔,或者來回滾動尋找你最后使用的 username 或者 user_name 。

簡潔

任何類型都有合理的默認值,任何和地方都有可選配置。所有的參數(shù)被微調(diào),來滿足你的需求,定義成你需要的 API。

但是默認情況下,一切都能“順利工作”。

驗證

  • 校驗大部分(甚至所有?)的 Python 數(shù)據(jù)類型,包括:JSON 對象 (dict).JSON 數(shù)組 (list) 定義成員類型。字符串 (str) 字段, 定義最小或最大長度。數(shù)字 (int, float) 有最大值和最小值, 等等。
  • 校驗外來類型, 比如:URL.Email.UUID....及其他.

所有的校驗都由完善且強大的 Pydantic 處理。

安全性及身份驗證

集成了安全性和身份認證。杜絕數(shù)據(jù)庫或者數(shù)據(jù)模型的滲透風(fēng)險。

OpenAPI 中定義的安全模式,包括:

  • HTTP 基本認證。
  • OAuth2 (也使用 JWT tokens)。
  • API 密鑰,在:請求頭。查詢參數(shù)。Cookies, 等等。

加上來自 Starlette(包括 session cookie)的所有安全特性。

所有的這些都是可復(fù)用的工具和組件,可以輕松與你的系統(tǒng),數(shù)據(jù)倉庫,關(guān)系型以及 NoSQL 數(shù)據(jù)庫等等集成。

依賴注入

FastAPI 有一個使用非常簡單,但是非常強大的依賴注入系統(tǒng)。

  • 甚至依賴也可以有依賴,創(chuàng)建一個層級或者“圖”依賴。
  • 所有自動化處理都由框架完成。
  • 所有的依賴關(guān)系都可以從請求中獲取數(shù)據(jù),并且增加了路徑操作約束和自動文檔生成。
  • 即使在依賴項中被定義的路徑操作 也會自動驗證。
  • 支持復(fù)雜的用戶身份認證系統(tǒng),數(shù)據(jù)庫連接等等。
  • 不依賴數(shù)據(jù)庫,前端等。 但是和它們集成很簡單。

無限制"插件"

或者說,導(dǎo)入并使用你需要的代碼,而不需要它們。

任何集成都被設(shè)計得被易于使用(用依賴關(guān)系),你可以用和路徑操作相同的結(jié)構(gòu)和語法,在兩行代碼中為你的應(yīng)用創(chuàng)建一個“插件”。

測試

  • 100% 測試覆蓋。
  • 代碼庫100% 類型注釋。
  • 用于生產(chǎn)應(yīng)用。

Starlette 特性

FastAPI 和 Starlette 完全兼容(并基于)。所以,你有的其他的 Starlette 代碼也能正常工作。FastAPI 實際上是 Starlette的一個子類。所以,如果你已經(jīng)知道或者使用 Starlette,大部分的功能會以相同的方式工作。

通過 FastAPI 你可以獲得所有 Starlette 的特性 ( FastAPI 就像加強版的 Starlette ):

  • 令人驚嘆的性能。它是 Python 可用的最快的框架之一,和 NodeJS 及 Go 相當(dāng)。
  • 支持 WebSocket 。
  • 支持 GraphQL 。
  • 后臺任務(wù)處理。
  • Startup 和 shutdown 事件。
  • 測試客戶端基于 requests。
  • CORS, GZip, 靜態(tài)文件, 流響應(yīng)。
  • 支持 Session 和 Cookie 。
  • 100% 測試覆蓋率。
  • 代碼庫 100% 類型注釋。

Pydantic 特性

FastAPI 和 Pydantic 完全兼容(并基于)。所以,你有的其他的 Pydantic 代碼也能正常工作。

兼容包括基于 Pydantic 的外部庫, 例如用與數(shù)據(jù)庫的 ORMs, ODMs。

這也意味著在很多情況下,你可以將從請求中獲得的相同對象直接傳到數(shù)據(jù)庫,因為所有的驗證都是自動的。

反之亦然,在很多情況下,你也可以將從數(shù)據(jù)庫中獲取的對象直接傳到客戶端。

通過 FastAPI 你可以獲得所有 Pydantic (FastAPI 基于 Pydantic 做了所有的數(shù)據(jù)處理):

  • 更簡單:沒有新的模式定義 micro-language 需要學(xué)習(xí)。如果你知道 Python types,你就知道如何使用 Pydantic。
  • 和你 IDE/linter/brain 適配:因為 pydantic 數(shù)據(jù)結(jié)構(gòu)僅僅是你定義的類的實例;自動補全,linting,mypy 以及你的直覺應(yīng)該可以和你驗證的數(shù)據(jù)一起正常工作。
  • 更快:在 基準測試 中,Pydantic 比其他被測試的庫都要快。
  • 驗證復(fù)雜結(jié)構(gòu):使用分層的 Pydantic 模型, Python typing的 List 和 Dict 等等。驗證器使我們能夠簡單清楚的將復(fù)雜的數(shù)據(jù)模式定義、檢查并記錄為 JSON Schema。你可以擁有深度嵌套的 JSON 對象并對它們進行驗證和注釋。
  • 可擴展:Pydantic 允許定義自定義數(shù)據(jù)類型或者你可以用驗證器裝飾器對被裝飾的模型上的方法擴展驗證。
  • 100% 測試覆蓋率。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號