چگونه مي توان REST API را با Prisma و PostgreSQL ساخت
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 ،