PythonでWebアプリケーションを構築する際に、APIエンドポイントの定義に便利なのが @app.get()
デコレーターです。
特に FastAPI
で使用されるこの構文は、HTTP GET リクエストを受け取るルーティングを簡潔に定義できるという特徴があります。
この記事では、@app.get()
の基本的な意味から使い方、引数のオプション、活用シーン、注意点までをわかりやすく丁寧に解説します。
@app.get とは?
@app.get()
は、「このURLにアクセスされたら、この関数を実行してください」 というルールを作るための仕組みです。
Webアプリは、ブラウザやアプリから送られてくるリクエストを受け取り、その内容に応じて処理を返します。
@app.get()
を関数の直前に書いておくと、その関数は HTTP GETリクエスト専用の入り口 になります。
たとえば「住所を指定したらその場所にあるお店を案内する地図アプリ」のように、
「このURL(住所)にアクセスされたら、この処理を実行」という道しるべを作るイメージです。
基本の使い方
FastAPIでの最も基本的な使い方は以下の通りです。
1 2 3 4 5 6 7 8 |
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"message": "Hello World"} |
このコードの意味は次の通りです:
app = FastAPI()
:FastAPIのアプリケーションインスタンスを作成@app.get("/")
:ルートパス(/
)へのGETリクエストが来たらread_root()
を呼び出すreturn
された値がJSONとしてレスポンスになる
このように非常に簡潔な構文でAPIサーバーが構築できます。
具体例①:クエリパラメータの利用
1 2 3 4 |
@app.get("/items/") def read_item(q: str = None): return {"q": q} |
/items/?q=example
のように q
というクエリパラメータを受け取って、その値を返しています。
read_item
関数の引数 q: str = None
が、クエリパラメータを受け取る部分です。
例えば /items/?q=example
にアクセスすると、q
には "example"
という文字列が入ります。
もしクエリパラメータが指定されなければ、デフォルトの None
になります。
つまり
q: str = None
→ URLから渡されたq
というキーの値を受け取るreturn {"q": q}
→ 受け取った値をそのままレスポンスとして返す
という流れになっています。
具体例②:パスパラメータの利用
1 2 3 4 |
@app.get("/users/{user_id}") def read_user(user_id: int): return {"user_id": user_id} |
このコードでは @app.get("/users/{user_id}")
の {user_id}
がパスパラメータを示しています。
アクセス例 /users/10
の場合:
-
URLの
10
がuser_id
に渡される -
user_id: int
と型を指定しているので、自動的に整数に変換される -
関数内で
{"user_id": user_id}
を返すので、結果は{"user_id": 10}
になる
FastAPIが「URLの一部 {user_id}
と関数の引数 user_id
を自動で対応付けて」くれる仕組みです。
@app.get の主なオプション引数
@app.get()
では、エンドポイントに関する色々な設定をすることができます。
「このURLで呼ばれたときにどう動くか」「ドキュメントにどう表示されるか」を調整するためのものです。
代表的なものを説明すると次の通りです。
オプション名 | 説明 | 例 |
---|---|---|
path | エンドポイントのURLパスを指定する | /items/ と書けば、http://localhost:8000/items/ (ローカル開発環境の場合)にアクセスしたときに関数が呼ばれます。 |
response_model | 返すデータの「型」を指定(pydanticモデル)レスポンス形式を自動検証&ドキュメントに反映 | response_model=Item |
tags | Swagger UI でカテゴリ分けするラベル | tags=["user"] → ドキュメントで「user」カテゴリにまとめられる |
summary | エンドポイントの一言説明。Swagger UI の見出しに表示される | summary="商品情報の取得" |
description | 詳しい説明。Markdown対応で箇条書きやコード例も書ける | description="1つの商品情報を返します" |
status_code | デフォルトで返すHTTPステータスコードを指定 | status_code=201 → 成功時に 201 Created を返す |
以下はそれらを組み合わせた例です:
1 2 3 4 5 6 7 8 9 10 |
from pydantic import BaseModel class Item(BaseModel): name: str price: float @app.get("/item", response_model=Item, summary="商品情報の取得", description="1つの商品情報を返します") def get_item(): return Item(name="ペン", price=120.5) |
この例では response_model
、summary
、description
などのオプションを同時に指定しています。
-
response_model=Item
→Item
という pydanticモデル を指定しています。これにより、返すデータが必ず{"name": str, "price": float}
という形式になることが保証されます。
型が違う値を返そうとするとエラーになるので、安全で信頼性の高いAPIを作れます。 -
summary="商品情報の取得"
→ APIの概要説明で、Swagger UI の一覧に「商品情報の取得」と表示されます。 -
description="1つの商品情報を返します"
→ より詳細な説明を記載できます。Markdown対応なので改行や箇条書きも可能です。
このようにオプションを付けることで、 Swagger UI(自動生成されるドキュメント) で分かりやすいAPI仕様書が出来上がります。
開発者同士の共有や外部公開APIの設計にとても便利です。
活用シーン
@app.get()
は、Web API の開発でとても多くの場面で使われます。具体的には次のようなケースです。
- APIサーバーのGETエンドポイント実装
- 外部サービスからのWebhookやPing応答
- スマホアプリやフロントエンドからのデータ取得要求に応じる
- クエリパラメータでフィルタ検索を行う
curl
やブラウザのURL入力
から直接テスト可能
このように、 シンプルにデータを取得したいときの基本構文 として使えます。
@app.get()
を使うことでエンドポイントが非常に簡潔に実装でき、デバッグや保守もしやすくなります。
注意点
便利な @app.get()
ですが、使うときにはいくつか気をつけるべきポイントがあります。
- 同じURLパスに対して
@app.get
と@app.post
を混在させる場合、HTTPメソッドの違いに注意が必要です。 - 複数のルートで同じパスやパラメータ名を使うとバッティングすることがあるため、ルーティング設計は慎重に行いましょう。
- クエリパラメータとパスパラメータは同時に使うことも可能ですが、意図しない挙動にならないように検証が必要です。
- 関数の戻り値は、基本的にJSONとして自動変換されます。Pythonの辞書やpydanticモデルを返すのが推奨されます。
使いやすいけど、設計を誤ると混乱しやすいので、URL設計やパラメータの扱いはきちんと整理して使うことが大切です。
まとめ
今回は主に FastAPI でよく使われる @app.get()
の基本と応用について解説しました。
まとめると、次のポイントが大事です。
@app.get()
は「GETリクエストに対応する関数を登録するための仕組み」- URLと処理を簡単に結びつけることができる
- クエリパラメータやパスパラメータを受け取ることもできる
- 返すデータの型(モデル)を指定できて、ドキュメントにも自動で反映される
- APIの説明書(Swagger UI)が自動生成されるので、作ったAPIをすぐ確認できる
@app.get()
を使えば、「このURLにアクセスしたら、この処理をする」というルールを数行で書ける ようになります。
難しい設定なしで、すぐにWeb APIを作って試せるのが大きな魅力です。
初心者の方も、まずは「@app.get()
でURLと関数をつなげる」ことから始めると、Webサービス作りの流れが理解しやすくなりますよ!