序章

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サーバーがマシン上でローカルに実行されるようになります。

前提条件

このチュートリアルでは、次のことを前提としています。

TypeScriptおよびRESTAPIの基本的な知識は役立ちますが、このチュートリアルでは必須ではありません。

ステップ1—TypeScriptプロジェクトを作成する

このステップでは、を使用してプレーンなTypeScriptプロジェクトを設定します npm. このプロジェクトは、このチュートリアルのコース全体で構築するRESTAPIの基盤になります。

まず、プロジェクトの新しいディレクトリを作成します。

  1. mkdir my-blog

次に、ディレクトリに移動して、空のファイルを初期化します npm 事業。 に注意してください -y ここでのオプションは、コマンドの対話型プロンプトをスキップすることを意味します。 プロンプトを実行するには、を削除します -y コマンドから:

  1. cd my-blog
  2. npm init -y

これらのプロンプトの詳細については、npmおよびpackage.jsonでNode.jsモジュールを使用する方法のステップ1に従うことができます。

デフォルトの応答が設定された状態で、次のような出力が表示されます。

Output
Wrote 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セットアップに対して、次のコマンドを実行します。

  1. npm install typescript ts-node @types/node --save-dev

これにより、プロジェクトに開発依存関係として3つのパッケージがインストールされます。

  • typescript :TypeScriptツールチェーン。
  • ts-node :JavaScriptに事前にコンパイルせずにTypeScriptアプリケーションを実行するためのパッケージ。
  • @ types / node :Node.jsのTypeScriptタイプ定義。

最後に行うことは、 tsconfig.json ファイルを追加して、ビルドするアプリケーションに対してTypeScriptが適切に構成されていることを確認することです。

まず、次のコマンドを実行してファイルを作成します。

  1. nano tsconfig.json

次のJSONコードをファイルに追加します。

my-blog / tsconfig.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をインストールすることから始めます。

  1. npm install @prisma/cli --save-dev

ベストプラクティスとして、(グローバルインストールではなく)プロジェクトにPrismaCLIをローカルにインストールすることをお勧めします。 これにより、マシンに複数のPrismaプロジェクトがある場合に、バージョンの競合を回避できます。

次に、Dockerを使用してPostgreSQLデータベースをセットアップします。 次のコマンドを使用して、新しいDockerComposeファイルを作成します。

  1. nano docker-compose.yml

次に、新しく作成したファイルに次のコードを追加します。

my-blog / 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データベースサーバーを起動します。

  1. docker-compose up -d

このコマンドの出力は次のようになります。

Output
Pulling 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

次のコマンドを使用して、データベースサーバーが実行されていることを確認できます。

  1. docker ps

これにより、次のようなものが出力されます。

Output
CONTAINER 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から次のコマンドを実行します。

  1. 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 ファイル:

  1. nano prisma/.env

これで、環境変数を次のように設定できます。

my-blog / 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 次のコマンドでファイルします。

  1. nano prisma/schema.prisma

次に、次のモデル定義を追加します。 モデルは、ファイルの下部、ファイルの直後に配置できます。 generator client ブロック:

my-blog / prisma / schema.prisma
. . .
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つのモデルを定義しています。 UserPost. これらのそれぞれには、モデルのプロパティを表すいくつかのフィールドがあります。 モデルはデータベーステーブルにマップされます。 フィールドは個々の列を表します。

また、2つのモデルの間には1対多の関係があり、 postsauthor 上の関係フィールド UserPost. これは、1人のユーザーが多くの投稿に関連付けることができることを意味します。

これらのモデルを配置すると、PrismaMigrateを使用してデータベースに対応するテーブルを作成できるようになります。 ターミナルで次のコマンドを実行します。

  1. npx prisma migrate dev --name "init" --preview-feature

このコマンドは、ファイルシステムに新しいSQL移行を作成し、それをデータベースに送信します。 コマンドに提供される2つのオプションの概要は次のとおりです。

  • --name "init":移行の名前を指定します(ファイルシステム上に作成された移行フォルダーに名前を付けるために使用されます)。
  • --preview-feature:PrismaMigrateは現在プレビューにあるため必須です。

このコマンドの出力は次のようになります。

Output
Environment 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 パッケージ:

  1. npm install @prisma/client

次に、という新しいディレクトリを作成します src ソースファイルが含まれます:

  1. mkdir src

次に、新しいディレクトリ内にTypeScriptファイルを作成します。

  1. nano src/index.ts

Prisma Clientのクエリはすべて、の約束を返します。 await あなたのコードで。 これには、クエリを内部に送信する必要があります async 関数。

次のボイラープレートを追加します async スクリプトで実行される関数:

my-blog / src / index.ts
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())

ボイラープレートの簡単な内訳は次のとおりです。

  1. をインポートします PrismaClient 以前にインストールされたコンストラクター @prisma/client npm パッケージ。
  2. あなたはインスタンス化します PrismaClient コンストラクターを呼び出して、というインスタンスを取得します prisma.
  3. あなたは async と呼ばれる関数 main 次に、PrismaClientクエリを追加します。
  4. あなたは main 潜在的な例外をキャッチし、Prisma Clientが呼び出して、開いているデータベース接続をすべて閉じるようにします。 prisma.disconnect().

とともに main 機能が整ったら、PrismaClientクエリをスクリプトに追加し始めることができます。 調整 index.ts 次のようになります。

my-blog / src / index.ts
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function main() {
  const newUser = await prisma.user.create({
    data: {
      name: 'Alice',
      email: '[email protected]',
      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 記録。 実際にはネストされた書き込みを使用していることに注意してください。つまり、両方を作成していることになります。 UserPost 同じクエリで記録します。
  • findMany:既存のすべてを読み取ります User データベースからのレコード。 関連するものを追加でロードするincludeオプションを提供しています Post それぞれの記録 User 記録。

次に、次のコマンドを使用してスクリプトを実行します。

  1. npx ts-node src/index.ts

端末に次の出力が表示されます。

Output
Created new user: { id: 1, email: '[email protected]', name: 'Alice' } [ { id: 1, email: '[email protected]', name: 'Alice', posts: [ { id: 1, title: 'Hello World', content: null, published: false, authorId: 1 } ] }

注:データベースGUIを使用している場合は、データを確認することでデータが作成されたことを検証できます。 UserPost テーブル。 または、を実行してPrismaStudioでデータを探索することもできます npx prisma studio.

これで、PrismaClientを使用してデータベースのデータを読み書きできました。 残りの手順では、その新しい知識を適用して、サンプルのRESTAPIのルートを実装します。

ステップ5—最初のRESTAPIルートを実装する

このステップでは、アプリケーションにExpressをインストールします。 Expressは、このプロジェクトでRESTAPIルートを実装するために使用するNode.jsの一般的なWebフレームワークです。 実装する最初のルートでは、APIを使用してすべてのユーザーを取得できます。 GET リクエスト。 ユーザーデータは、PrismaClientを使用してデータベースから取得されます。

先に進み、次のコマンドを使用してExpressをインストールします。

  1. npm install express

TypeScriptを使用しているので、それぞれのタイプを開発の依存関係としてインストールすることもできます。 これを行うには、次のコマンドを実行します。

  1. npm install @types/express --save-dev

依存関係が整ったら、Expressアプリケーションをセットアップできます。

メインソースファイルをもう一度開くことから始めます。

  1. nano src/index.ts

次に、のすべてのコードを削除します index.ts 次のように置き換えて、RESTAPIを開始します。

my-blog / src / index.ts
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'),
)

コードの簡単な内訳は次のとおりです。

  1. インポートします PrismaClientexpress それぞれから npm パッケージ。
  2. あなたはインスタンス化します PrismaClient コンストラクターを呼び出して、というインスタンスを取得します prisma.
  3. Expressアプリを作成するには、 express().
  4. 追加します express.json() JSONデータをExpressで適切に処理できるようにするミドルウェア。
  5. ポートでサーバーを起動します 3000.

これで、最初のルートを実装できます。 への呼び出しの間に app.useapp.listen、次のコードを追加します。

my-blog / src / index.ts
. . .
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サーバーを起動します。

  1. npx ts-node src/index.ts

次の出力が表示されます。

Output
REST API server ready at: http://localhost:3000

アクセスするには /users ブラウザをhttp:// localhost:3000 /usersまたはその他のHTTPクライアントにポイントすることができます。

このチュートリアルでは、ターミナルベースのHTTPクライアントであるcurlを使用してすべてのRESTAPIルートをテストします。

注: GUIベースのHTTPクライアントを使用する場合は、PostwomanAdvancedRESTClientなどの代替手段を使用できます。

ルートをテストするには、新しいターミナルウィンドウまたはタブを開いて(ローカルWebサーバーが実行を継続できるようにするため)、次のコマンドを実行します。

  1. curl http://localhost:3000/users

あなたは受け取ります User 前の手順で作成したデータ:

Output
[{"id":1,"email":"[email protected]","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 次のコマンドを使用します。

  1. nano src/index.ts

次に、の実装に続いて次のコードを追加します /users ルート:

my-blog / src / index.ts
. . .

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 キーボードで。 次に、以下を使用してサーバーを再起動します。

  1. npx ts-node src/index.ts

テストするには /feed ルート、あなたは以下を使用することができます curl 指図:

  1. curl http://localhost:3000/feed

投稿はまだ公開されていないため、応答は空の配列です。

Output
[]

テストするには /post/:id ルート、あなたは以下を使用することができます curl 指図:

  1. curl http://localhost:3000/post/1

これにより、最初に作成した投稿が返されます。

Output
{"id":1,"title":"Hello World","content":null,"published":false,"authorId":1}

次に、2つを実装します POST ルート。 次のコードをに追加します index.ts 3つの実装に続いて GET ルート:

my-blog / src / index.ts
. . .

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. 次に、以下を使用してサーバーを再起動します。

  1. npx ts-node src/index.ts

を介して新しいユーザーを作成するには /user ルート、あなたは以下を送ることができます POST でリクエスト curl:

  1. curl -X POST -H "Content-Type: application/json" -d '{"name":"Bob", "email":"[email protected]"}' http://localhost:3000/user

これにより、データベースに新しいユーザーが作成され、次の出力が出力されます。

Output
{"id":2,"email":"[email protected]","name":"Bob"}

経由で新しい投稿を作成するには /post ルート、あなたは以下を送ることができます POST でリクエスト curl:

  1. curl -X POST -H "Content-Type: application/json" -d '{"title":"I am Bob", "authorEmail":"[email protected]"}' http://localhost:3000/post

これにより、データベースに新しい投稿が作成され、メールでユーザーに接続されます [email protected]. 次の出力を出力します。

Output
{"id":2,"title":"I am Bob","content":null,"published":false,"authorId":2}

最後に、 PUTDELETE ルート。

開く index.ts 次のコマンドを使用します。

  1. nano src/index.ts

次に、2つの実装に続いて POST ルート、強調表示されたコードを追加します。

my-blog / src / index.ts
. . .

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 キーボードで。 次に、以下を使用してサーバーを再起動します。

  1. npx ts-node src/index.ts

あなたはテストすることができます PUT 次のルート curl 指図:

  1. curl -X PUT http://localhost:3000/post/publish/2

これにより、ID値が 2. 再送する場合 /feed リクエストすると、この投稿がレスポンスに含まれるようになります。

最後に、あなたはテストすることができます DELETE 次のルート curl 指図:

  1. 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