安裝 FastAPI
pip install fastapi # 將來需要將應用程序部署到生產環境可以安裝 uvicorn 作為服務器 pip install uvicorn
最簡單的代碼栗子
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"}
運行 uvicorn 命令,啟動服務器
進到 py 文件所屬目錄的命令行
uvicorn main:app --reload
- main:main.py 文件(一個 Python「模塊」)
 - app:在 main.py 文件中通過 app = FastAPI() 創建的對象
 - --reload:讓服務器在更新代碼后自動重新啟動,僅在開發時使用該選項
 
 
我這里截圖的名字換了哈
瀏覽器訪問
http://127.0.0.1:8000

查看交互式 API 文檔
http://127.0.0.1:8000/docs

查看可選的 API 文檔
http://127.0.0.1:8000/redoc

OpenAPI
FastAPi 使用 API 的 OpenAPI 標准為所有 API 生成 schema
schema
- 是對事物的一種定義或描述
 - 它並非具體的實現代碼,而只是抽象的描述
 - 后面會詳說
 
API Schema
- OpenAPI 是一種規定如何定義 API Schema 的規范
 - 定義的 OpenAPI Schema 將包括 API 路徑,以及它們可能使用的參數等等
 - 比如:這個 API 的作用是什么,需要必傳哪些參數,請求方法是什么
 
Data Schema
- 指的是某些數據比如 JSON 的結構
 - 它可以表示 JSON 的屬性及其具有的數據類型
 - 比如:某個屬性的數據類型是什么,有沒有默認值,是不是必填,作用是什么
 
JSON Schema
- OpenAPI 會為 API 定義 API Schema,一般會包括 API 發送和接收的數據的定義,比如:發送的數據的類型、是否必填
 - 這些定義會以 JSON數據格式展示出來,所以都會稱為 JSON Schema
 
查看 openapi.json
原始的 OpenAPI Schema,其實它只是一個自動生成的包含了所有 API 描述的 JSON 數據結構
http://127.0.0.1:8000/openapi.json

拆分代碼詳解
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"}
將上面最簡單的栗子代碼進行拆開詳解
第一步:導入 FastAPI
from fastapi import FastAPI
- FastAPI 是一個為 API 提供了所有功能的 Python 類,必寫就對了
 - FastAPI 是直接從 Starlette 繼承的類,可以通過 FastAPI 使用所有的 Starlette 的功能
 
第二步:創建一個 FastAPI 實例
app = FastAPI()
- app 就是 FastAPI 類的一個實例對象啦
 - 重點:app 將是創建所有 API 的主要交互對象
 - 要點:uvicorn 執行命令時也會用到 app
 
uvicorn main:app --reload
app 變量名換一下呢?
from fastapi import FastAPI my_awesome_api = FastAPI() @my_awesome_api.get("/") async def root(): return {"message": "Hello World"}
那么用 uvicorn 運行命令時也需要換
uvicorn main:my_awesome_api --reload
第三步:創建一個路徑操作
路徑
- 指的是 URL 中從第一個 
/起的后半部分,即常說的 path - 比如:https://example.com/items/foo 的路徑就是/items/foo
 - 路徑也稱為:端點、路由
 
操作
就是 HTTP 請求方法
-  
POST
 -  
GET
 -  
PUT
 -  
DELETE
 -  
OPTIONS
 -  
HEAD
 -  
PATCH
 - TRACE
 
在 HTTP 協議中,可以使用以上的其中一種(或多種)「方法」與每個路徑進行通信
遵守 RESTFul 風格的話
通常使用:
- POST:創建數據
 - GET:讀取數據
 - PUT:更新數據
 - DELETE:刪除數據
 
定義一個路徑操作裝飾器
@app.get("/")
有兩點含義
- 請求路徑為 /
 - 使用 get 請求
 
其他請求方法的裝飾器
- @app.post()
 - @app.put()
 - @app.delete()
 - @app.options()
 - @app.head()
 - @app.patch()
 - @app.trace()
 
第四步:定義路徑操作函數
async def root(): 
        - 這就是一個普通的 Python 函數
 - 每當 FastAPI 接收一個使用 
GET方法訪問路徑為 / 的請求時這個函數會被調用 - 在這個例子中,它是一個 async 函數(異步處理函數,后面會細說)
 
# 也可以不加 async,就是個常規函數 def root():
第五步:函數返回內容
return {"message": "Hello World"}
- 可以返回一個 dict、list,也可以是 str、int 單個值
 - 還可以返回 Pydantic 模型(后面詳解)
 - 還可以是其他會自動轉換為 JSON 的對象和模型(包括 ORM 對象等)
 
FastAPI 入門總結
編寫一個最簡單的 FastAPI 應用程序五部曲
- 導入 FastAPI
 - 創建一個 app 實例
 - 編寫一個路徑操作裝飾器,如 @app.get("/") 
 - 編寫一個路徑操作函數,如  def root(): ... 
 - 運行開發服務器,如  uvicorn main:app --reload 
 
