【Python3】FastAPIのクエリパラメーターについて

2022年4月13日

おはこんばんにちは、せなです。
今回はクエリパラメーターの使いかたについて説明したいと思います。

クエリパラメーターとは?

パスパラメーターでは「/items/{hoge}」の様にURLパス内に変数を設定していました。
パスパラメーターについてはコチラ

クエリパラメーターは「/items?item_name="hoge"&item_number=1」の様に「?」と「&」で繋いでいく変数のことを言います。

以下のPGを記載して「http://127.0.0.1:8000/items?item_count=10&item_number=1」にアクセスしてみましょう。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/items")
async def items(item_count: int = 1, item_number: int = 0):
    return f"商品番号: {item_number}, 在庫: {item_count}"

if __name__ == "__main__":
    uvicorn.run("main:app", port=8000)

以下の様な画面が表示されていると思います。
与える数を変更すれば自由に番号も在庫も変更できますね。

クエリパラメーターテスト

また、クエリパラメーターは右記の様に無視して接続することもできます。「http://127.0.0.1:8000/items
その場合はデフォルトで設定している値が使用されます。

複数パスパラメーターとクエリパラメーターについて

複数のパスパラメーターとクエリパラメーターを同時に宣言することもできます。

以下を記載してみましょう。
複数のパスとクエリパラメーターが使用されていますね。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/users/{user_id}/items/{item_id}")
async def user_item(
    user_id: int, item_id: str, user_name: str = None, item_name: str = None, item_sold: bool = False
):
    item_info = {"item_id": item_id, "user_id": user_id}
    if user_name:
        item_info.update({"user_name": user_name})
    if item_name:
        item_info.update({"item_name": item_name})
    if item_sold:
        item_info.update({"sold_out": "売り切れ"})
    return item_info

if __name__ == "__main__":
    uvicorn.run("main:app", port=8000)

http://127.0.0.1:8000/users/1/items/2?user_name="hoge"&item_name="fuga"&item_sold=true
にアクセスすると以下の様な画面が表示されると思います。

複数のパスパラメーターとクエリパラメーター

最後に

クエリパラメータについては以上です。
使い方は難しいものではないですが、割と使用頻度は高いのでうまく使える様になりたいですね。

ではでは〜

FastAPI,Python

Posted by sena