Prisma + Next.jsでシンプルなCRUD APIを作成する
TL;DR
O/Rマッパとしてprismaを使用して、簡単なCRUDをNext.jsと一緒に作成します。
Next.jsのセットアップ
なにはともあれNext.jsをセットアップします。
prismaのセットアップ
prismaをインストール
.envが作成され、その中にDATABASE_URLが設定されています。今回はsqlite3を使います。
.env
schemaを書きます。とりあえず、titleとcontentがあれば良さそうです。
prisma/schema.prisma
準備ができたので、データベースを起動した後、migrationをし、prisma clientのセットアップをします。
migrateをすると自動的に@prisma/clientがnode_modules配下に作成されます。明示的にnpx prisma generateをすることでも生成できます。
テーブルができているか一応チェックします。
>Postgresの場合
herokuかなんかにデプロイする気がするので、postgresを使用する場合についても書いておきます。まず、postgresをdockerで用意しておきます。頻繁にpostgresのdockerを使っているので、使用するportは15432です。
.envのDATABASE_URLを以下のように設定します。portを今回はいじっているのと、パスワード、ユーザーネームが設定されているので注意が必要です。
.env
prisma clientの設定
libs以下にprisma clientの設定を作成しておきます。どんなクエリが投げられているか一応みたいなので、logにqueryを追加しています。
CRUDできるAPIの作成
今回は単純な確認なので、メソッドの確認は行っていません。また、実際にはパスパラメタなどでIDを受け取ったほうがいいと思いますが、Next.jsでやるのは少し面倒だったので、全てデータの中で受け取っています。
Create
まず、Todoを作成するcreate-todoを作成します。
pages/api/create-todo.ts
yarn devで起動して、APIにPOSTを投げてみます。
READ
TODO LISTを取得するEND POINTを作成します。
pages/api/get-todos.ts
GETリクエストしてみます。ちゃんと作成されていることが分かります。
UPDATE
UPDATE用のAPIを作ります。
pages/api/update-todo.ts
curlでチェックします。
contentとupdatedAtがたしかに更新されています。
Delete
最後にDelete部分を実装します。
pages/api/delete-todo.ts
DELETできるか確認します。