【FastAPI】パスパラメータとクエリパラメータ[Python]

  • URLをコピーしました!
目次

FastAPI

前回、Deta CloudにFastAPIで作成したWebAPIをデプロイする方法を解説しました。

今回はFastAPIに値を渡す方法を紹介していきます。

FastAPIに対して値を送るには「パスパラメータ」や「クエリパラメータ」なるものを使うらしいです。

それ以外に「リクエストボディ」なるものもあるらしいのですが、よく分からないのでとりあえず必要に迫られたら勉強します。

それでは始めていきましょう。

FastAPIのおさらい

まずFastAPIのおさらいからです。

FastAPIはこんな感じで書いていきます。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}

@app.get("/test2")
def test2():
    return {"Hello": "test2"}

そしてローカルで実行するには「uvicorn」でサーバーを立てて、「http://127.0.0.1:8000」にアクセスすると「@app.get(“/”)」の下の処理が行われ、「http://127.0.0.1:8000/test2」にアクセスすると「@app.get(“/test2”)」の下の処理が行われるものでした。

以下、URLを「http://127.0.0.1:8000」として解説していきますので、適宜ご自身の環境に読み替えてください。

パスパラメータ

FastAPIに値を送る一つ目の方法として「パスパラメータ」を試してみます。

パスパラメータは「http://127.0.0.1:8000」の後ろにさらに「/abc」とか「/123」というようにURLの形で値を送る方法です。

つまり「@app.get(“/”)」に対して「abc」という値を送る場合は「http://127.0.0.1:8000/abc」となりますし、「@app.get(“/test2”)」に対して「123」という値を送る場合は「http://127.0.0.1:8000/test2/123」となります。

今回は「@app.get(“/test3”)」に対してパスパラメータを設定してみます。

その場合は「@app.get(“/test3/{変数}”)」となります。

そして関数の引数に「def test3(変数)」というようにその変数を追加します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}

@app.get("/test3/{i}")
def test3(i):
    return {"Hello": f"{i}"}

これで「http://127.0.0.1:8000/test3/123」にアクセスすると「{“Hello”: “123”}」が表示されます。

ちなみに「http://127.0.0.1:8000/test3/abc」にアクセスすると「{“Hello”: “abc”}」が表示されます。

つまりこの状態では「i」に入れる値には制限がないということです。

制限をつける場合は関数の引数に「:」と型を追加します。

つまり「def test4(i: int):」とすると「int型」のみ受け付けるようになります。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}

@app.get("/test4/{i}")
def test4(i: int):
    return {"Hello": f"{i}"}

「http://127.0.0.1:8000/test4/123」にアクセスすると「{“Hello”: “123”}」が表示されます。

「http://127.0.0.1:8000/test3/abc」にアクセスするとint型じゃないよというエラーになります。

またパスパラメータは複数送ることも可能です。

その場合は「@app.get(“/test5/{変数1}/{変数2}”)」のようにスラッシュで区切って繋げていきます。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}


@app.get("/test5/{i}/{a}")
def test5(i: int, a : str):
    return {"Hello": f"{i}, {a}"}

これで「http://127.0.0.1:8000/test5/123/abc」にアクセスすると「{“Hello”: “123, abc”}」と表示されます。

クエリパラメータ

次にクエリパラメータを見ていきましょう。

クエリパラメータの場合は「http://127.0.0.1:8000?変数名=値」という形で書きます。

またこの場合、FastAPI側では「@app.get(“/test6”)」はアクセスするアドレスのみで変数は記載しません。

そして「def test6(変数名)」というように関数にのみ変数名を記載します。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}

@app.get("/test6")
def test6(i):
    return {"Hello": f"{i}"}

これで「http://127.0.0.1:8000/test6?i=123」にアクセスすると「{“Hello”:”123″}」が表示されます。

クエリパラメータの場合も関数の引数の後に「:」と型を書くことで値の制限をすることができます。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}

@app.get("/test7")
def test7(i: int):
    return {"Hello": f"{i}"}

これでint型のみを受け付けるようになります。

またパスパラメータと同じく複数のクエリパラメータを設定することも可能です。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def test1():
    return {"Hello": "World"}

@app.get("/test8")
def test8(i: int, a: str):
    return {"Hello": f"{i}, {a}"}

複数のクエリパラメータを送る場合は「&」で繋げます。

つまり今回の場合「http://127.0.0.1:8000/test8?i=123&a=abc」といった形になります。

これで「{“Hello”:”123, abc”}」と出力されます。

これで大体値を送る方法が分かってきました。

次にFastAPIで画像を送り、JavaScriptで受け取り表示したいのですが、そのためには画像をbase64という形式に変換する必要があることがわかりました。

ということで次回はPythonで画像をbase64形式に変換する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次