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形式に変換する方法を紹介します。
ではでは今回はこんな感じで。
コメント