Prisma ، يك ابزار پايگاه داده منبع باز است. از سه ابزار اصلي تشكيل شده است:
Prisma Client: سازنده جستار خودكار و از نوع مطمئن براي Node.js و TypeScript.
Prisma Migrate: يك سيستم توصيفي انتقال و مدل سازي داده ها.
Prisma Studio: رابط كاربري گرافيكي براي مشاهده و ويرايش داده ها در پايگاه داده خود.
اين ابزارها با هدف افزايش بهره وري يك برنامه نويس در گردش كار در پايگاه داده خود ارائه مي شود. يكي از مهمترين مزاياي Prisma ميزان انتزاع ارائه شده است: به جاي فهميدن جستارهاي پيچيده SQL يا انتقال شماتيك ها ، توسعه دهندگان برنامه مي توانند هنگام استفاده از Prisma براي كار با پايگاه داده خود ، اطلاعات خود را به روشي بصري تر استدلال كنند.
در اين آموزش ، شما يك API REST براي يك برنامه بلاگ نويسي كوچك در TypeScript با استفاده از Prisma و يك پايگاه داده PostgreSQL ايجاد خواهيد كرد. پايگاه داده PostgreSQL را بصورت محلي با Docker تنظيم مي كنيد و مسيرهاي REST API را با استفاده از Express پياده سازي مي كنيد. در پايان آموزش ، يك وب سرور داريد كه بصورت محلي روي دستگاه شما كار مي كند كه مي تواند به درخواست هاي مختلف HTTP پاسخ دهد و داده ها را در ديتابيس بخواند و بنويسد.
پيش نيازها
اين آموزش موارد زير را فرض مي كند:
Node.js v10 يا بالاتر روي دستگاه شما نصب شده باشد. براي تنظيم اين گزينه مي توانيد از يكي از روش هاي نصب Node.js و ايجاد محيط توسعه محلي براي سيستم عامل خود استفاده كنيد.
Docker نصب شده بر روي دستگاه تان (براي اجراي پايگاه داده PostgreSQL) . مي توانيد از طريق وب سايت Docker آن را روي maغير مجاز مي باشد و Windows نصب كنيد ، يا نحوه نصب و استفاده از Docker را براي توزيع هاي لينوكس دنبال كنيد.
آشنايي اوليه با TypeScript و API هاي REST مفيد است اما براي اين آموزش لازم نيست.
مرحله 1 – ايجاد پروژه TypeScript
در اين مرحله با استفاده از npm يك پروژه ساده TypeScript تنظيم مي كنيد. اين پروژه پايه و اساس API REST است كه مي خواهيد در طول دوره اين آموزش بسازيد.
ابتدا يك دايركتوري جديد براي پروژه خود ايجاد كنيد:
$ mkdir my-blog
در مرحله بعد ، به ديركتوري برويد و يك پروژه npm خالي را آغاز كنيد. توجه داشته باشيد كه گزينه -y در اينجا بدان معني است كه شما از گزينه هاي تعاملي فرمان عبور ميكنيد. براي اجراي دستورها ، -y را از دستور حذف كنيد:
$ cd my-blog
$ npm init -y
براي اطلاعات بيشتر در مورد اين پيام ها ، مي توانيد مرحله 1 نحوه استفاده از ماژول هاي Node.js را با npm و pack.json دنبال كنيد.
با پاسخهاي پيش فرض موجود ، خروجي مشابه موارد زير را دريافت خواهيد كرد:
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”
}
اين دستور يك فايل pack.json حداقلي ايجاد مي كند كه شما به عنوان فايل پيكربندي پروژه npm خود استفاده مي كنيد. اكنون آماده تنظيم پيكربندي TypeScript در پروژه خود هستيد.
دستور زير را براي ستاپ ساده TypeScript اجرا كنيد:
npm install typescript ts-node @types/node –save-dev
اين دستور، سه بسته به عنوان متعلقات توسعه در پروژه شما نصب مي كند:
Typescript: زنجيره ابزار TypeScript.
ts-node: بسته اي براي اجراي برنامه هاي TypeScript بدون كامپايل قبلي با JavaScript
@ types / node: تعاريف نوع TypeScript براي Node.js.
آخرين كاري كه بايد انجام دهيد اضافه كردن فايل tsconfig.json است تا اطمينان حاصل شود كه TypeScript به درستي براي برنامه اي كه مي خواهيد بسازيد پيكربندي شده است.
ابتدا ، دستور زير را براي ايجاد فايل اجرا كنيد:
$ nano tsconfig.json
كد JSON زير را در فايل اضافه كنيد:
my-blog/tsconfig.json
{
“compilerOptions”: {
“sourceMap”: true,
“outDir”: “dist”,
“strict”: true,
“lib”: [“esnext”],
“esModuleInterop”: true
}
}
فايل را ذخيره و از آن خارج شويد.
اين يك پيكربندي استاندارد و حداقل براي يك پروژه TypeScript است. اگر مي خواهيد در مورد خصوصيات فردي فايل پيكربندي بياموزيد ، مي توانيد آنها را در مستندات TypeScript جستجو كنيد.
شما پروژه ساده TypeScript خود را با استفاده از npm تنظيم كرده ايد. سپس پايگاه داده PostgreSQL خود را با Docker تنظيم مي كنيد و Prisma را به آن وصل مي كنيد.
مرحله 2 – تنظيم Prisma با PostgreSQL
در اين مرحله Prisma CLI را نصب مي كنيد ، فايل شماتيك اوليه Prisma خود را ايجاد كرده و PostgreSQL را با Docker تنظيم مي كنيد و Prisma را به آن وصل مي كنيد. شماتيك Prism فايل پيكربندي اصلي براي تنظيم Prisma شما است و شامل شماتيك پايگاه داده شما ميباشد.
با نصب دستور Prisma CLI با دستور زير شروع كنيد:
$ npm install @prisma/cli –save-dev
به عنوان بهترين روش ، توصيه مي شود كه Prisma CLI را بصورت محلي در پروژه خود نصب كنيد (برخلاف نصب جهاني). اين امر به شما كمك مي كند تا در صورت داشتن بيش از يك پروژه Prisma در دستگاه خود ، از تداخل نسخه ها جلوگيري كنيد.
در مرحله بعد ، پايگاه داده PostgreSQL خود را با استفاده از Docker تنظيم مي كنيد. با دستور زير يك فايل جديد Docker Compose ايجاد كنيد:
$ 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:
اين فايل Docker Compose يك پايگاه داده PostgreSQL را تنظيم مي كند كه از طريق پورت 5432 كانتينر Docker قابل دسترسي است. همچنين توجه داشته باشيد كه اعتبارنامه ديتابيس در حال حاضر به عنوان sammy (كاربر) و your_password (رمز عبور) تعيين شده است. در تنظيم اين اعتبارها با كاربر و رمز عبور دلخواه خود اختيارعمل كامل داريد. فايل را ذخيره كنيد و از آن خارج شويد.
با استفاده از اين ستاپ، سرور پايگاه داده PostgreSQL را با دستور زير راه اندازي كنيد:
$ 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
با دستور زير مي توانيد تأييد كنيد كه سرور پايگاه داده در حال اجرا است:
$ 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 خود را ايجاد كنيد. دستور زير را از Prisma CLI اجرا كنيد:
با اين كار خروجي زير چاپ مي شود:
$ npx prisma init
خروجي زير را پرينت ميكند:
Output Your Prisma schema was created at prisma/schema.prisma.
You can now open it in your favorite editor.
توجه داشته باشيد كه به عنوان بهترين كار ، بايد تمام فراخواني هاي Prisma CLI را با npxپيشونددار كنيد. اين كار اطمينان حاصل مي كند نصب محلي شما در حال استفاده است.
پس از اجراي فرمان ، Prisma CLI يك پوشه جديد به نام prisma را در پروژه شما ايجاد كرد. اين شامل دو فايل زير است:
schema.prisma: فايل اصلي پيكربندي پروژه Prisma شما (شامل مدل داده شما خواهد بود(.
.env: يك فايل dotenv براي مشخص كردن URL اتصال به پايگاه داده خود.
براي اطمينان از اينكه Prisma از مكان پايگاه داده شما اطلاع دارد ، فايل .env را باز كنيد و متغير محيط DATABASE_URL را تنظيم كنيد.
ابتدا فايل .env را باز كنيد:
$ nano prisma/.env
اكنون مي توانيد متغير محيط را به شرح زير تنظيم كنيد:
my-blog/prisma/.env
DATABASE_URL=”postgresql://sammy:your_password@localhost:5432/my-blog?schema=public”
اطمينان حاصل كنيد كه اعتبار ديتابيس را به مواردي كه در فايل Docker Compose معرفي كرده ايد تغيير دهيد. براي كسب اطلاعات بيشتر در مورد قالب URL اتصال ، به اسناد Prisma مراجعه كنيد.
پس از اتمام كار ، فايل را ذخيره كنيد و خارج شويد.
در اين مرحله ، پايگاه داده PostgreSQL خود را با Docker تنظيم كرده ، Prisma CLI را نصب كرده و Prisma را از طريق يك متغير محيط به پايگاه داده وصل مي كنيد. در بخش بعدي ، مدل داده خود را تعيين كرده و جداول بانك اطلاعاتي خود را ايجاد خواهيد كرد.
مرحله 3 – تعريف مدل داده خود و ايجاد جداول بانك اطلاعاتي
در اين مرحله مدل داده خود را در فايل شماتيك Prisma تعريف خواهيد كرد. سپس اين مدل داده با Prisma Migrate به پايگاه داده نگاشت مي شود كه عبارت SQL را براي ايجاد جداول متناسب با مدل داده شما توليد و ارسال مي كند. از آنجا كه شما در حال ايجاد يك برنامه وبلاگ نويسي هستيد ، ماهيت هاي اصلي برنامه، كاربران و پستها خواهند بود.
Prisma از زبان مدل سازي داده خود استفاده مي كند تا شكل داده هاي برنامه شما را تعريف كند.
ابتدا فايل schema.prisma خود را با دستور زير باز كنيد:
$ 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?
}
فايل را ذخيره كنيد و از آن خارج شويد.
شما در حال تعريف دو مدل به نام هاي كاربر و پست هستيد. هر يك از اين موارد داراي تعدادي فيلد است كه نشان دهنده ويژگي هاي مدل است. مدل ها در جداول بانك اطلاعاتي نگاشت مي شوند. فيلد ها ستون هاي فردي را نشان مي دهند.
همچنين توجه داشته باشيد كه بين اين دو مدل رابطه يك به يك وجود دارد ، كه توسط فيلدهاي رابطه اي posts و author در User و Post مشخص شده است. اين بدان معني است كه يك كاربر مي تواند با بسياري از پست ها در ارتباط باشد.
با استفاده از اين مدل ها ، اكنون مي توانيد جداول مربوطه را با استفاده از Prisma Migrate در ديتابيس ايجاد كنيد. در ترمينال خود دستور زير را اجرا كنيد:
$ npx prisma migrate save –experimental –create-db –name “init”
اين دستور يك تغيير جديد در سيستم فايل شما ايجاد مي كند. در اينجا يك مرور اجمالي از سه گزينه ارائه شده به اين دستور آمده است:
–experimental: الزامي است زيرا Prisma Migrateدر حال حاضر در حالت آزمايشي قرار دارد.
–create-db: Prisma Migrate را قادر مي سازد تا پايگاه داده اي را با نام وبلاگ من ايجاد كند كه در URL اتصال مشخص شده است.
–name “init”: انتقال را مشخص مي كند (براي نامگذاري پوشه جا به جايي ايجاد شده در سيستم فايل شما استفاده خواهد شد).
خروجي اين دستور مشابه اين است:
Output
New datamodel:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = “postgresql”
url = env(“DATABASE_URL”)
}
generator client {
provider = “prisma-client-js”
}
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?
}
Prisma Migrate just created your migration 20200811140708-init in
migrations/
└─ 20200811140708-init/
└─ steps.json
└─ schema.prisma
└─ README.md
در جتجوي فايل هاي migration كه در ديركتوري prisma/migrations ايجاد شده اند ، آزادانه عمل كنيد.
براي اجراي جابه جايي در برابر پايگاه داده خود و ايجاد جداول براي مدل هاي Prisma ، دستور زير را در ترمينال خود اجرا كنيد:
$ npx prisma migrate up –experimental
خروجي زير را دريافت خواهيد كرد:
Output
. . .
Checking the datasource for potential data loss…
Database Changes:
Migration Database actions Status
20200811140708-init 2 CreateTable statements. Done
You can get the detailed db changes with prisma migrate up –experimental –verbose
Or read about them here:
./migrations/20200811140708-init/README.md
Done with 1 migration in 206ms.
اكنون Prisma Migrate عبارات SQL را كه براي جابه جايي لازم است توليد مي كند و آنها را به پايگاه داده مي فرستد. موارد زير عبارات SQL است كه جدول ها را ايجاد كرده است:
CREATE TABLE “public”.”User” (
“id” SERIAL,
“email” text NOT NULL ,
“name” text ,
PRIMARY KEY (“id”)
)
CREATE TABLE “public”.”Post” (
“id” SERIAL,
“title” text NOT NULL ,
“content” text ,
“published” boolean NOT NULL DEFAULT false,
“authorId” integer ,
PRIMARY KEY (“id”)
)
CREATE UNIQUE INDEX “User.email” ON “public”.”User”(“email”)
ALTER TABLE “public”.”Post” ADD FOREIGN KEY (“authorId”)REFERENCES “public”.”User”(“id”) ON DELETE SET NULL ON UPDATE CASCADE
در اين مرحله شما مدل داده خود را در شماي Prisma خود تعريف كرده و جداول پايگاه داده هاي مربوطه را با Prisma Migrate ايجاد كرده ايد. در مرحله بعد ، Prisma Client را در پروژه خود نصب خواهيد كرد تا بتوانيد از پايگاه داده پرس و جو كنيد.
مرحله چهارم – كاوش در مورد جستارهاي كلاينت Prisma در يك اسكريپت ساده
Prisma Client يك سازنده جستار خودكار ايجاد شده و از نوع مطمئن است كه مي توانيد با استفاده از برنامه هاي Node.js يا TypeScript ، داده ها را در يك پايگاه داده بخوانيد و بنويسيد. شما مي توانيد از آن براي دسترسي به بانك اطلاعاتي در مسيرهاي REST API خود ، جايگزين كردن ORM هاي معمول ، جستارهاي ساده SQL ، لايه هاي دسترسي به داده هاي سفارشي يا هر روش ديگري براي صحبت با يك پايگاه داده استفاده كنيد.
در اين مرحله Prisma Client را نصب مي كنيد و با جستارهايي كه مي توانيد با آن ارسال كنيد آشنا مي شويد. قبل از اجراي مسيرهاي API REST در مراحل بعدي ، ابتدا برخي از جستارهاي Prisma را با يك اسكريپت ساده و اجرايي جستجو خواهيد كرد.
ابتدا پيش برويد و با باز كردن ترمينال خود و نصب بسته npm Prisma Client در پروژه خود ، Prisma Client را در پروژه خود نصب كنيد:
npm install @prisma/client
سپس ، دايركتوري جديدي بنام src ايجاد كنيد كه شامل فايل هاي منبع شما باشد:
mkdir src
اكنون يك فايل TypeScript را در داخل ديركتوري جديد ايجاد كنيد:
nano src/index.ts
كليه جستارهاي Prisma Client ، عباراتي را برميگرداند كه مي توانيد در كد خود await كنيد. اين امر نياز دارد كه شما جستارها را درون يك تابع async ارسال كنيد.
boilerplate زير را با يك تابع 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())
در اينجا مرور مختصري بر boilerplate آورده شده است:
1- سازنده PrismaClient را از بسته npm @prisma/client كه قبلاً نصب شده بود ، وارد كنيد.
2- با تماس با سازنده ، و دريافت نمونه اي به نام prisma ؛ PrismaClient را معرفي مي كنيد.
3- يك تابع async به نام main تعريف مي كنيد كه در مرحله بعدي جستارهايPrisma Client خود را اضافه خواهيد كرد.
4-تابع main را فراخواني مي كنيد ، در حالي كه مي توانيد هر استثناء بالقوه را بدست آوريد و اطمينان حاصل كنيد كه Prisma Client با فراخواني prisma.disconnect () اتصالهاي پايگاه داده باز را ميبندد.
با وجود تابع main ، مي توانيد جستارهاي Prisma Client را به اسكريپت اضافه كنيد. 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: ‘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())
در اين كد ، شما از دو جستار Prisma Client استفاده مي كنيد:
create: يك ركورد كاربر جديد ايجاد مي كند. توجه كنيد كه شما در واقع از نوشتن تودرتو استفاده مي كنيد ، به اين معني كه شما يك ركورد كاربر و پست را در همان جستار ايجاد مي كنيد.
findMany: تمام ركوردهاي كاربر موجود را از پايگاه داده مي خواند. شما گزينه include را داريد كه علاوه بر آن ركورد Post مربوط را براي هر ركورد كاربر را بارگذاري مي كند.
اكنون اسكريپت را با دستور زير اجرا كنيد:
$ npx ts-node src/index.ts
خروجي زير را در ترمينال خود دريافت خواهيد كرد:
Output
Created 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
}
]
}
توجه: اگر از يك رابط كاربري گرافيكي ديتابيس استفاده مي كنيد ، مي توانيد با نگاه كردن به جداول كاربر و پست ، تأييد كنيد كه داده ها ايجاد شده اند. از طرف ديگر ، مي توانيد داده هاي موجود در استوديوي Prisma را با اجراي npx prisma studio –experimental پيدا كنيد.
اكنون از Prisma Client براي خواندن و نوشتن داده در پايگاه داده خود استفاده كرده ايد. در مراحل باقيمانده ، از دانش جديد براي اجراي مسيرهاي مربوط به نمونه REST API استفاده خواهيد كرد.
مرحله 5 – اجراي اولين مسير API REST شما
در اين مرحله ، Express را در برنامه خود نصب خواهيد كرد. Express يك چارچوب وب محبوب براي Node.js است كه شما براي اجراي مسيرهاي REST API خود در اين پروژه استفاده خواهيد كرد. اولين مسيري كه پياده سازي خواهيد كرد به شما امكان مي دهد تا با استفاده از يك درخواست GET ، كليه كاربران را از API منتقل كنيد. داده هاي كاربر با استفاده از Prisma Client از بانك اطلاعاتي بازيابي مي شوند.
پيش برويد و Express را با دستور زير نصب كنيد:
$ npm install express
از آنجا كه از TypeScript استفاده مي كنيد ، بهتر است انواع مربوطه را نيز به عنوان متعلقات توسعه نصب كنيد. دستور زير را براي اين كار اجرا كنيد:
$ npm install @types/express –save-dev
با متعلقات موجود ، مي توانيد برنامه Express خود را تنظيم كنيد.
دوباره با باز كردن فايل منبع اصلي خود شروع كنيد:
$ nano src/index.ts
اكنون تمام كد هاي موجود در index.ts را پاك كرده و آن را با موارد زير جايگزين كنيد تا REST API خود را شروع كنيد:
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- شما PrismaClient و express را از بسته هاي npm مربوطه وارد مي كنيد.
2- با تماس با سازنده ، PrismaClient را معرفي مي كنيد و نمونه اي به نام prisma را دريافت مي آوريد.
3- با تماس با Express () برنامه Express خود را ايجاد مي كنيد.
4- مي توانيد واسط Express.json () را براي اطمينان از پردازش صحيح داده هاي JSON توسط Express ، اضافه كنيد.
5- سرور را از پورت 3000 شروع مي كنيد.
اكنون مي توانيد اولين مسير خود را پياده كنيد. در بين تماس هاي app.use و app.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’),
)
پس از افزودن ، فايل خود را ذخيره كنيد و از آن خارج شويد. سپس سرور وب محلي خود را با استفاده از دستور زير شروع كنيد:
$ npx ts-node src/index.ts
خروجي زير را دريافت خواهيد كرد:
Output
REST API server ready at: http://localhost:3000
براي دسترسي به مسير /users مي توانيد مرورگر خود را به آدرس http: // localhost: 3000 / كاربر يا هر كلاينت HTTP ديگري هدايت كنيد.
در اين آموزش ، تمام مسيرهاي REST API را با استفاده از Curl ، يك كلاينت HTTP مبتني بر ترمينال ، تست خواهيد كرد.
توجه: اگر ترجيح مي دهيد از يك سرويس دهنده HTTP مبتني بر GUI استفاده كنيد ، مي توانيد از گزينه هاي ديگري مانند Postwoman يا Advanced REST Client استفاده كنيد.
براي آزمايش مسير خود ، يك پنجره يا تب ترمينال جديد باز كنيد (به اين ترتيب كه وب سرور محلي شما قادر به اجراي آن باشد) و دستور زير را اجرا كنيد:
$ curl http://localhost:3000/users
داده هاي كاربري را كه در مرحله قبل ايجاد كرده ايد دريافت خواهيد كرد:
Output
[{“id”:1,”email”:”alice@prisma.io”,”name”:”Alice”}]
توجه داشته باشيد كه اين بار آرايه posts گنجانده نشده است. اين امر به اين دليل است كه شما در اجراي مسير /users گزينه include را به تماس findMany منتقل نمي كنيد.
شما اولين مسير REST API خود را در /usersپياده سازي كرده ايد. در مرحله بعدي مسيرهاي باقيمانده API را براي اضافه كردن قابليت هاي بيشتر به API خود پياده سازي خواهيد كرد.
مرحله 6 – اجراي مسيرهاي باقيمانده REST API
در اين مرحله مسيرهاي باقيمانده API را براي برنامه وبلاگ نويسي خود پياده سازي خواهيد كرد. در پايان ، سرور وب شما درخواست هاي مختلف GET ، POST ، PUT و DELETE را ارائه مي دهد.
در اينجا مروري بر مسيرهاي مختلفي كه اجرا خواهيد كرد:
HTTP Method مسير توصيف
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، كد زير را اضافه كنيد:
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’),
)
فايل خود را ذخيره كنيد و از آن خارج شويد.
اين كد مسيرهاي API را براي دو درخواست GET پياده سازي مي كند:
/ feed: ليستي از پستهاي منتشر شده را برمي گرداند.
/ post /: id: يك پست خاص را با شناسه خود برمي گرداند.
Prisma Client در هر دو پياده سازي استفاده مي شود. در اجراي مسير /feed، جستار شما كه با فيلترهاي Prisma Client براي همه سوابق پست مي كنيد و در آن ستون published شامل مقدار واقعي است. علاوه بر اين ، جستارهاي مربوط به Prisma Client شامل اطلاعات author مربوطه براي هر پست برگشتي نيز مي باشد. در اجراي مسير / post /: id ، مي توانيد شناسه اي را كه از مسير URL بازيابي مي شود براي خواندن يك ركورد ارسال خاص از پايگاه داده در حال عبور هستيد.
مي توانيد CTRL + C را در صفحه كيبورد خود بزنيد و سرور را متوقف كنيد. سپس ، سرور را با استفاده از دستور زير ريستارت كنيد:
$ npx ts-node src/index.ts
براي تست مسير /feed، مي توانيد از دستور curl زير استفاده كنيد:
$ curl http://localhost:3000/feed
از آنجا كه هنوز هيچ پستي منتشر نشده است ، اين پاسخ ارايه خالي به همراه دارد:
Output
[]
براي بررسي مسير /post/:id ميتوانيد از دستور زير استفاده كنيد:
$ curl http://localhost:3000/post/1
پستي كه ابتدا ايجاد كرده ايد را برميگرداند:
Output
{“id”:1,”title”:”Hello World”,”content”:null,”published”:false,”authorId”:1}
سپس دو مسير post را اجرا كنيد. كد زير را به index.ts پس از پياده سازي مسير 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’),
)
پس از اتمام كار ، پرونده خود را ذخيره كنيد و خارج شويد.
اين كد مسيرهاي API را براي دو درخواست POST پياده سازي مي كند:
/ user: كاربر جديدي را در ديتابيس ايجاد مي كند.
/ post: يك پست جديد در بانك اطلاعاتي ايجاد مي كند.
مانند قبل ، Prisma Client در هر دو پياده سازي استفاده مي شود. در اجراي مسير /user، مقادير را از بدنه درخواست HTTP به جستار create در Prisma Client منتقل مي كنيد.
مسير /post كمي بيشتر درگير است: در اينجا نمي توانيد مقادير را مستقيماً از بدنه درخواست HTTP عبور دهيد. در عوض ، ابتدا بايد آنها را به صورت دستي استخراج كنيد تا آنها را به جستار Prisma Client منتقل كنيد. دليل اين امر اين است كه ساختار 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
در مرحله بعد ، پس از اجراي دو مسير 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’),
)
فايل خود را ذخيره كنيد و از آن خارج شويد.
اين كد مسيرهاي API را براي يك PUT و يك درخواست DELETE پياده سازي مي كند:
/post/publish/:id (PUT): پستي را با شناسه اش منتشر مي كند.
/post/:id (DELETE): پستي را با شناسه آن حذف مي كند.
باز هم ، Prisma Client در هر دو پياده سازي استفاده مي شود. در اجراي /post/publish/:id ، شناسه پستي كه بايد منتشر شود از URL برداشته مي شود و به جستار به روزرساني Prisma Client منتقل مي شود. اجراي مسير / post /: id براي پاك كردن يك پست در ديتابيس نيز شناسه پست را از URL باز مي گيرد و آن را به درخواست حذف Prisma Client منتقل مي كند.
دوباره ، سرور را با CTRL + C در صفحه كليد خود متوقف كنيد. سپس ، سرور را با استفاده از دستور زير ريستارت كنيد:
$ npx ts-node src/index.ts
مي توانيد مسير PUT را با دستور curl زير آزمايش كنيد:
$ curl -X PUT http://localhost:3000/post/publish/2
اين دستور پست را با شناسه برابر با 2 منتشر ميكند. در صورت ارسال درخواست /feed، اين پست در پاسخ گنجانده مي شود.
در آخر ، مي توانيد مسير DELETE را با دستور curl زير آزمايش كنيد:
$ curl -X DELETE http://localhost:3000/post/1
اين دستور پست با شناسه ID 1 را حذف ميكند. براي تأييد اينكه پست با اين شناسه حذف شده است ، مي توانيد يك درخواست GET را به مسير / post / 1 ارسال كنيد.
در اين مرحله ، شما مسيرهاي باقي مانده REST API را براي برنامه وبلاگ نويسي خود پياده سازي كرده ايد. API اكنون به درخواستهاي مختلف GET ، POST ، PUT و DELETE پاسخ مي دهد و عملكردي را براي خواندن و نوشتن داده ها در بانك اطلاعاتي پياده سازي مي كند.
نتيجه
در اين مقاله ، شما يك سرور API REST ايجاد كرده ايد كه داراي چندين مسير مختلف براي ايجاد ، خواندن ، به روزرساني و حذف داده هاي كاربر و ارسال يك برنامه وبلاگ نويسي نمونه است. در داخل مسيرهاي API ، شما در حال استفاده از Prisma Client براي ارسال جستارهاي مربوطه به پايگاه داده خود هستيد.
به عنوان مرحله بعدي ، مي توانيد مسيرهاي API اضافي را پياده سازي كنيد يا طرح پايگاه داده خود را با استفاده از Prisma Migrate گسترش دهيد. براي اطلاع از جوانب مختلف Prisma ، به اسناد Prisma مراجعه كرده و برخي از پروژه هاي نمونه آماده را براي استفاده در مخزن نمونه هاي Prisma – با استفاده از ابزارهايي مانند GraphQL يا APP هاي grPC جستجو كنيد.
خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريكا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –
- چهارشنبه ۱۲ شهریور ۹۹ ۱۳:۴۸ ۳۵ بازديد
- ۰ نظر