呆鳥云:發(fā)布本系列旨在推廣 FastAPI 以及推進(jìn) FastAPI 中文官檔翻譯,目前,F(xiàn)astAPI 官檔已完成 98% 的中文翻譯,如果您對(duì) FastAPI 有興趣,可以為這個(gè)很贊的開源項(xiàng)目做些貢獻(xiàn)涛癌,比如校譯、翻譯送火、審閱等拳话。
開源項(xiàng)目的發(fā)展離不開大家的支持。當(dāng)然最簡單的就是在 Github 上點(diǎn) Star 了种吸。
如果您覺得 FastAPI 不錯(cuò)弃衍,也可以轉(zhuǎn)發(fā)、轉(zhuǎn)載本文坚俗,讓更多人知道 Python 還有這么簡單的后端支持庫镜盯。
下面先列出幾個(gè)需要 Review 的 PR,希望大家多多參與猖败。
- https://github.com/tiangolo/fastapi/pull/3826
- https://github.com/tiangolo/fastapi/pull/3827
- https://github.com/tiangolo/fastapi/pull/3828
- https://github.com/tiangolo/fastapi/pull/3829
- https://github.com/tiangolo/fastapi/pull/3830
- https://github.com/tiangolo/fastapi/pull/3832
- https://github.com/tiangolo/fastapi/pull/3793
- https://github.com/tiangolo/fastapi/pull/3795
- https://github.com/tiangolo/fastapi/pull/3796
以下為正文速缆。
FastAPI 特性
FastAPI 具備以下特性:
基于開放標(biāo)準(zhǔn)
- OpenAPI 用于創(chuàng)建 API,包括聲明路徑操作恩闻、參數(shù)艺糜、請(qǐng)求體、安全等
- 使用 JSON Schema 的自動(dòng)數(shù)據(jù)模型文檔,(OpenAPI 就是基于 JSON Schema)
- 基于標(biāo)準(zhǔn)設(shè)計(jì)破停,歷經(jīng)縝密的研究翅楼,并非狗尾續(xù)貂
- 支持在多種語言中自動(dòng)生成客戶端代碼
自動(dòng)文檔
API 文檔和探索性 Web 用戶界面。FastAPI 基于 OpenAPI真慢,支持多種備選文檔方案毅臊,目前默認(rèn)自帶 2 個(gè) API 文檔。
- Swagger UI黑界,可在瀏覽器中實(shí)現(xiàn)交互式探索管嬉,直接調(diào)用和測(cè)試 API
- 備選 API 文檔:ReDoc
現(xiàn)代 Python
借助 Pydantic,F(xiàn)astAPI 的功能全部基于標(biāo)準(zhǔn)的 Python 3.6 類型聲明园爷。無需學(xué)習(xí)新語法宠蚂,只需要標(biāo)準(zhǔn)的現(xiàn)代 Python 。
就算不使用 FastAPI童社,最好也花幾分鐘學(xué)習(xí)一下 Python 類型,詳見:Python 類型著隆。
使用類型的標(biāo)準(zhǔn) Python:
from types import List, Dict
from datetime import date
from pydantic import BaseModel
# 把變量聲明為字符串
# 在函數(shù)內(nèi)部獲得編輯器支持
def main(user_id: str):
return user_id
# Pydantic 模型
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` 字典的鍵值作為關(guān)鍵字參數(shù)傳遞扰楼,等效于:`User(id=4, name="Mary", joined="2018-11-30")`
編輯器支持
FastAPI 設(shè)計(jì)的易用且直觀,為了確保最佳的開發(fā)體驗(yàn)美浦,所有設(shè)計(jì)方案在開發(fā)前就在多個(gè)編輯器上進(jìn)行了測(cè)試弦赖。
最新的 Python 開發(fā)者調(diào)查報(bào)告顯示使用最多的功能是自動(dòng)補(bǔ)全。
FastAPI 就是基于這一點(diǎn)浦辨,處處都有自動(dòng)補(bǔ)全蹬竖。
開發(fā)者幾乎不需要翻閱文檔。
編輯器會(huì)提供各種幫助:
- Visual Studio Code:
- PyCharm:
即便在之前不敢想象的位置流酬,也實(shí)現(xiàn)了代碼自動(dòng)補(bǔ)全币厕。例如,自動(dòng)補(bǔ)全 JSON 請(qǐng)求體(可能是嵌套的)中的鍵 price
芽腾。
再也不會(huì)輸錯(cuò)鍵名旦装,也不用來回翻閱文檔,更不用上下求索摊滔,確認(rèn)最后使用的是 username
還是 user_name
阴绢。
簡潔
所有對(duì)象都有合理的默認(rèn)值,處處都有可選配置艰躺。所有參數(shù)都可以微調(diào)呻袭,以滿足您的需求,開發(fā)出理想的 API腺兴。
但默認(rèn)的前提是左电,一切都能正常運(yùn)轉(zhuǎn)。
驗(yàn)證
-
驗(yàn)證絕大部分 Python 數(shù)據(jù)類型,包括:
- JSON 對(duì)象(字典)
- JSON 數(shù)組(列表)券腔,支持定義成員類型
- 字符串(字符串)字段伏穆,支持定義最小或最大長度
- 數(shù)字(整數(shù)、浮點(diǎn)數(shù))纷纫,支持定義最大值和最小值
-
校驗(yàn)外部類型枕扫, 比如:
- URL
- UUID 等……
所有的驗(yàn)證都由完善且穩(wěn)定的 Pydantic 處理。
安全與身份驗(yàn)證
集成了安全和身份驗(yàn)證辱魁,杜絕數(shù)據(jù)庫或數(shù)據(jù)模型的滲透風(fēng)險(xiǎn)烟瞧。
OpenAPI 中定義的安全概圖,包括:
- HTTP 基本驗(yàn)證
- OAuth2(使用 JWT 令牌)
- 以下幾種對(duì)象中的 API 密鑰:
- 請(qǐng)求頭
- 查詢參數(shù)
- Cookies 等
此外染簇,還有 Starlette(包括 session cookie)的所有安全功能参滴。
所有的工具和組件都可以復(fù)用,并能輕易地與您的系統(tǒng)锻弓、數(shù)據(jù)倉庫砾赔、關(guān)系型數(shù)據(jù)庫、 NoSQL 數(shù)據(jù)庫集成青灼。
依賴注入
FastAPI 的依賴注入系統(tǒng)非常簡單暴心,但卻十分強(qiáng)大。
- 支持子依賴項(xiàng)的依賴項(xiàng)杂拨,可創(chuàng)建多層依賴項(xiàng)或圖依賴項(xiàng)
- FastAPI 會(huì)自動(dòng)處理所有操作
- 所有依賴項(xiàng)都可以從請(qǐng)求獲取數(shù)據(jù)专普,并且增加了路徑操作約束和 API 文檔
- 依賴項(xiàng)中定義的路徑操作參數(shù)也可以自動(dòng)驗(yàn)證
- 支持復(fù)雜的用戶身份驗(yàn)證系統(tǒng),數(shù)據(jù)庫連接等
- 不依賴數(shù)據(jù)庫弹沽、前端檀夹,但是和它們集成很簡單
無限的插件
其實(shí),F(xiàn)astAPI 并不需要插件策橘,可以直接導(dǎo)入和使用所需的代碼炸渡。
依賴項(xiàng)可以把任意支持庫輕易地整合進(jìn) FastAPI 應(yīng)用,使用與路徑操作相同的架構(gòu)和語法役纹,只要兩行代碼就可以為應(yīng)用創(chuàng)建任意插件偶摔。
測(cè)試
- 100% 測(cè)試覆蓋
- 代碼庫 100% 類型注釋
- 用于生產(chǎn)應(yīng)用
Starlette 特性
FastAPI 完全兼容并基于 Starlette。所以促脉,Starlette 代碼能在 FastAPI 應(yīng)用中正常運(yùn)行辰斋。FastAPI
實(shí)際上是 Starlette
的子類。只要了解 Starlette瘸味,就可以使用它的絕大部分功能宫仗。
FastAPI 擁有 Starlette 的所有功能,可以說旁仿,它是 Starlette 的加強(qiáng)版:
- 令人驚嘆的性能藕夫。Python 最快的框架之一孽糖,堪比 NodeJS 和 Go
- 支持 WebSocket
- 支持 GraphQL
- 后臺(tái)任務(wù)處理
- Startup 和 Shutdown 事件
- 基于
requests
測(cè)試客戶端 - CORS、GZip毅贮、靜態(tài)文件办悟、流響應(yīng)
- 支持 Session 和 Cookie
- 100% 測(cè)試覆蓋率
- 代碼庫 100% 類型注釋
Pydantic 特性
FastAPI 完全兼容并基于 Pydantic。所以滩褥,Pydantic 代碼能在 FastAPI 應(yīng)用中正常運(yùn)行病蛉。
FastAPI 還支持基于 Pydantic 的外部庫,例如瑰煎,數(shù)據(jù)庫的 ORM铺然、ODM。
也就是說酒甸,很多情況下魄健,可以把從請(qǐng)求中獲得的對(duì)象直接傳到數(shù)據(jù)庫,因?yàn)樗械尿?yàn)證都是自動(dòng)的插勤。
反之沽瘦,也可以把從數(shù)據(jù)庫中獲取的對(duì)象直接傳到客戶端。
FastAPI 支持 Pydantic 的所有功能(基于 Pydantic 實(shí)現(xiàn)數(shù)據(jù)處理):
-
不燒腦:
- 無需學(xué)習(xí)新的概圖定義微語言
- 只要了解 Python 類型饮六,就能使用 Pydantic
- 適配 IDE:
- 因?yàn)?Pydantic 數(shù)據(jù)結(jié)構(gòu)只是定義的類實(shí)例其垄;自動(dòng)補(bǔ)全、linting卤橄、mypy 都可以和驗(yàn)證數(shù)據(jù)一起正常運(yùn)作,完全符合直覺
-
更快:
- 在基準(zhǔn)測(cè)試中臂外,Pydantic 比其它參與測(cè)試的其它庫都快
- 驗(yàn)證復(fù)雜結(jié)構(gòu):
- 使用層級(jí)式 Pydantic 模型窟扑,Python
typing
的List
和Dict
等 - 驗(yàn)證器可以清晰、簡單地定義漏健、校驗(yàn)復(fù)雜數(shù)據(jù)概圖嚎货,并存檔為 JSON Schema
- 深度嵌套 JSON 對(duì)象,并可進(jìn)行驗(yàn)證和注釋
- 使用層級(jí)式 Pydantic 模型窟扑,Python
-
可擴(kuò)展:
- Pydantic 支持自定義數(shù)據(jù)類型蔫浆,使用驗(yàn)證裝飾器擴(kuò)展對(duì)模型的驗(yàn)證方法
- 100% 測(cè)試覆蓋率