python+uvicorn+fastapi
背景
使用python的同學,有沒有因為不知道用什么接口來測試自己的代碼而郁悶?這里我們使用python+uvicorn+fastapi
來寫一些接口DEMO,DEMO中的接口可能包含form-data、x-www-form-urlencoded、json的等等。
安裝和運行
安裝
pip install fastapi
FastAPI
是一個為你的 API 提供了所有功能的 Python 類
ASGI 服務器,生產環境可以使用 Uvicorn
pip install uvicorn[standard]
示例
__author__ = 'kangpc'
__date__ = '2021-6-27 22:51'
from typing import Optional
import uvicorn
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: Optional[str] = None):
return {"item_id": item_id, "q": q}
詳細解釋:
@app.get("/items/{item_id}")
路徑操作裝飾器,告訴fastapi在該裝飾器下方的read_item函數是負責處理如下請求的:
- 請求路徑為/items/{item_id}
- 使用get操作
def read_item(item_id: int, q: Optional[str] = None)
read_item函數有兩個參數item_id,q,且item_id是int型且必填,q是字符串類型且默認值為None的可選參數
`return {"item_id": item_id, "q": q}`
return的對象就是返回內容reponse ,你可以返回一個 dict
、list
,像 str
、int
一樣的單個值等等。
啟動server兩個方式
1.命令行啟動
D:\myproject\20210622\test_server>uvicorn example:app --port 8002 --reload
INFO: Started server process [32504]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8002 (Press CTRL+C to quit)
example:example.py 文件(一個 Python "模塊")。
app:在 main.py 文件中通過 app = FastAPI() 創建的對象。
--reload:讓服務器在更新代碼后重新啟動。僅在開發時使用該選項。
2.代碼里面寫main函數,在main函數里指定app、主機、端口,直接運行代碼啟動
if __name__ == '__main__':
uvicorn.run(app='example:app', host="127.0.0.1", port=8001, reload=True, debug=True)
運行起來后,因為示例是get請求,可以直接在瀏覽器看一下效果:
瀏覽器輸入http://127.0.0.1:8002/items/100?q=1 回車,你會看到頁面顯示的返回內容為:
{"item_id":100,"q":"1"}
引用官方的總結
- 導入
FastAPI
。 - 創建一個
app
實例。 - 編寫一個路徑操作裝飾器(如
@app.get("/")
)。 - 編寫一個路徑操作函數(如上面的
def root(): ...
)。 - 運行開發服務器(如
uvicorn main:app --reload
)。
交互式 API 文檔
[swagger-ui]: (http://127.0.0.1:8002/docs)
寫好接口后,框架自動生成fastapi swagger-ui文檔,灰常好用。
可選依賴
用於 Pydantic:
ujson
- 更快的 JSON 「解析」。email_validator
- 用於 email 校驗。
用於 Starlette:
requests
- 使用TestClient
時安裝。aiofiles
- 使用FileResponse
或StaticFiles
時安裝。jinja2
- 使用默認模板配置時安裝。python-multipart
- 需要通過request.form()
對表單進行「解析」時安裝。itsdangerous
- 需要SessionMiddleware
支持時安裝。pyyaml
- 使用 Starlette 提供的SchemaGenerator
時安裝(有 FastAPI 你可能並不需要它)。graphene
- 需要GraphQLApp
支持時安裝。ujson
- 使用UJSONResponse
時安裝。
用於 FastAPI / Starlette:
你可以通過 pip install fastapi[all]
命令來安裝以上所有依賴。