序章
Prisma は、Node.jsおよびTypeScript用のオープンソースORMです。 これは、3つの主要なツールで構成されています。
- Prisma Client :自動生成されたタイプセーフなクエリビルダー。
- Prisma Migrate :強力なデータモデリングおよび移行システム。
- Prisma Studio :データベース内のデータを表示および編集するためのGUI。
注:PrismaMigrateは現在プレビューにあります。 Prismaロードマップを介して開発をフォローできます。
これらのツールは、データベースワークフローにおけるアプリケーション開発者の生産性を向上させることを目的としています。 Prismaの最大の利点の1つは、それが提供する抽象化のレベルです。アプリケーション開発者は、複雑なSQLクエリやスキーマの移行を理解する代わりに、Prismaを使用するときにデータについてより直感的な方法で推論できます。
このチュートリアルでは、Prismaと PostgreSQL データベースを使用して、TypeScriptで小さなブログアプリケーション用のRESTAPIを構築します。 Docker を使用してPostgreSQLデータベースをローカルにセットアップし、Expressを使用してRESTAPIルートを実装します。 チュートリアルの最後に、さまざまなHTTPリクエストに応答し、データベース内のデータの読み取りと書き込みを行うことができるWebサーバーがマシン上でローカルに実行されるようになります。
前提条件
このチュートリアルでは、次のことを前提としています。
- Node.jsv10以降がマシンにインストールされています。 これを設定するには、OSのNode.jsのインストール方法とローカル開発環境の作成ガイドのいずれかを使用できます。
- Docker がマシンにインストールされています(PostgreSQLデータベースを実行するため)。 Docker Webサイトを介してmacOSおよびWindowsにインストールするか、Linuxディストリビューションの How To Install and UserDockerに従ってください。
TypeScriptおよびRESTAPIの基本的な知識は役立ちますが、このチュートリアルでは必須ではありません。
ステップ1—TypeScriptプロジェクトを作成する
このステップでは、を使用してプレーンなTypeScriptプロジェクトを設定します npm
. このプロジェクトは、このチュートリアルのコース全体で構築するRESTAPIの基盤になります。
まず、プロジェクトの新しいディレクトリを作成します。
- mkdir my-blog
次に、ディレクトリに移動して、空のファイルを初期化します npm
事業。 に注意してください -y
ここでのオプションは、コマンドの対話型プロンプトをスキップすることを意味します。 プロンプトを実行するには、を削除します -y
コマンドから:
- cd my-blog
- npm init -y
これらのプロンプトの詳細については、npmおよびpackage.jsonでNode.jsモジュールを使用する方法のステップ1に従うことができます。
デフォルトの応答が設定された状態で、次のような出力が表示されます。
OutputWrote to /.../my-blog/package.json:
{
"name": "my-blog",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
このコマンドは最小限を作成します package.json
の構成ファイルとして使用するファイル npm
事業。 これで、プロジェクトでTypeScriptを構成する準備が整いました。
プレーンなTypeScriptセットアップに対して、次のコマンドを実行します。
- npm install typescript ts-node @types/node --save-dev
これにより、プロジェクトに開発依存関係として3つのパッケージがインストールされます。
- typescript :TypeScriptツールチェーン。
- ts-node :JavaScriptに事前にコンパイルせずにTypeScriptアプリケーションを実行するためのパッケージ。
- @ types / node :Node.jsのTypeScriptタイプ定義。
最後に行うことは、 tsconfig.json ファイルを追加して、ビルドするアプリケーションに対してTypeScriptが適切に構成されていることを確認することです。
まず、次のコマンドを実行してファイルを作成します。
- nano tsconfig.json
次のJSONコードをファイルに追加します。
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
ファイルを保存して終了します。
これは、TypeScriptプロジェクトの標準の最小限の構成です。 構成ファイルの個々のプロパティについて知りたい場合は、TypeScriptドキュメントでそれらを調べることができます。
を使用してプレーンなTypeScriptプロジェクトを設定しました npm
. 次に、Dockerを使用してPostgreSQLデータベースをセットアップし、Prismaをそれに接続します。
ステップ2—PostgreSQLでPrismaを設定する
このステップでは、 Prisma CLI をインストールし、最初の Prismaスキーマファイルを作成し、Dockerを使用してPostgreSQLをセットアップし、Prismaをそれに接続します。 Prismaスキーマは、Prismaセットアップのメイン構成ファイルであり、データベーススキーマが含まれています。
次のコマンドを使用して、PrismaCLIをインストールすることから始めます。
- npm install @prisma/cli --save-dev
ベストプラクティスとして、(グローバルインストールではなく)プロジェクトにPrismaCLIをローカルにインストールすることをお勧めします。 これにより、マシンに複数のPrismaプロジェクトがある場合に、バージョンの競合を回避できます。
次に、Dockerを使用してPostgreSQLデータベースをセットアップします。 次のコマンドを使用して、新しいDockerComposeファイルを作成します。
- nano docker-compose.yml
次に、新しく作成したファイルに次のコードを追加します。
version: '3.8'
services:
postgres:
image: postgres:10.3
restart: always
environment:
- POSTGRES_USER=sammy
- POSTGRES_PASSWORD=your_password
volumes:
- postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
volumes:
postgres:
このDockerComposeファイルは、ポート経由でアクセスできるPostgreSQLデータベースを構成します 5432
Dockerコンテナの また、データベースのクレデンシャルは現在、次のように設定されていることに注意してください。 sammy
(ユーザー)と your_password
(パスワード)。 これらのクレデンシャルは、ご希望のユーザーとパスワードに合わせて自由に調整してください。 ファイルを保存して終了します。
この設定が整ったら、次のコマンドを使用してPostgreSQLデータベースサーバーを起動します。
- docker-compose up -d
このコマンドの出力は次のようになります。
OutputPulling postgres (postgres:10.3)...
10.3: Pulling from library/postgres
f2aa67a397c4: Pull complete
6de83ca23e55: Pull complete
. . .
Status: Downloaded newer image for postgres:10.3
Creating my-blog_postgres_1 ... done
次のコマンドを使用して、データベースサーバーが実行されていることを確認できます。
- docker ps
これにより、次のようなものが出力されます。
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8547f8e007ba postgres:10.3 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp my-blog_postgres_1
データベースサーバーが実行されている状態で、Prismaセットアップを作成できます。 PrismaCLIから次のコマンドを実行します。
- npx prisma init
これにより、次の出力が出力されます。
Output✔ Your Prisma schema was created at prisma/schema.prisma.
You can now open it in your favorite editor.
ベストプラクティスとして、PrismaCLIのすべての呼び出しの前にプレフィックスを付ける必要があることに注意してください npx
. これにより、ローカルインストールが使用されていることが保証されます。
コマンドを実行した後、PrismaCLIはという新しいフォルダーを作成しました prisma
あなたのプロジェクトで。 次の2つのファイルが含まれています。
schema.prisma
:Prismaプロジェクトのメイン構成ファイル(データモデルが含まれます)。.env
:データベース接続URLを定義するためのdotenvファイル。
Prismaがデータベースの場所を認識していることを確認するには、 .env
ファイルを作成して調整します DATABASE_URL
環境変数。
まず、 .env
ファイル:
- nano prisma/.env
これで、環境変数を次のように設定できます。
DATABASE_URL="postgresql://sammy:your_password@localhost:5432/my-blog?schema=public"
データベースのクレデンシャルは、DockerComposeファイルで指定したものに変更してください。 接続URLの形式の詳細については、 Prismadocsにアクセスしてください。
完了したら、ファイルを保存して終了します。
このステップでは、Dockerを使用してPostgreSQLデータベースをセットアップし、Prisma CLIをインストールし、環境変数を介してPrismaをデータベースに接続します。 次のセクションでは、データモデルを定義し、データベーステーブルを作成します。
ステップ3—データモデルの定義とデータベーステーブルの作成
このステップでは、Prismaスキーマファイルでデータモデルを定義します。 次に、このデータモデルは Prisma Migrate を使用してデータベースにマップされます。これにより、データモデルに対応するテーブルを作成するためのSQLステートメントが生成および送信されます。 ブログアプリケーションを構築しているので、アプリケーションの主なエンティティはユーザーと投稿になります。
Prismaは、独自のデータモデリング言語を使用して、アプリケーションデータの形状を定義します。
まず、 schema.prisma
次のコマンドでファイルします。
- nano prisma/schema.prisma
次に、次のモデル定義を追加します。 モデルは、ファイルの下部、ファイルの直後に配置できます。 generator client
ブロック:
. . .
model User {
id Int @default(autoincrement()) @id
email String @unique
name String?
posts Post[]
}
model Post {
id Int @default(autoincrement()) @id
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
ファイルを保存して終了します。
2つのモデルを定義しています。 User
と Post
. これらのそれぞれには、モデルのプロパティを表すいくつかのフィールドがあります。 モデルはデータベーステーブルにマップされます。 フィールドは個々の列を表します。
また、2つのモデルの間には1対多の関係があり、 posts
と author
上の関係フィールド User
と Post
. これは、1人のユーザーが多くの投稿に関連付けることができることを意味します。
これらのモデルを配置すると、PrismaMigrateを使用してデータベースに対応するテーブルを作成できるようになります。 ターミナルで次のコマンドを実行します。
- npx prisma migrate dev --name "init" --preview-feature
このコマンドは、ファイルシステムに新しいSQL移行を作成し、それをデータベースに送信します。 コマンドに提供される2つのオプションの概要は次のとおりです。
--name "init"
:移行の名前を指定します(ファイルシステム上に作成された移行フォルダーに名前を付けるために使用されます)。--preview-feature
:PrismaMigrateは現在プレビューにあるため必須です。
このコマンドの出力は次のようになります。
OutputEnvironment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": PostgreSQL database "my-blog", schema "public" at "localhost:5432"
PostgreSQL database my-blog created at localhost:5432
The following migration(s) have been created and applied from new schema changes:
migrations/
└─ 20201209084626_init/
└─ migration.sql
Running generate... (Use --skip-generate to skip the generators)
✔ Generated Prisma Client (2.13.0) to ./node_modules/@prisma/client in 75ms
のSQL移行ファイル prisma/migrations/20201209084626_init/migration.sql
ディレクトリには、データベースに対して実行された次のステートメントがあります。
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL,
"email" TEXT NOT NULL,
"name" TEXT,
PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Post" (
"id" SERIAL,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" INTEGER,
PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");
-- AddForeignKey
ALTER TABLE "Post" ADD FOREIGN KEY("authorId")REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
を追加すると、生成されたSQL移行ファイルをカスタマイズすることもできることに注意してください。 --create-only
オプション prisma migrate dev
コマンド。たとえば、トリガーを設定したり、基盤となるデータベースの他の機能を使用したりします。
このステップでは、Prismaスキーマでデータモデルを定義し、PrismaMigrateを使用してそれぞれのデータベーステーブルを作成しました。 次のステップでは、Prisma Clientをプロジェクトにインストールして、データベースにクエリを実行できるようにします。
ステップ4—プレーンスクリプトでのPrismaクライアントクエリの調査
Prisma Clientは、自動生成されたタイプセーフなクエリビルダーであり、Node.jsまたはTypeScriptアプリケーションからデータベース内のデータをプログラムで読み書きするために使用できます。 これをRESTAPIルート内のデータベースアクセスに使用し、従来のORM、プレーンSQLクエリ、カスタムデータアクセスレイヤー、またはデータベースと通信するその他の方法を置き換えます。
このステップでは、Prisma Clientをインストールし、PrismaClientで送信できるクエリについて理解します。 次のステップでRESTAPIのルートを実装する前に、まず、プレーンな実行可能スクリプトでPrismaClientクエリのいくつかを調べます。
まず、ターミナルを開いてPrisma Clientをインストールすることにより、プロジェクトにPrismaClientをインストールします。 npm
パッケージ:
- npm install @prisma/client
次に、という新しいディレクトリを作成します src
ソースファイルが含まれます:
- mkdir src
次に、新しいディレクトリ内にTypeScriptファイルを作成します。
- nano src/index.ts
Prisma Clientのクエリはすべて、の約束を返します。 await
あなたのコードで。 これには、クエリを内部に送信する必要があります async
関数。
次のボイラープレートを追加します async
スクリプトで実行される関数:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// ... your Prisma Client queries will go here
}
main()
.catch((e) => console.error(e))
.finally(async () => await prisma.disconnect())
ボイラープレートの簡単な内訳は次のとおりです。
- をインポートします
PrismaClient
以前にインストールされたコンストラクター@prisma/client
npm
パッケージ。 - あなたはインスタンス化します
PrismaClient
コンストラクターを呼び出して、というインスタンスを取得しますprisma
. - あなたは
async
と呼ばれる関数main
次に、PrismaClientクエリを追加します。 - あなたは
main
潜在的な例外をキャッチし、Prisma Clientが呼び出して、開いているデータベース接続をすべて閉じるようにします。prisma.disconnect()
.
とともに main
機能が整ったら、PrismaClientクエリをスクリプトに追加し始めることができます。 調整 index.ts
次のようになります。
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const newUser = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: {
title: 'Hello World',
},
},
},
})
console.log('Created new user: ', newUser)
const allUsers = await prisma.user.findMany({
include: { posts: true },
})
console.log('All users: ')
console.dir(allUsers, { depth: null })
}
main()
.catch((e) => console.error(e))
.finally(async () => await prisma.disconnect())
このコードでは、2つのPrismaClientクエリを使用しています。
create
:新しいを作成しますUser
記録。 実際にはネストされた書き込みを使用していることに注意してください。つまり、両方を作成していることになります。User
とPost
同じクエリで記録します。findMany
:既存のすべてを読み取りますUser
データベースからのレコード。 関連するものを追加でロードするincludeオプションを提供していますPost
それぞれの記録User
記録。
次に、次のコマンドを使用してスクリプトを実行します。
- npx ts-node src/index.ts
端末に次の出力が表示されます。
OutputCreated new user: { id: 1, email: 'alice@prisma.io', name: 'Alice' }
[
{
id: 1,
email: 'alice@prisma.io',
name: 'Alice',
posts: [
{
id: 1,
title: 'Hello World',
content: null,
published: false,
authorId: 1
}
]
}
注:データベースGUIを使用している場合は、データを確認することでデータが作成されたことを検証できます。 User
と Post
テーブル。 または、を実行してPrismaStudioでデータを探索することもできます npx prisma studio
.
これで、PrismaClientを使用してデータベースのデータを読み書きできました。 残りの手順では、その新しい知識を適用して、サンプルのRESTAPIのルートを実装します。
ステップ5—最初のRESTAPIルートを実装する
このステップでは、アプリケーションにExpressをインストールします。 Expressは、このプロジェクトでRESTAPIルートを実装するために使用するNode.jsの一般的なWebフレームワークです。 実装する最初のルートでは、APIを使用してすべてのユーザーを取得できます。 GET
リクエスト。 ユーザーデータは、PrismaClientを使用してデータベースから取得されます。
先に進み、次のコマンドを使用してExpressをインストールします。
- npm install express
TypeScriptを使用しているので、それぞれのタイプを開発の依存関係としてインストールすることもできます。 これを行うには、次のコマンドを実行します。
- npm install @types/express --save-dev
依存関係が整ったら、Expressアプリケーションをセットアップできます。
メインソースファイルをもう一度開くことから始めます。
- nano src/index.ts
次に、のすべてのコードを削除します index.ts
次のように置き換えて、RESTAPIを開始します。
import { PrismaClient } from '@prisma/client'
import express from 'express'
const prisma = new PrismaClient()
const app = express()
app.use(express.json())
// ... your REST API routes will go here
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
コードの簡単な内訳は次のとおりです。
- インポートします
PrismaClient
とexpress
それぞれからnpm
パッケージ。 - あなたはインスタンス化します
PrismaClient
コンストラクターを呼び出して、というインスタンスを取得しますprisma
. - Expressアプリを作成するには、
express()
. - 追加します
express.json()
JSONデータをExpressで適切に処理できるようにするミドルウェア。 - ポートでサーバーを起動します
3000
.
これで、最初のルートを実装できます。 への呼び出しの間に app.use
と app.listen
、次のコードを追加します。
. . .
app.use(express.json())
app.get('/users', async (req, res) => {
const users = await prisma.user.findMany()
res.json(users)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
追加したら、ファイルを保存して終了します。 次に、次のコマンドを使用してローカルWebサーバーを起動します。
- npx ts-node src/index.ts
次の出力が表示されます。
OutputREST API server ready at: http://localhost:3000
アクセスするには /users
ブラウザをhttp:// localhost:3000 /usersまたはその他のHTTPクライアントにポイントすることができます。
このチュートリアルでは、ターミナルベースのHTTPクライアントであるcurlを使用してすべてのRESTAPIルートをテストします。
注: GUIベースのHTTPクライアントを使用する場合は、PostwomanやAdvancedRESTClientなどの代替手段を使用できます。
ルートをテストするには、新しいターミナルウィンドウまたはタブを開いて(ローカルWebサーバーが実行を継続できるようにするため)、次のコマンドを実行します。
- curl http://localhost:3000/users
あなたは受け取ります User
前の手順で作成したデータ:
Output[{"id":1,"email":"alice@prisma.io","name":"Alice"}]
に注意してください posts
今回は配列は含まれていません。 これは、あなたが合格していないためです include
オプション findMany
の実装を呼び出す /users
ルート。
最初のRESTAPIルートをで実装しました /users
. 次のステップでは、残りのREST APIルートを実装して、APIに機能を追加します。
ステップ6—残りのRESTAPIルートを実装する
このステップでは、ブログアプリケーションの残りのRESTAPIルートを実装します。 最後に、Webサーバーはさまざまなサービスを提供します GET
, POST
, PUT
、 と DELETE
リクエスト。
実装するさまざまなルートの概要は次のとおりです。
HTTPメソッド | ルート | 説明 |
---|---|---|
GET |
/feed |
公開済みのすべての投稿を取得します。 |
GET |
/post/:id |
IDで特定の投稿を取得します。 |
POST |
/user |
新しいユーザーを作成します。 |
POST |
/post |
新しい投稿を作成します(ドラフトとして)。 |
PUT |
/post/publish/:id |
を設定します published 投稿のフィールド true . |
DELETE |
post/:id |
IDで投稿を削除します。 |
先に進み、残りを実装します GET
最初にルートします。
開く index.ts
次のコマンドを使用します。
- nano src/index.ts
次に、の実装に続いて次のコードを追加します /users
ルート:
. . .
app.get('/feed', async (req, res) => {
const posts = await prisma.post.findMany({
where: { published: true },
include: { author: true }
})
res.json(posts)
})
app.get(`/post/:id`, async (req, res) => {
const { id } = req.params
const post = await prisma.post.findOne({
where: { id: Number(id) },
})
res.json(post)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
ファイルを保存して終了します。
このコードは、2つのAPIルートを実装します GET
リクエスト:
/feed
:公開された投稿のリストを返します。/post/:id
:特定の投稿をIDで返します。
PrismaClientは両方の実装で使用されます。 の中に /feed
ルートの実装、すべてのPrismaクライアントフィルターを使用して送信するクエリ Post
記録する場所 published
列に値が含まれています true
. さらに、Prismaクライアントクエリは include
関連するものも取得します author
返された各投稿の情報。 の中に /post/:id
ルートの実装では、特定の読み取りのためにURLのパスから取得されたIDを渡します Post
データベースからの記録。
サーバーのヒットを停止できます CTRL+C
キーボードで。 次に、以下を使用してサーバーを再起動します。
- npx ts-node src/index.ts
テストするには /feed
ルート、あなたは以下を使用することができます curl
指図:
- curl http://localhost:3000/feed
投稿はまだ公開されていないため、応答は空の配列です。
Output[]
テストするには /post/:id
ルート、あなたは以下を使用することができます curl
指図:
- curl http://localhost:3000/post/1
これにより、最初に作成した投稿が返されます。
Output{"id":1,"title":"Hello World","content":null,"published":false,"authorId":1}
次に、2つを実装します POST
ルート。 次のコードをに追加します index.ts
3つの実装に続いて GET
ルート:
. . .
app.post(`/user`, async (req, res) => {
const result = await prisma.user.create({
data: { ...req.body },
})
res.json(result)
})
app.post(`/post`, async (req, res) => {
const { title, content, authorEmail } = req.body
const result = await prisma.post.create({
data: {
title,
content,
published: false,
author: { connect: { email: authorEmail } },
},
})
res.json(result)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
完了したら、ファイルを保存して終了します。
このコードは、2つのAPIルートを実装します POST
リクエスト:
/user
:データベースに新しいユーザーを作成します。/post
:データベースに新しい投稿を作成します。
以前と同様に、Prismaクライアントは両方の実装で使用されます。 の中に /user
ルートの実装では、HTTPリクエストの本文からPrismaクライアントに値を渡します create
クエリ。
The /post
ルートはもう少し複雑です。ここでは、HTTPリクエストの本文から値を直接渡すことはできません。 代わりに、最初に手動で抽出して、PrismaClientクエリに渡す必要があります。 これは、リクエスト本文のJSONの構造が、Prisma Clientで期待される構造と一致しないため、期待される構造を手動で作成する必要があるためです。
サーバーを停止して新しいルートをテストできます CTRL+C
. 次に、以下を使用してサーバーを再起動します。
- npx ts-node src/index.ts
を介して新しいユーザーを作成するには /user
ルート、あなたは以下を送ることができます POST
でリクエスト curl
:
- curl -X POST -H "Content-Type: application/json" -d '{"name":"Bob", "email":"bob@prisma.io"}' http://localhost:3000/user
これにより、データベースに新しいユーザーが作成され、次の出力が出力されます。
Output{"id":2,"email":"bob@prisma.io","name":"Bob"}
経由で新しい投稿を作成するには /post
ルート、あなたは以下を送ることができます POST
でリクエスト curl
:
- curl -X POST -H "Content-Type: application/json" -d '{"title":"I am Bob", "authorEmail":"bob@prisma.io"}' http://localhost:3000/post
これにより、データベースに新しい投稿が作成され、メールでユーザーに接続されます bob@prisma.io
. 次の出力を出力します。
Output{"id":2,"title":"I am Bob","content":null,"published":false,"authorId":2}
最後に、 PUT
と DELETE
ルート。
開く index.ts
次のコマンドを使用します。
- nano src/index.ts
次に、2つの実装に続いて POST
ルート、強調表示されたコードを追加します。
. . .
app.put('/post/publish/:id', async (req, res) => {
const { id } = req.params
const post = await prisma.post.update({
where: { id: Number(id) },
data: { published: true },
})
res.json(post)
})
app.delete(`/post/:id`, async (req, res) => {
const { id } = req.params
const post = await prisma.post.delete({
where: { id: Number(id) },
})
res.json(post)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
ファイルを保存して終了します。
このコードは、1つのAPIルートを実装します PUT
と1つ DELETE
リクエスト:
/post/publish/:id
(PUT
):IDで投稿を公開します。/post/:id
(DELETE
):IDで投稿を削除します。
この場合も、PrismaClientは両方の実装で使用されます。 の中に /post/publish/:id
ルートの実装では、公開される投稿のIDがURLから取得され、 update
Prismaクライアントのクエリ。 の実装 /post/:id
データベース内の投稿を削除するルートも、URLから投稿IDを取得し、それを delete
Prismaクライアントのクエリ。
繰り返しますが、サーバーを停止します CTRL+C
キーボードで。 次に、以下を使用してサーバーを再起動します。
- npx ts-node src/index.ts
あなたはテストすることができます PUT
次のルート curl
指図:
- curl -X PUT http://localhost:3000/post/publish/2
これにより、ID値が 2
. 再送する場合 /feed
リクエストすると、この投稿がレスポンスに含まれるようになります。
最後に、あなたはテストすることができます DELETE
次のルート curl
指図:
- curl -X DELETE http://localhost:3000/post/1
これにより、ID値が 1
. このIDの投稿が削除されたことを確認するには、 GET
にリクエスト /post/1
ルート。
このステップでは、ブログアプリケーションの残りのRESTAPIルートを実装しました。 APIはさまざまなものに応答するようになりました GET
, POST
, PUT
、 と DELETE
データベース内のデータを読み書きする機能を要求および実装します。
結論
この記事では、サンプルのブログアプリケーションのユーザーデータと投稿データを作成、読み取り、更新、削除するためのさまざまなルートを使用して、RESTAPIサーバーを作成しました。 APIルート内では、Prismaクライアントを使用してそれぞれのクエリをデータベースに送信しています。
次のステップとして、Prisma Migrateを使用して、追加のAPIルートを実装するか、データベーススキーマを拡張できます。 必ずPrismaドキュメントにアクセスして、Prismaのさまざまな側面について学び、prisma-examplesリポジトリでなどのツールを使用してすぐに実行できるサンプルプロジェクトを調べてください。 GraphQLまたはgrPCAPI。