
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サービス作りの流れが理解しやすくなりますよ!
