パスパラメーター、クエリパラメーター、リクエストボディ
Pydantic で型付きパラメーターとリクエストボディのスキーマを定義します。
「パスパラメーター、クエリパラメーター、リクエストボディ」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
パスパラメータの検証
Path() を使ってパスパラメータにバリデーターを追加し、ge、le、gt、lt の制約を設定します。
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
def get_item(item_id: int = Path(ge=1, le=1000)):
return {"item_id": item_id}
# GET /items/0 → 422 (must be >= 1)クエリパラメータの検証
Query() を使用すると、クエリパラメータに検証、デフォルト値、エイリアス、説明を追加できます。
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/search")
def search(
q: str = Query(min_length=2, max_length=50),
page: int = Query(default=1, ge=1),
):
return {"q": q, "page": page}オプションのクエリパラメータ
| None = None(Python 3.10 以降)または Optional[str] = None を使用すると、クエリパラメータを省略可能にできます。
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def list_users(
dept: str | None = None,
active: bool = True
):
return {"dept": dept, "active": active}
# GET /users → dept=None, active=True
# GET /users?dept=HR&active=false1 つのクエリパラメータに対する複数の値
list[str] と Query() を使うと、1 つのクエリパラメータで値のリストを受け取れます。
from fastapi import FastAPI, Query
from typing import Annotated
app = FastAPI()
@app.get("/filter")
def filter_items(tags: Annotated[list[str], Query()] = []):
return {"tags": tags}
# GET /filter?tags=python&tags=webネストしたリクエストボディ
Pydantic モデルはネストできます。FastAPI はネストした JSON を自動的に処理します。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
address: Address
@app.post("/users")
def create_user(user: User):
return user.model_dump()Pydantic のフィールド制約
モデル内で Field() を使用すると、個々のフィールドに制約、デフォルト値、説明を追加できます。
from pydantic import BaseModel, Field
class Product(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(gt=0)
quantity: int = Field(ge=0, default=0, description="Items in stock")リクエストボディ・パス・クエリの組み合わせ
3 種類すべてのパラメータを 1 つのエンドポイントで組み合わせられます。FastAPI は位置によって区別します。パスは URL、単純な型はクエリ、モデルはボディになります。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ItemUpdate(BaseModel):
name: str
price: float
@app.put("/shops/{shop_id}/items/{item_id}")
def update_item(
shop_id: int,
item_id: int,
item: ItemUpdate,
notify: bool = False,
):
return {"shop": shop_id, "item": item_id,
"data": item.model_dump(), "notify": notify}ファイルのアップロード
UploadFile と File() を使用してファイルのアップロードを受け付けます。await file.read() で内容にアクセスできます。
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post("/upload")
async def upload(file: UploadFile = File(...)):
content = await file.read()
return {"filename": file.filename, "size": len(content)}フォームデータ
Form() を使用して HTML フォームデータ(application/x-www-form-urlencoded または multipart/form-data)を受け付けます。
# pip install python-multipart
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login")
def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}リクエスト検証のまとめ
FastAPI はすべてのパラメータ型を自動的に検証します。入力が無効な場合、ハンドラーが呼び出される前に詳細なエラーを含む HTTP 422 を返します。
# Auto-validated:
# - Path params: type coercion, Path() constraints
# - Query params: Query() constraints, type coercion
# - Request body: Pydantic model validation
# - All errors → HTTP 422 Unprocessable Entity
# - No manual validation neededエイリアスと非推奨化
Query() または Field() で alias= を使用すると、リクエスト内で別の名前を受け付けられます。deprecated=True を指定すると古いパラメータとしてマークできます。
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items")
def get_items(
q: str | None = Query(default=None, alias="search-query"),
old: str | None = Query(default=None, deprecated=True),
):
return {"q": q, "old": old}
# GET /items?search-query=python確認問題
FastAPI は、パスパラメータ、クエリパラメータ、リクエストボディをどのように区別しますか。
復習
パラメータの制約には Path()/Query() を使用します。複雑なボディには Pydantic モデルをネストします。パス、クエリ、ボディのパラメータは自由に組み合わせられます。UploadFile はファイルを、Form() は HTML フォームを処理します。FastAPI はハンドラーが実行される前にすべてを検証します。
よくある質問
「パスパラメーター、クエリパラメーター、リクエストボディ」レッスンは無料ですか?
はい。「パスパラメーター、クエリパラメーター、リクエストボディ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「パスパラメーター、クエリパラメーター、リクエストボディ」で何を学びますか?
Pydantic で型付きパラメーターとリクエストボディのスキーマを定義します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「パスパラメーター、クエリパラメーター、リクエストボディ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- FastAPI プロジェクトのセットアップと最初のエンドポイント
- パスパラメーター、クエリパラメーター、リクエストボディ
- 依存性注入と認証
- 非同期エンドポイントとデータベース連携