دسته‌بندی نشده

چگونه می توان 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 آن را روی macOS و 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: ‘[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())

در این کد ، شما از دو جستار Prisma Client استفاده می کنید:
create: یک رکورد کاربر جدید ایجاد می کند. توجه کنید که شما در واقع از نوشتن تودرتو استفاده می کنید ، به این معنی که شما یک رکورد کاربر و پست را در همان جستار ایجاد می کنید.
findMany: تمام رکوردهای کاربر موجود را از پایگاه داده می خواند. شما گزینه include را دارید که علاوه بر آن رکورد Post مربوط را برای هر رکورد کاربر را بارگذاری می کند.
اکنون اسکریپت را با دستور زیر اجرا کنید:
$ 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
}
]
}

توجه: اگر از یک رابط کاربری گرافیکی دیتابیس استفاده می کنید ، می توانید با نگاه کردن به جداول کاربر و پست ، تأیید کنید که داده ها ایجاد شده اند. از طرف دیگر ، می توانید داده های موجود در استودیوی 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”:”[email protected]”,”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”:”[email protected]”}’ http://localhost:3000/user

با این کار کاربر جدیدی در دیتابیس ایجاد می شود و خروجی زیر را چاپ می کند:
Output
{“id”:2,”email”:”[email protected]”,”name”:”Bob”}

برای ایجاد یک پست جدید از طریق مسیر /post، می توانید درخواست POST  زیر را با curl ارسال کنید:
$ 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}

سرانجام می توانید مسیرهای 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 جستجو کنید.

 

نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در اوبونتو 20.04

نحوه دانلود فایل ها با cURL

نحوه نصب و ایمن سازی Redis در Centos7

چگونه می توان محیط JupyterLab را در اوبونتو 18.04 تنظیم کرد

نحوه نصب Webmin در Ubuntu 20.04

نحوه بازنویسی آدرس های اینترنتی با mod_rewrite برای Apache در اوبونتو 20.04

نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible

چگونه می توان REST API را با Prisma و PostgreSQL ساخت

نحوه میزبانی وب سایت با استفاده از Cloudflare و Nginx در اوبونتو 18.04

نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در Ubuntu 18.04

 

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان – 


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/