簡単でタイプセーフなデータベースアクセス
Fastify サーバーで

FastifyアプリでMySQL、PostgreSQL、SQL ServerデータベースからPrismaを使ってデータクエリ – JavaScriptとTypeScriptのためのより良いORM。

tech

Prismaとは?

Prismaはデータ操作を容易にします!タイプセーフなNode.js & TypeScript ORM、グローバルデータベースキャッシュ、接続プーリング、リアルタイムデータベースイベントを提供します。

クエリ
// Creating a new record
await prisma.user.create({
firstName: “Alice”,
email: “alice@prisma.io”
})
テーブル
id firstName email
1 Bobby bobby@tables.io
2 Nilufar nilu@email.com
3 Jürgen jums@dums.edu
4 Alice alice@prisma.io

PrismaとFastifyの連携

Prisma ORMは、Fastifyサーバーでデータベースをクエリするために使用される次世代ORMです。生のSQLクエリ、knex.jsのようなクエリビルダー、またはTypeORM、MikroORM、Sequelizeのような従来のORMの代替として使用できます。Prisma ORMは、RESTおよびGraphQL APIを構築するために使用でき、マイクロサービスとモノリシックアーキテクチャの両方とスムーズに統合できます。

Prisma ORMの利用をさらに強化するために、追加のツールもご利用いただけます。
Prisma Accelerateは、データベースクエリを高速化するグローバルデータベースキャッシュおよびスケーラブルな接続プールです。
Prisma Pulseを使用すると、タイプセーフな方法でリアクティブなリアルタイムアプリケーションを構築できます。

PrismaとFastifyのコード例

Prismaは、Fastifyと完璧に統合する便利なデータベースアクセスレイヤーを提供します。

以下のコードは、APIサーバーを構築するためにFastifyを使用する際のPrismaのさまざまな使用例を示しています。

REST API

REST API

Prismaは、データベース内のデータを読み書きするために、ルートハンドラー内で使用されます。

1import fastify from 'fastify'
2import { PrismaClient } from '@prisma/client'
3
4const prisma = new PrismaClient()
5const app = fastify()
6
7app.get('/feed', async (req, res) => {
8 const posts = await prisma.post.findMany({
9 where: { published: true },
10 include: { author: true },
11 })
12 res.json(posts)
13})
14
15app.post('/post', async (req, res) => {
16 const { title, content, authorEmail } = req.body
17 const post = await prisma.post.create({
18 data: {
19 title,
20 content,
21 published: false,
22 author: { connect: { email: authorEmail } },
23 },
24 })
25 res.json(post)
26})
27
28app.put('/publish/:id', async (req, res) => {
29 const { id } = req.params
30 const post = await prisma.post.update({
31 where: { id },
32 data: { published: true },
33 })
34 res.json(post)
35})
36
37app.delete('/user/:id', async (req, res) => {
38 const { id } = req.params
39 const user = await prisma.user.delete({
40 where: {
41 id,
42 },
43 })
44 res.json(user)
45})
46
47app.listen(3000)
FastifyプラグインでのPrisma
GraphQL API
Prismaスキーマ

REST API

Prismaは、データベース内のデータを読み書きするために、ルートハンドラー内で使用されます。

1import fastify from 'fastify'
2import { PrismaClient } from '@prisma/client'
3
4const prisma = new PrismaClient()
5const app = fastify()
6
7app.get('/feed', async (req, res) => {
8 const posts = await prisma.post.findMany({
9 where: { published: true },
10 include: { author: true },
11 })
12 res.json(posts)
13})
14
15app.post('/post', async (req, res) => {
16 const { title, content, authorEmail } = req.body
17 const post = await prisma.post.create({
18 data: {
19 title,
20 content,
21 published: false,
22 author: { connect: { email: authorEmail } },
23 },
24 })
25 res.json(post)
26})
27
28app.put('/publish/:id', async (req, res) => {
29 const { id } = req.params
30 const post = await prisma.post.update({
31 where: { id },
32 data: { published: true },
33 })
34 res.json(post)
35})
36
37app.delete('/user/:id', async (req, res) => {
38 const { id } = req.params
39 const user = await prisma.user.delete({
40 where: {
41 id,
42 },
43 })
44 res.json(user)
45})
46
47app.listen(3000)

PrismaとFastifyを選ぶ理由?

柔軟なアーキテクチャ

マイクロサービスまたはモノリシックアプリを構築している場合でも、Prismaはスタックに完璧にフィットします。

高い生産性

Prismaは、データベースクエリのオートコンプリート、優れた開発者体験、完全なタイプセーフを提供します。

タイプセーフなデータベースクライアント

Prisma Clientは、JavaScriptでもオートコンプリートのような利点を持つ、完全にタイプセーフなデータベースクエリを保証します。

直感的なデータモデリング

Prismaの宣言的モデリング言語はシンプルで、データベーススキーマを直感的に記述できます。

簡単なデータベースマイグレーション

宣言的なPrismaスキーマから、予測可能でカスタマイズ可能なSQLマイグレーションを生成します。

API構築のために設計

Prisma Clientは、一般的なAPI機能(例:ページネーション、フィルターなど)のクエリを提供することで、ボイラープレートを削減します。

注目のPrisma & Fastifyの例

Fastify、Mercurius、Prismaを使用したGraphQL APIの監視

本番環境でのトラブルシューティングに役立つだけでなく、GraphQLサーバーの安定した運用を確保するためのプラクティスを探ります。

Fastify REST APIスターターキット

SQLiteデータベースを使用したREST APIのすぐに実行できるサンプルプロジェクト

Fastify GraphQL APIスターターキット

PostgreSQLデータベースを使用したGraphQL APIのすぐに実行できるサンプルプロジェクト