官方文檔: https://fastapi.tiangolo.com/
1、安裝第三方庫老生常談了,使用 pip 或者 pipenv 即可安裝 FastApi:
pip install fastapi
pipenv install fastapi
2、安裝后,來創建我們的第一個 API:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def index():
return {'message': '你已經正確創建 FastApi 服務!'}
這里的寫法跟 Flask 幾乎一致。只不過在 Flask 中,我們定義路由的裝飾器為 @app.route('/')
。而這里寫為 @app.get('/')
。
寫好代碼以后,使用uvicorn來運行 FastApi。首先使用pip或者pipenv安裝uvicorn:
pip install uvicorn
pipenv install uvicorn
然后執行命令:
uvicorn main:app --reload
其中main表示我們的代碼文件為main.py,app表示我們初始化的 FastApi 對象的名字。--reload參數表示在修改了代碼以后立即生效,不需要重啟。
運行后,訪問 http://127.0.0.1:8000 可以看到接口已經正確返回了 JSON 格式的數據。
3、定義一個帶參數的 GET 方法:
@app.get('/query/{uid}')
def query(uid):
msg = f'你查詢的 uid 為:{uid}'
return {'success': True, 'msg': msg}
如果想限定 uid 只能是數字,不能是字符串怎么辦呢?你只需要多加 4 個字符:
@app.get('/query/{uid}')
def query(uid: int):
msg = f'你查詢的 uid 為:{uid}'
return {'success': True, 'msg': msg}
4、定義一個資源的 POST 方法。
在使用 Flask 的時候,我們需要手動驗證用戶 POST 提交上來的數據是什么格式的,字段對不對。
但使用 FastApi 的時候,我們只需要類型標注就能解決所有問題。首先我們導入 from pydantic import BaseModel
,然后繼承BaseModel實現我們允許 POST 方法提交上來的數據字段和格式:
from pydantic import BaseModel
app = FastAPI()
class People(BaseModel):
name: str
age: int
address: str
salary: float
People這個類通過類型標注,指定了它里面的 4 個字段和他們的類型。現在來實現 POST 方法:
@app.post('/insert')
def insert(people: People):
age_after_10_years = people.age + 10
msg = f'這個人的名字是:{people.name},十年后,此人年齡:{age_after_10_years}'
return {'success': True, 'msg': msg}
insert函數的參數people通過類型標注指定為People類型。
當我們使用 POST 方式提交數據時,FastApi 自動會以People中定義的字段為基准來校驗數據,發現不對就返回報錯信息。
另外,FastApi 會自動幫我們生成接口文檔,訪問http://127.0.0.1:8000/docs,看到接口文檔已經生成好了。