【Python3】FastAPIのパスパラメーターについて

2022年4月12日

おはこんばんにちは、せなです。

今回は、FastAPIの基本とも言える、パスパラメータについて解説したいと思います。

初めに

FastAPIについてとか開発環境の構築方法については↓の記事を参考にしてください。
https://senablog.com/python-fastapi-nginx/

パスパラメータとは?

FastAPIではURLパスに変数を宣言できます。
例えば以下のPGを記載して「http://127.0.0.1:8000/items/hoge」にアクセスしてみます。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_name}")
async def items(item_name):
    return {"item_name": item_name}

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

すると以下のような画面が表示されます。

item_name: hoge

「/items/hoge」を「/items/fugafuga」とかにすると「fugafuga」と表示されますね。

また、以下の様にint型などを指定することもできます。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_number}")
async def items(item_number: int):
    return {"item_number": item_number}

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

「/items/10」の様に数値を設定すれば、10が表示されます。
ただし、int型に変換できない文字などを入力すると以下の様なエラーとなりますので、注意してください。

type_error.integer

パスパラメーターにファイルパスを与える

FastAPIをサポートしているOpenAPIでは内部パスを含める書き方についてサポートしていません。
FastAPIの元であるStarletteのパスパラメーターを使用すると以下の様な書き方が好ましい様です。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/files/{file_path:path}")
async def file(file_path: str):
    return {"file_path": file_path}

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

「http://127.0.0.1:8000/files/hoge.txt」にアクセスすることで以下の様な画面が表示されます。

ファイルパス

また、ファイル内容を表示したり、ファイルのダウンロードをする方法については以下のURLに記載していますので、よければどうぞ。
https://senablog.com/python-fastapi-file-download

最後に

FastAPIの基本となるパスパラメーターについて解説してみました。
公式ドキュメントを参考にしていますので、より詳しく知りたい方は以下のURLを参考にしてくださいね。
FastAPI 公式URL: https://fastapi.tiangolo.com/

ではでは〜

FastAPI,Python

Posted by sena