作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
一、依賴項
Python 3.6+
FastAPI 站在這些巨人的肩膀上
可選依賴項:
Pydantic需要:
ujson
- 比較快的 JSON 解析.email_validator
- email 校驗.
Starlette需要:
requests
-TestClient 需要
.aiofiles
-FileResponse
或者StaticFiles 需要
.jinja2
- 缺省模板配置需要.python-multipart
- 表單解析需要.itsdangerous
-SessionMiddleware
支持需要.pyyaml
- Starlette'sSchemaGenerator
支持需要.graphene
-GraphQLApp
支持需要.ujson
-UJSONResponse 需要
.
FastAPI / Starlette需要:
你可以通過以下命令安裝以上所有安裝包:
pip install fastapi[all]
二、安裝
1、pip install fastapi
2、我們需要一個ASGI服務器,可以使用 Uvicorn 或 Hypercorn。
pip install uvicorn
三、示例
1、新建文件main.py
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
或者使用async定義函數:

from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
2、運行
uvicorn main:app --reload
輸出結果:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
關於命令
的解釋:
main
: 文件main.py
(Python "模塊").app
:main.py
創建的實例app = FastAPI()
.--reload
: 代碼有改動時服務會自動重啟(僅適用於開發環境)
3、接口訪問
在瀏覽器中訪問地址:http://127.0.0.1:8000/items/5?q=somequery
我們可以看到響應結果:
{"item_id": 5, "q": "somequery"}
4、我們實際上實現了具有以下功能的一個API:
- 接收以下路徑的HTTP請求:
/
和/items/{item_id}
. - 這兩個路徑都接收GET請求.
- 路徑
/items/{item_id}
具有一個路徑參數item_id
並且類型必須為int
. - 路徑
/items/{item_id}
具有一個可選的查詢參數 q 並且類型必須為 str.
四、交互式API文檔
我們訪問以下兩個地址,可獲取自動生成的交互式API文檔,並且當代碼改動時文檔會自動更新。方便我們的開發調試。
1、http://127.0.0.1:8000/docs (基於 Swagger UI)
2、http://127.0.0.1:8000/redoc (基於 ReDoc)