【FastAPI 教學】#02 建立第一個 API

測驗:FastAPI 教學 #02 建立第一個 API

共 5 題,點選答案後會立即顯示結果

1. 建立 FastAPI 應用程式需要安裝哪兩個套件?

  • A. flask 和 gunicorn
  • B. fastapi 和 uvicorn
  • C. django 和 uwsgi
  • D. fastapi 和 gunicorn

2. 在以下指令中,main:app 代表什麼意思?

uvicorn main:app –reload
  • A. main 是主函式名稱,app 是應用程式版本
  • B. main 是伺服器名稱,app 是端口設定
  • C. main 是檔案名稱(main.py),app 是 FastAPI 實例變數名稱
  • D. main 是資料夾名稱,app 是設定檔名稱

3. FastAPI 自動生成的 Swagger UI 文件位於哪個網址?

  • A. /api
  • B. /docs
  • C. /swagger
  • D. /api-docs

4. 以下程式碼中,@app.get("/") 的作用是什麼?

@app.get(“/”) def read_root(): return {“message”: “Hello, World!”}
  • A. 定義一個名為 get 的函式
  • B. 匯入 GET 模組
  • C. 設定應用程式的根目錄路徑
  • D. 告訴 FastAPI 當收到 GET 請求到 “/” 路徑時,執行下面的函式

5. 啟動伺服器時加上 --reload 參數的好處是什麼?

  • A. 提高伺服器效能
  • B. 自動清除快取
  • C. 檔案修改後自動重啟伺服器
  • D. 啟用 HTTPS 連線

前言

上一篇我們了解了為什麼 FastAPI 值得學習。這篇文章將帶你從零開始,安裝必要套件、建立第一個 API、並使用自動生成的文件來測試它。

環境建置

首先,我們需要安裝兩個套件:

# 使用 uv(推薦)
uv pip install fastapi uvicorn

# 或使用 pip
pip install fastapi uvicorn
Code language: PHP (php)

這段程式碼在做什麼?

  • fastapi:核心框架,提供路由、請求處理等功能
  • uvicorn:ASGI 伺服器,負責接收 HTTP 請求並傳給 FastAPI 處理

你可以把 FastAPI 想像成餐廳的廚房,而 Uvicorn 是門口的服務生,負責接待客人(HTTP 請求)並把訂單送進廚房。

Hello World 範例

建立一個檔案 main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}
Code language: JavaScript (javascript)

逐行解讀:

程式碼 說明
from fastapi import FastAPI 從 fastapi 套件匯入 FastAPI 類別
app = FastAPI() 建立一個 FastAPI 應用程式實例
@app.get("/") 裝飾器,表示這個函式處理 GET 請求到 “/” 路徑
def read_root(): 定義處理函式,名稱可自訂
return {"message": "Hello, World!"} 回傳字典,FastAPI 自動轉成 JSON

關於 @app.get("/")

這是 Python 的裝飾器(decorator)語法。@app.get("/") 做的事情是:

  • 告訴 FastAPI:「當有人用 GET 方法請求 / 路徑時,執行下面這個函式」

啟動伺服器

在終端機執行:

uvicorn main:app --reload
Code language: CSS (css)

這個指令的結構是什麼?

部分 說明
uvicorn 啟動 ASGI 伺服器
main:app main 是檔案名稱(main.py),app 是裡面的 FastAPI 實例變數名稱
--reload 開啟熱重載,檔案修改後自動重啟伺服器

執行後你會看到類似這樣的輸出:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [12345]
INFO:     Started server process [12346]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
Code language: HTTP (http)

這表示伺服器已經在 http://127.0.0.1:8000 上運行了。

測試 API

打開瀏覽器,輸入 http://127.0.0.1:8000,你會看到:

{"message": "Hello, World!"}
Code language: JSON / JSON with Comments (json)

恭喜!你已經成功建立並運行了第一個 FastAPI 應用。

自動生成的 API 文件

FastAPI 最吸引人的功能之一,就是自動生成互動式 API 文件。

Swagger UI

打開 http://127.0.0.1:8000/docs

你會看到一個互動式的 API 文件頁面。在這裡你可以:

  • 查看所有可用的端點(endpoints)
  • 點擊展開查看詳細資訊
  • 直接在網頁上測試 API(點擊「Try it out」按鈕)

ReDoc

打開 http://127.0.0.1:8000/redoc

這是另一種風格的文件,適合閱讀和分享給其他開發者或團隊成員。

兩種文件的差異:

文件 網址 特色
Swagger UI /docs 互動式,可直接測試 API
ReDoc /redoc 閱讀友善,適合作為參考文件

熱重載開發體驗

還記得啟動時的 --reload 參數嗎?現在來體驗它的好處。

修改 main.py,新增一個端點:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}
Code language: JavaScript (javascript)

存檔後,觀察終端機:

INFO:     Detected file change in 'main.py'. Reloading...
INFO:     Started server process [12347]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
Code language: HTTP (http)

伺服器自動重啟了!你不需要手動停止再啟動。

現在訪問 http://127.0.0.1:8000/docs,你會看到新的端點已經出現在文件中。

關於新增的端點:

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}
Code language: JavaScript (javascript)
程式碼 說明
/items/{item_id} 路徑參數,{item_id} 是變數
item_id: int 型別提示,FastAPI 會自動驗證並轉換為整數

試試訪問 http://127.0.0.1:8000/items/42,你會得到:

{"item_id": 42}
Code language: JSON / JSON with Comments (json)

如果訪問 http://127.0.0.1:8000/items/abc(非數字),FastAPI 會自動回傳錯誤訊息:

{
  "detail": [
    {
      "type": "int_parsing",
      "loc": ["path", "item_id"],
      "msg": "Input should be a valid integer, unable to parse string as an integer",
      "input": "abc"
    }
  ]
}
Code language: JSON / JSON with Comments (json)

這就是 FastAPI 的型別驗證,完全自動處理!

重點整理

項目 內容
安裝套件 fastapi(框架)+ uvicorn(伺服器)
建立應用 app = FastAPI()
定義端點 @app.get("/path") 裝飾器 + 處理函式
啟動伺服器 uvicorn main:app --reload
API 文件 /docs(Swagger UI)、/redoc(ReDoc)
熱重載 --reload 參數,修改檔案自動重啟

下一步

現在你已經能夠建立和運行 FastAPI 應用了。下一篇我們將深入了解路由與路徑參數的更多用法,包括查詢參數和請求體的處理。

進階測驗:FastAPI 教學 #02 建立第一個 API

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 你建立了一個 FastAPI 應用並命名為 server.py,裡面的 FastAPI 實例變數名為 api。要啟動這個伺服器並開啟熱重載,應該執行哪個指令? 情境題

  • A. uvicorn server:app –reload
  • B. python server.py –reload
  • C. uvicorn server:api –reload
  • D. fastapi run server.py

2. 小明想要建立一個接受使用者 ID 的端點,讓 FastAPI 自動驗證 ID 必須是整數。以下哪種寫法是正確的? 情境題

  • A. @app.get("/users/{user_id}") 搭配 def get_user(user_id):
  • B. @app.get("/users/{user_id}") 搭配 def get_user(user_id: int):
  • C. @app.get("/users/<int:user_id>") 搭配 def get_user(user_id):
  • D. @app.get("/users/user_id") 搭配 def get_user(user_id: int):

3. 你的同事想要查看 API 的詳細文件並直接在網頁上測試端點。你應該建議他打開哪個網址? 情境題

  • A. /docs(Swagger UI,可直接測試)
  • B. /redoc(ReDoc,適合閱讀但無法測試)
  • C. /(根路徑,顯示首頁)
  • D. /openapi.json(原始 JSON 格式)

4. 小華執行以下程式碼後訪問 /items/hello,卻收到錯誤訊息。最可能的原因是什麼? 錯誤診斷

@app.get(“/items/{item_id}”) def read_item(item_id: int): return {“item_id”: item_id}
  • A. 路徑參數名稱 item_id 不正確
  • B. “hello” 無法轉換為整數,FastAPI 自動驗證失敗
  • C. 缺少 return 語句
  • D. 需要先安裝額外的驗證套件

5. 小明啟動伺服器後看到以下輸出,但在瀏覽器輸入 localhost:8000 卻無法連線。問題可能出在哪裡? 錯誤診斷

INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [12345] INFO: Application startup complete.
  • A. 伺服器啟動失敗
  • B. 缺少 –reload 參數
  • C. FastAPI 實例名稱錯誤
  • D. 伺服器正常運行,可能是瀏覽器、防火牆或其他網路問題

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *