aobako.net

Reflex に FastAPI のエンドポイントを生やす

November 22, 2024

普通にマニュアルにあった -> https://reflex.dev/docs/api-routes/overview/

Reflex のバックエンド部分は FastAPI で構築されており、エントリーポイントでやっているであろう app = rx.App() で作られる App インスタンスには .api でアクセスできるフィールドがある。それが FastAPI のインスタンスになっているので、app.api.add_api_route() とすることで自由にエンドポイントを生やすことができる。

ただし、/ping, /_event, _upload は reflex で予約されているらしく、上書きしてしまうと壊れる可能性があるので注意。今後のバージョンアップも見込んで /api/xxx のように一段階深い階層にしておくと良さそうだ。

例:

# main.py
import reflex as rx
from .api.echo import echo

class State(rx.State):
    ...

def index() -> rx.Component:
    ...

app = rx.App()
app.add_page(index)
app.api.add_api_route("/api/echo", methods=["POST"], endpoint=echo)

# ./api/echo.py
from pydantic import BaseModel

class EchoBody(BaseModel):
    message: str

async def echo(body: EchoBody) -> EchoBody:
    return EchoBody(message=f"echo: {body.message}")

© 2017-2024 syuni