FastAPI官檔精編002 - 特性

呆鳥云:發(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,希望大家多多參與猖败。

以下為正文速缆。


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
Swagger UI 交互
  • 備選 API 文檔:ReDoc
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
    • Email
    • 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 最快的框架之一孽糖,堪比 NodeJSGo
  • 支持 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 typingListDict
    • 驗(yàn)證器可以清晰、簡單地定義漏健、校驗(yàn)復(fù)雜數(shù)據(jù)概圖嚎货,并存檔為 JSON Schema
    • 深度嵌套 JSON 對(duì)象,并可進(jìn)行驗(yàn)證和注釋
  • 可擴(kuò)展
    • Pydantic 支持自定義數(shù)據(jù)類型蔫浆,使用驗(yàn)證裝飾器擴(kuò)展對(duì)模型的驗(yàn)證方法
  • 100% 測(cè)試覆蓋率
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殖属,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓦盛,更是在濱河造成了極大的恐慌洗显,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件原环,死亡現(xiàn)場(chǎng)離奇詭異挠唆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘱吗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門玄组,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事俄讹《咧拢” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵患膛,是天一觀的道長摊阀。 經(jīng)常有香客問我,道長剩瓶,這世上最難降的妖魔是什么驹溃? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮延曙,結(jié)果婚禮上豌鹤,老公的妹妹穿的比我還像新娘。我一直安慰自己枝缔,他們只是感情好布疙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愿卸,像睡著了一般灵临。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趴荸,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天儒溉,我揣著相機(jī)與錄音,去河邊找鬼发钝。 笑死顿涣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酝豪。 我是一名探鬼主播涛碑,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼孵淘!你這毒婦竟也來了蒲障?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤瘫证,失蹤者是張志新(化名)和其女友劉穎揉阎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痛悯,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡余黎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了载萌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惧财。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巡扇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垮衷,到底是詐尸還是另有隱情厅翔,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布搀突,位于F島的核電站刀闷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仰迁。R本人自食惡果不足惜甸昏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望徐许。 院中可真熱鬧施蜜,春花似錦、人聲如沸雌隅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恰起。三九已至修械,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間检盼,已是汗流浹背肯污。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吨枉,地道東北人仇箱。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像东羹,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忠烛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 呆鳥云:發(fā)布本系列旨在推廣 FastAPI 以及推進(jìn) FastAPI 中文官檔翻譯属提,目前,F(xiàn)astAPI 官檔已完...
    呆鳥的簡書閱讀 1,449評(píng)論 0 4
  • 寫在前面 總體而言美尸,python作為一門膠水語言冤议,由于學(xué)習(xí)成本相對(duì)較低,主要用途還是在原型驗(yàn)證师坎、模型探索等方面恕酸,而...
    wanzhouyi閱讀 4,486評(píng)論 0 2
  • 以一個(gè)實(shí)際構(gòu)建API的例子介紹FastAPI在已有數(shù)據(jù)情況下的簡單應(yīng)用 簡介 FastAPI是一個(gè)現(xiàn)代、快速(高性...
    星軌無盡閱讀 1,750評(píng)論 0 0
  • Starlette 中提出了一種配置的方案胯陋,封裝了簡單的 Environ 環(huán)境變量類和 Config 配置文件類蕊温。...
    Gascognya閱讀 4,589評(píng)論 0 3
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者袱箱,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn)义矛,也就放棄了無數(shù)的可能发笔。 ...
    yichen大刀閱讀 6,049評(píng)論 0 4