FastAPI 提供了以下內(nèi)容:
交互式 API 文檔以及具探索性 web 界面。因?yàn)樵摽蚣苁腔?OpenAPI,所以有很多可選項(xiàng),F(xiàn)astAPI 默認(rèn)自帶兩個(gè)交互式 API 文檔。
全部都基于標(biāo)準(zhǔn)的 Python 3.6 類型聲明(感謝 Pydantic )。沒(méi)有新的語(yǔ)法需要學(xué)習(xí)。只需要標(biāo)準(zhǔn)的 Python 。
如果你需要2分鐘來(lái)學(xué)習(xí)如何使用 Python 類型(即使你不使用 FastAPI ),看看這個(gè)簡(jiǎn)短的教程:Python Types。
編寫(xiě)帶有類型標(biāo)注的標(biāo)準(zhǔn) 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
可以像這樣來(lái)使用:
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")
整個(gè)框架都被設(shè)計(jì)得易于使用且直觀,所有的決定都在開(kāi)發(fā)之前就在多個(gè)編輯器上進(jìn)行了測(cè)試,來(lái)確保最佳的開(kāi)發(fā)體驗(yàn)。
在最近的 Python 開(kāi)發(fā)者調(diào)查中,我們能看到 被使用最多的功能是"自動(dòng)補(bǔ)全"。
整個(gè) FastAPI 框架就是基于這一點(diǎn)的。任何地方都可以進(jìn)行自動(dòng)補(bǔ)全。
你幾乎不需要經(jīng)常回來(lái)看文檔。
在這里,你的編輯器可能會(huì)這樣幫助你:
你將能進(jìn)行代碼補(bǔ)全,這是在之前你可能曾認(rèn)為不可能的事。例如,在來(lái)自請(qǐng)求 JSON 體(可能是嵌套的)中的鍵 price。
不會(huì)再輸錯(cuò)鍵名,來(lái)回翻看文檔,或者來(lái)回滾動(dòng)尋找你最后使用的 username 或者 user_name 。
任何類型都有合理的默認(rèn)值,任何和地方都有可選配置。所有的參數(shù)被微調(diào),來(lái)滿足你的需求,定義成你需要的 API。
但是默認(rèn)情況下,一切都能“順利工作”。
所有的校驗(yàn)都由完善且強(qiáng)大的 Pydantic 處理。
集成了安全性和身份認(rèn)證。杜絕數(shù)據(jù)庫(kù)或者數(shù)據(jù)模型的滲透風(fēng)險(xiǎn)。
OpenAPI 中定義的安全模式,包括:
加上來(lái)自 Starlette(包括 session cookie)的所有安全特性。
所有的這些都是可復(fù)用的工具和組件,可以輕松與你的系統(tǒng),數(shù)據(jù)倉(cāng)庫(kù),關(guān)系型以及 NoSQL 數(shù)據(jù)庫(kù)等等集成。
FastAPI 有一個(gè)使用非常簡(jiǎn)單,但是非常強(qiáng)大的依賴注入系統(tǒng)。
或者說(shuō),導(dǎo)入并使用你需要的代碼,而不需要它們。
任何集成都被設(shè)計(jì)得被易于使用(用依賴關(guān)系),你可以用和路徑操作相同的結(jié)構(gòu)和語(yǔ)法,在兩行代碼中為你的應(yīng)用創(chuàng)建一個(gè)“插件”。
FastAPI 和 Starlette 完全兼容(并基于)。所以,你有的其他的 Starlette 代碼也能正常工作。FastAPI 實(shí)際上是 Starlette的一個(gè)子類。所以,如果你已經(jīng)知道或者使用 Starlette,大部分的功能會(huì)以相同的方式工作。
通過(guò) FastAPI 你可以獲得所有 Starlette 的特性 ( FastAPI 就像加強(qiáng)版的 Starlette ):
FastAPI 和 Pydantic 完全兼容(并基于)。所以,你有的其他的 Pydantic 代碼也能正常工作。
兼容包括基于 Pydantic 的外部庫(kù), 例如用與數(shù)據(jù)庫(kù)的 ORMs, ODMs。
這也意味著在很多情況下,你可以將從請(qǐng)求中獲得的相同對(duì)象直接傳到數(shù)據(jù)庫(kù),因?yàn)樗械尿?yàn)證都是自動(dòng)的。
反之亦然,在很多情況下,你也可以將從數(shù)據(jù)庫(kù)中獲取的對(duì)象直接傳到客戶端。
通過(guò) FastAPI 你可以獲得所有 Pydantic (FastAPI 基于 Pydantic 做了所有的數(shù)據(jù)處理):
更多建議: