FastAPI + Prisma で REST API を作る
FastAPI + Prisma で REST API を作る
Python で REST API を作りたい場合、FastAPI と Prisma を組み合わせると非常に効率的に開発を進められます。本記事では、FastAPI と Prisma を使って簡単な REST API を作成する方法を解説します。
Python で REST API を作る際、ORM として SQLAlchemy を使うことが一般的ですが、あまり知られていないもののPython でも Prisma が使えます。Prisma は Node.js や TypeScript などで広く使われている ORM ですが、Python 用のクライアントライブラリとして Prisma Client Python が開発されています。
Prisma Client Python を使えば、Prisma の型安全性や自動生成される移行ファイルなどの利点を Python でも活用できます。本記事では、FastAPI と Prisma Client Python を組み合わせて簡単な REST API を作成する方法を解説します。
環境構築
まず、rye
を使ってプロジェクトを初期化し、必要なパッケージをインストールします。
rye init fastapi-prisma-test
cd fastapi-prisma-test
rye add fastapi "uvicorn[standard]" prisma
rye sync
rye shell
データベース設定
.env
ファイルを作成し、データベースの接続 URL を設定します。今回は SQLite を使用します。
DATABASE_URL=file:data/database.db
次に、Prisma のスキーマファイルを prisma/schema.prisma
に作成します。
generator client {
provider = "prisma-client-py"
recursive_type_depth = 5
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model Message {
id String @id @default(uuid())
text String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
スキーマファイルを作成したら、マイグレーションを実行します。
prisma migrate dev
FastAPI アプリケーションの作成
server.py
ファイルを作成し、FastAPI アプリケーションを実装します。
from fastapi import FastAPI
from prisma import Prisma
app = FastAPI()
prisma = Prisma()
@app.on_event("startup")
async def startup():
await prisma.connect()
@app.on_event("shutdown")
async def shutdown():
await prisma.disconnect()
@app.get("/")
def index():
return {"message": "Hello, World!"}
@app.post("/message")
async def add_message(message: str):
return await prisma.message.create(data={"text": message})
@app.get("/message")
async def get_messages(take: int = 10):
message_count = await prisma.message.count()
messages = await prisma.message.find_many(take=take)
return {"message_count": message_count, "messages": messages}
@app.get("/message/{id}")
async def get_message(id: str):
return await prisma.message.find_first(where={"id": id})
ここでは、以下のエンドポイントを実装しています。
-
GET /
: "Hello, World!" メッセージを返します。 -
POST /message
: 新しいメッセージを作成します。 -
GET /message
: メッセージの一覧を取得します。 -
GET /message/{id}
: 特定のメッセージを取得します。
また、FastAPI の startup
および shutdown
イベントを使用して、アプリケーションの起動時と終了時に Prisma クライアントの接続と切断を行っています。
アプリケーションの起動
pyproject.toml
ファイルに以下のスクリプトを追加します。
[tool.rye.scripts]
start = { cmd = 'uvicorn server:app --reload' }
これで、以下のコマンドでアプリケーションを起動できます。
rye run start
http://localhost:8000/docs
にアクセスすると、Swagger UI で API のドキュメントを確認できます。
API の使用例
以下は、API の使用例です。
# メッセージの作成
$ curl -X POST -H "Content-Type: application/json" -d '{"message": "Hello, World!"}' http://localhost:8000/message
# メッセージの一覧取得
$ curl http://localhost:8000/message
# 特定のメッセージの取得
$ curl http://localhost:8000/message/{id}
まとめ
FastAPI と Prisma を使うことで、Python で REST API を簡単に作成できます。Prisma の型安全性と FastAPI の優れたパフォーマンスにより、効率的に開発を進められます。
上記コードを含むリポジトリはこちらです。参考になるとうれしいです。
本記事で紹介した方法を参考に、ぜひ自分だけの REST API を作ってみてください。
Discussion