之前一直用Flask,今年看到這個FastAPI框架,感覺還不錯,體驗了下,很容易就入門。
開始學習
FastAPI特點
官方描述
從官方的描述來看,有以下特點:
- 高性能,與NodeJS和Go相當,最快的Python 框架之一。
- 快速編寫代碼:將功能開發的速度提高大約200%至300%。
- 更少的錯誤:減少約40%的人為錯誤(開發人員)
- 直觀:強大的編輯器支持,花費調試時間更少。
- 簡易:旨在易于使用和學習, 減少閱讀文檔的時間。
- 簡短:減少代碼重復
- 穩定健壯:獲取可用于生產環境的代碼, 具有自動交互式文檔。
- 標準化: 基于(并完全兼容)API的開放標準:OpenAPI(以前稱為Swagger)和JSON模式。
版本要求
Python 3.6+
安裝
$ pip install fastapi
$ pip install uvicorn
入門例子
# 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}
如果是異步,可以這么寫:
# main.py
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}
啟動方式
$ uvicorn main:app --reload --port 18080
參數說明:
- main: main.py 文件(也可理解為Python模塊).
- app: main.py 中app = FastAPI()語句創建的app對象.
- --reload: 在代碼改變后重啟服務器,只能在開發的時候使用
- 默認端口是8000,可以使用`--port`來指定其他端口
啟動后輸出:
INFO: Uvicorn running on http://127.0.0.1:18080 (Press CTRL+C to quit)
INFO: Started reloader process [19071]
INFO: Started server process [19091]
INFO: Waiting for application startup.
INFO: Application startup complete.
可以看到服務已經啟動,訪問路徑是http://127.0.0.1:18080 。
檢查服務是否正常
打開你的瀏覽器,輸入 http://127.0.0.1:18080 。
你將會看見JSON響應:
{"hello": "world"}
更簡單的啟動
#myapi.py
import uvicorn
if __name__ == "__main__":
uvicorn.run("myapi:app", host="127.0.0.1", port=18080, log_level="info")
通過引入uvicorn庫,那么我們就可以跟之前運行腳本的方式一樣執行腳本就可以了。
python3 myapi.py
查看生成API的文檔
- Swagger UI風格文檔:打開你的瀏覽器,輸入 http://127.0.0.1:18080/docs 。
- ReDoc風格文檔打開你的瀏覽器,輸入 http://127.0.0.1:18080/redoc 。
由于對外暴露文檔,也是比較危險,那么我可不可以關閉API文檔,答案是可以的,我們可以加一些參數來屏蔽它。
app = FastAPI(docs_url=None, openapi_url=None, redoc_url=None)
當你再次訪問文檔鏈接,會提示:
{"detail":"Not Found"}
是不是很簡單,通過這個框架可以快速的完成接口。當然它還有更多的特性,這里就不展開了,有興趣的可以自行查閱深入學習。