FastAPI(2)- 快速入門

安裝 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:讓伺服器在更新程式碼後自動重新啟動,僅在開發時使用該選項

 

我這裡截圖的名字換了哈

 

瀏覽器訪問

//127.0.0.1:8000 

 

查看互動式 API 文檔

//127.0.0.1:8000/docs

 

查看可選的 API 文檔

//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 數據結構

//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
  • 比如://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 應用程式五部曲

  1. 導入 FastAPI
  2. 創建一個 app 實例
  3. 編寫一個路徑操作裝飾器,如 @app.get(/) 
  4. 編寫一個路徑操作函數,如  def root(): … 
  5. 運行開發伺服器,如  uvicorn main:app –reload