Thứ hai, 31/08/2020 | 00:00 GMT+7

Cách xây dựng API REST với Prisma và PostgreSQL

Prisma là một bộ công cụ database open-souce . Nó bao gồm ba công cụ chính:

  • Prisma Client : Trình tạo truy vấn được tạo tự động và an toàn về kiểu cho Node.js và TypeScript.
  • Prisma Migrate : Một hệ thống di chuyển và mô hình hóa dữ liệu khai báo.
  • Prisma Studio : Một GUI để xem và chỉnh sửa dữ liệu trong database của bạn.

Lưu ý: Prisma Migrate và Prisma Studio hiện được coi là thử nghiệm và do đó chưa được khuyến khích sử dụng trong production . Bạn có thể theo dõi sự phát triển của cả hai công cụ thông qua lộ trình Prisma .

Các công cụ này nhằm mục đích tăng năng suất của nhà phát triển ứng dụng trong quy trình làm việc database của họ. Một trong những lợi ích hàng đầu của Prisma là mức độ trừu tượng mà nó cung cấp: Thay vì tìm ra các truy vấn SQL phức tạp hoặc di chuyển schemas , các nhà phát triển ứng dụng có thể suy luận về dữ liệu của họ theo cách trực quan hơn khi sử dụng Prisma để làm việc với database của họ.

Trong hướng dẫn này, bạn sẽ xây dựng API REST cho một ứng dụng viết blog nhỏ trong TypeScript bằng cách sử dụng Prisma và database PostgreSQL . Bạn sẽ cài đặt database PostgreSQL của bạn local với Docker và triển khai các tuyến API REST bằng Express . Ở phần cuối của hướng dẫn, bạn sẽ có một web server chạy local trên máy của bạn có thể phản hồi các yêu cầu HTTP khác nhau và đọc và ghi dữ liệu trong database .

Yêu cầu

Hướng dẫn này giả định những điều sau:

Sự quen thuộc cơ bản với các API TypeScript và REST là hữu ích nhưng không bắt buộc đối với hướng dẫn này.

Bước 1 - Tạo Dự án TypeScript của bạn

Trong bước này, bạn sẽ cài đặt một dự án TypeScript thuần túy bằng cách sử dụng npm . Dự án này sẽ là nền tảng cho API REST mà bạn sẽ xây dựng trong suốt quá trình hướng dẫn này.

Đầu tiên, tạo một folder mới cho dự án của bạn:

  • mkdir my-blog

Tiếp theo, chuyển vào folder và khởi tạo một dự án npm trống. Lưu ý tùy chọn -y ở đây nghĩa là bạn đang bỏ qua các dấu nhắc tương tác của lệnh. Để chạy qua các dấu nhắc , hãy xóa -y khỏi lệnh:

  • cd my-blog
  • npm init -y

Để biết thêm chi tiết về những dấu nhắc này, bạn có thể làm theo Bước 1 trong Cách sử dụng Mô-đun Node.js với npm và package.json .

Bạn sẽ nhận được kết quả tương tự như sau với các phản hồi mặc định tại chỗ:

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" }

Lệnh này tạo một file package.json tối thiểu mà bạn sử dụng làm file cấu hình cho dự án npm của bạn . Đến đây bạn đã sẵn sàng để cấu hình TypeScript trong dự án của bạn .

Thực thi lệnh sau để cài đặt TypeScript đơn giản:

  • npm install typescript ts-node @types/node --save-dev

Điều này cài đặt ba gói dưới dạng phụ thuộc phát triển trong dự án của bạn:

  • typescript : Chuỗi công cụ TypeScript.
  • ts-node : Một gói để chạy các ứng dụng TypeScript mà không cần biên dịch trước sang JavaScript.
  • @types/node : Định nghĩa kiểu TypeScript cho Node.js.

Điều cuối cùng cần làm là thêm file tsconfig.json đảm bảo TypeScript được cấu hình đúng cho ứng dụng bạn sẽ xây dựng.

Đầu tiên, hãy chạy lệnh sau để tạo file :

  • nano tsconfig.json

Thêm mã JSON sau vào file :

my-blog / tsconfig.json
{   "compilerOptions": {     "sourceMap": true,     "outDir": "dist",     "strict": true,     "lib": ["esnext"],     "esModuleInterop": true   } } 

Lưu và thoát khỏi file .

Đây là cấu hình tiêu chuẩn và tối thiểu cho một dự án TypeScript. Nếu bạn muốn tìm hiểu về các thuộc tính riêng lẻ của file cấu hình, bạn có thể tra cứu chúng trong tài liệu TypeScript .

Bạn đã cài đặt dự án đánh máy đơn giản bằng cách sử dụng npm . Tiếp theo, bạn sẽ cài đặt database PostgreSQL của bạn với Docker và kết nối Prisma với nó.

Bước 2 - Cài đặt Prisma với PostgreSQL

Trong bước này, bạn sẽ cài đặt Prisma CLI , tạo file giản đồ Prisma ban đầu và cài đặt PostgreSQL với Docker và kết nối Prisma với nó. Lược đồ Prisma là file cấu hình chính cho cài đặt Prisma của bạn và chứa schemas database của bạn.

Bắt đầu bằng cách cài đặt Prisma CLI bằng lệnh sau:

  • npm install @prisma/cli --save-dev

Thực tiễn tốt nhất, bạn nên cài đặt Prisma CLI local trong dự án của bạn (trái ngược với cài đặt global ). Điều này giúp tránh xung đột version trong trường hợp bạn có nhiều hơn một dự án Prisma trên máy của bạn .

Tiếp theo, bạn sẽ cài đặt database PostgreSQL của bạn bằng Docker. Tạo file Docker Compose mới bằng lệnh sau:

  • nano docker-compose.yml

Bây giờ thêm mã sau vào file mới tạo:

my-blog / docker-compos.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: 

Tệp Docker Compose này cấu hình database PostgreSQL có thể được truy cập qua cổng 5432 của containers Docker. Cũng lưu ý thông tin xác thực database hiện được đặt là sammy ( user ) và your_password (mật khẩu). Vui lòng điều chỉnh các thông tin đăng nhập này cho user và password bạn muốn . Lưu và thoát khỏi file .

Với cài đặt này, hãy tiếp tục và chạy server database PostgreSQL bằng lệnh sau:

  • docker-compose up -d

Đầu ra của lệnh này sẽ tương tự như sau:

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

Bạn có thể xác minh server database đang chạy bằng lệnh sau:

  • docker ps

Điều này sẽ xuất ra một cái gì đó tương tự như sau:

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

Với server database đang chạy, bây giờ bạn có thể tạo cài đặt Prisma của bạn . Chạy lệnh sau từ Prisma CLI:

  • npx prisma init

Thao tác này sẽ in ra kết quả sau:

Output
✔ Your Prisma schema was created at prisma/schema.prisma. You can now open it in your favorite editor.

Lưu ý cách tốt nhất là bạn nên đặt trước tất cả các lệnh gọi của Prisma CLI bằng npx . Điều này đảm bảo cài đặt local của bạn đang được sử dụng.

Sau khi bạn chạy lệnh, Prisma CLI đã tạo một folder mới có tên là prisma trong dự án của bạn. Nó chứa hai file sau:

  • schema.prisma : Tệp cấu hình chính cho dự án Prisma của bạn (sẽ bao gồm mô hình dữ liệu ).
  • .env : Tệp dotenv để xác định URL kết nối database của bạn.

Để đảm bảo Prisma biết về vị trí database của bạn, hãy mở file .env và điều chỉnh biến môi trường DATABASE_URL .

Đầu tiên hãy mở file .env :

  • nano prisma/.env

Đến đây bạn có thể đặt biến môi trường như sau:

my-blog / prima / .env
DATABASE_URL="postgresql://sammy:your_password@localhost:5432/my-blog?schema=public" 

Đảm bảo thay đổi thông tin xác thực database thành thông tin bạn đã chỉ định trong file Docker Compose. Để tìm hiểu thêm về định dạng của URL kết nối, hãy truy cập tài liệu Prisma .

Sau khi hoàn tất, hãy lưu và thoát khỏi file .

Trong bước này, bạn cài đặt database PostgreSQL của bạn với Docker, cài đặt Prisma CLI và kết nối Prisma với database thông qua một biến môi trường. Trong phần tiếp theo, bạn sẽ xác định mô hình dữ liệu của bạn và tạo các bảng database .

Bước 3 - Xác định Mô hình Dữ liệu của Bạn và Tạo Bảng Database

Trong bước này, bạn sẽ xác định mô hình dữ liệu của bạn trong file schemas Prisma. Mô hình dữ liệu này sau đó sẽ được ánh xạ tới database với Prisma Migrate , sẽ tạo và gửi các câu lệnh SQL để tạo các bảng tương ứng với mô hình dữ liệu . Vì bạn đang xây dựng một ứng dụng viết blog, các thực thể chính của ứng dụng sẽ là user và bài đăng.

Prisma sử dụng ngôn ngữ mô hình hóa dữ liệu của riêng mình để xác định hình dạng dữ liệu ứng dụng của bạn.

Đầu tiên, hãy mở file schema.prisma của bạn bằng lệnh sau:

  • nano prisma/schema.prisma

Bây giờ, hãy thêm các định nghĩa mô hình sau vào nó. Bạn có thể đặt các mô hình ở cuối file , ngay sau khối generator client :

my-blog / prima / 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? } 

Lưu và thoát khỏi file .

Bạn đang xác định hai mô hình , được gọi là UserPost . Mỗi trong số này có một sốtrường đại diện cho các thuộc tính của mô hình. Các mô hình sẽ được ánh xạ tới các bảng database ; các trường đại diện cho các cột riêng lẻ.

Cũng lưu ý có mối quan hệ một-nhiều giữa hai mô hình, được chỉ định bởi các posts và trường quan hệ author trên UserPost . Điều này nghĩa là một user có thể được liên kết với nhiều bài đăng.

Với các mô hình này, bây giờ bạn có thể tạo các bảng tương ứng trong database bằng cách sử dụng Prisma Migrate. Trong terminal của bạn, hãy chạy lệnh sau:

  • npx prisma migrate save --experimental --create-db --name "init"

Lệnh này tạo một sự di chuyển mới trên hệ thống file của bạn. Dưới đây là tổng quan nhanh về ba tùy chọn được cung cấp cho lệnh:

  • --experimental : Bắt buộc vì Prisma Migrate hiện đang ở trạng thái thử nghiệm .
  • --create-db : Cho phép Prisma Migrate tạo database có tên my-blog được chỉ định trong URL kết nối.
  • --name "init" : Chỉ định tên của quá trình di chuyển (sẽ được sử dụng để đặt tên cho folder di chuyển được tạo trên hệ thống file của bạn).

Đầu ra của lệnh này sẽ tương tự như sau:

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

Hãy thoải mái khám phá các file di chuyển đã được tạo trong folder prisma/migrations .

Để chạy quá trình di chuyển đối với database của bạn và tạo bảng cho các mô hình Prisma của bạn, hãy chạy lệnh sau trong terminal của bạn:

  • npx prisma migrate up --experimental

Bạn sẽ nhận được kết quả sau:

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 hiện tạo các câu lệnh SQL cần thiết cho việc di chuyển và gửi chúng đến database . Sau đây là các câu lệnh SQL đã tạo bảng:

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 

Trong bước này, bạn đã xác định mô hình dữ liệu của bạn trong schemas Prisma và tạo các bảng database tương ứng với Prisma Migrate. Trong bước tiếp theo, bạn sẽ cài đặt Prisma Client trong dự án của bạn để bạn có thể truy vấn database .

Bước 4 - Khám phá các truy vấn của khách hàng Prisma trong một tập lệnh thuần túy

Prisma Client là một trình tạo truy vấn được tạo tự động và an toàn về kiểu mà bạn có thể sử dụng để đọc và ghi dữ liệu theo chương trình trong database từ ứng dụng Node.js hoặc TypeScript. Bạn sẽ sử dụng nó để truy cập database trong các tuyến API REST của bạn , thay thế các ORM truyền thống, truy vấn SQL thuần túy, các lớp truy cập dữ liệu tùy chỉnh hoặc bất kỳ phương pháp nào khác để nói chuyện với database .

Trong bước này, bạn sẽ cài đặt Prisma Client và làm quen với các truy vấn mà bạn có thể gửi với nó. Trước khi triển khai các tuyến cho REST API của bạn trong các bước tiếp theo, trước tiên bạn sẽ khám phá một số truy vấn Prisma Client trong một tập lệnh đơn giản, có thể thực thi được.

Trước tiên, hãy tiếp tục và cài đặt Prisma Client trong dự án của bạn bằng cách mở terminal của bạn và cài đặt gói Prisma Client npm :

  • npm install @prisma/client

Tiếp theo, tạo một folder mới có tên src sẽ chứa các file nguồn của bạn:

  • mkdir src

Bây giờ hãy tạo một file TypeScript bên trong folder mới:

  • nano src/index.ts

Tất cả các truy vấn của Prisma Client đều trả về hứa hẹn rằng bạn có thể await trong mã của bạn . Điều này đòi hỏi bạn gửi các truy vấn bên trong một async chức năng.

Thêm bản mẫu sau đây với một async chức năng đó là thực hiện trong kịch bản của bạn:

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()) 

Dưới đây là một bản phân tích nhanh về console :

  1. Bạn nhập PrismaClient constructor từ cài đặt trước đó @prisma/client npm gói.
  2. Bạn nhanh chóng PrismaClient bằng cách gọi các nhà xây dựng và có được một thể gọi prisma .
  3. Bạn xác định một async chức năng gọi main nơi bạn sẽ thêm Prisma Khách hàng của bạn truy vấn tiếp theo.
  4. Bạn gọi hàm main , đồng thời bắt mọi trường hợp ngoại lệ tiềm ẩn và đảm bảo Prisma Client đóng mọi kết nối database đang mở bằng cách gọi prisma.disconnect() .

Với chức năng main tại chỗ, bạn có thể bắt đầu thêm các truy vấn Prisma Client vào script. Điều chỉnh index.ts trông như sau:

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()) 

Trong đoạn mã này, bạn đang sử dụng hai truy vấn Prisma Client:

  • create : Tạo bản ghi User mới. Lưu ý bạn đang thực sự sử dụng một bản ghi lồng nhau , nghĩa là bạn đang tạo cả bản ghi UserPost trong cùng một truy vấn.
  • findMany : Đọc tất cả các bản ghi User hiện có từ database . Bạn đang cung cấp tùy chọn include tải thêm các bản ghi Post liên quan cho mỗi bản ghi User .

Bây giờ hãy chạy script bằng lệnh sau:

  • npx ts-node src/index.ts

Bạn sẽ nhận được kết quả sau trong terminal của bạn :

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 } ] }

Lưu ý: Nếu bạn đang sử dụng GUI database , bạn có thể xác nhận dữ liệu đã được tạo bằng cách xem bảng UserPost . Ngoài ra, bạn có thể khám phá dữ liệu trong Prisma Studio bằng cách chạy npx prisma studio --experimental .

Đến đây bạn đã sử dụng Prisma Client để đọc và ghi dữ liệu trong database của bạn . Trong các bước còn lại, bạn sẽ áp dụng kiến thức mới đó để triển khai các tuyến cho một API REST mẫu.

Bước 5 - Triển khai Lộ trình API REST đầu tiên của bạn

Trong bước này, bạn sẽ cài đặt Express trong ứng dụng của bạn . Express là một khung công tác web phổ biến cho Node.js mà bạn sẽ sử dụng để triển khai các tuyến API REST của bạn trong dự án này. Tuyến đầu tiên bạn sẽ triển khai sẽ cho phép bạn tìm nạp tất cả user từ API bằng cách sử dụng yêu cầu GET . Dữ liệu user sẽ được truy xuất từ database bằng Prisma Client.

Tiếp tục và cài đặt Express bằng lệnh sau:

  • npm install express

Vì bạn đang sử dụng TypeScript, bạn cũng cần cài đặt các loại tương ứng làm phụ thuộc phát triển. Chạy lệnh sau để thực hiện :

  • npm install @types/express --save-dev

Với các phụ thuộc sẵn có, bạn có thể cài đặt ứng dụng Express của bạn .

Bắt đầu bằng cách mở lại file nguồn chính của bạn:

  • nano src/index.ts

Bây giờ, hãy xóa tất cả mã trong index.ts và thay thế nó bằng mã sau để bắt đầu API REST của bạn:

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'), ) 

Dưới đây là phân tích nhanh về mã:

  1. Bạn nhập PrismaClientexpress từ các gói npm tương ứng.
  2. Bạn nhanh chóng PrismaClient bằng cách gọi các nhà xây dựng và có được một thể gọi prisma .
  3. Bạn tạo ứng dụng Express của bạn bằng cách gọi express() .
  4. Bạn thêm phần mềm trung gian express.json() đảm bảo dữ liệu JSON có thể được Express xử lý đúng cách.
  5. Bạn khởi động server trên cổng 3000 .

Đến đây bạn có thể thực hiện lộ trình đầu tiên của bạn . Giữa các lệnh gọi đến app.useapp.listen , hãy thêm mã sau:

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'), ) 

Sau khi được thêm, hãy lưu và thoát khỏi file của bạn. Sau đó khởi động web server local của bạn bằng lệnh sau:

  • npx ts-node src/index.ts

Bạn sẽ nhận được kết quả sau:

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

Để truy cập tuyến /users bạn có thể trỏ trình duyệt của bạn tới http://localhost:3000/users hoặc bất kỳ ứng dụng HTTP nào khác.

Trong hướng dẫn này, bạn sẽ kiểm tra tất cả các tuyến API REST bằng cách sử dụng curl , một ứng dụng client HTTP dựa trên terminal .

Lưu ý: Nếu bạn muốn sử dụng ứng dụng HTTP dựa trên GUI, bạn có thể sử dụng các lựa chọn thay thế như Postwoman hoặc Ứng dụng khách REST nâng cao .

Để kiểm tra tuyến đường của bạn, hãy mở một cửa sổ hoặc tab terminal mới (để web server local của bạn có thể tiếp tục chạy) và thực hiện lệnh sau:

  • curl http://localhost:3000/users

Bạn sẽ nhận được dữ liệu User mà bạn đã tạo ở bước trước:

Output
[{"id":1,"email":"alice@prisma.io","name":"Alice"}]

Lưu ý mảng posts không được bao gồm lần này. Điều này là do bạn không chuyển tùy chọn include vào findMany gọi findMany trong quá trình triển khai tuyến /users .

Bạn đã triển khai tuyến API REST đầu tiên của bạn tại /users . Trong bước tiếp theo, bạn sẽ triển khai các tuyến API REST còn lại để thêm nhiều chức năng hơn cho API của bạn .

Bước 6 - Triển khai các tuyến API REST còn lại

Trong bước này, bạn sẽ triển khai các tuyến API REST còn lại cho ứng dụng viết blog của bạn . Cuối cùng, web server của bạn sẽ phục vụ các yêu cầu GET , POST , PUTDELETE .

Dưới đây là tổng quan về các lộ trình khác nhau mà bạn sẽ triển khai:

Phương thức HTTP Lộ trình Sự miêu tả
GET /feed Tìm nạp tất cả các bài đăng đã xuất bản .
GET /post/:id Tìm nạp một bài đăng cụ thể theo ID của nó.
POST /user Tạo user mới.
POST /post Tạo một bài đăng mới (dưới dạng bản nháp ).
PUT /post/publish/:id Đặt trường đã published của một bài đăng thành true .
DELETE post/:id Xóa một bài đăng theo ID của nó.

Hãy tiếp tục và thực hiện các tuyến GET còn lại trước.

Mở index.ts bằng lệnh sau:

  • nano src/index.ts

Tiếp theo, thêm đoạn mã sau khi triển khai tuyến /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'), ) 

Lưu và thoát khỏi file của bạn.

Mã này triển khai các tuyến API cho hai yêu cầu GET :

  • /feed : Trả về danh sách các bài đăng đã xuất bản.
  • /post/:id : Trả về một bài đăng cụ thể theo ID của nó.

Prisma Client được sử dụng trong cả hai cách triển khai. Trong triển khai /feed , truy vấn bạn gửi với Prisma Client lọc cho tất cả các bản ghi Post trong đó cột đã published chứa giá trị true . Thêm vào đó, Prisma Khách hàng truy vấn sử dụng include cũng để lấy liên quan author thông tin cho mỗi bài trả lại. Trong triển khai định tuyến /post/:id , bạn đang chuyển ID được truy xuất từ đường dẫn của URL để đọc một bản ghi Post cụ thể từ database .

Bạn có thể dừng server nhấn CTRL+C trên bàn phím của bạn . Sau đó, khởi động lại server bằng:

  • npx ts-node src/index.ts

Để kiểm tra tuyến /feed , bạn có thể sử dụng lệnh curl sau:

  • curl http://localhost:3000/feed

Vì chưa có bài đăng nào được xuất bản nên phản hồi là một mảng trống:

Output
[]

Để kiểm tra định tuyến /post/:id , bạn có thể sử dụng lệnh curl sau:

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

Thao tác này sẽ trả về bài đăng bạn đã tạo ban đầu:

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

Tiếp theo, thực hiện hai tuyến đường POST . Thêm mã sau vào index.ts sau các triển khai của ba tuyến 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'), ) 

Sau khi hoàn tất, hãy lưu và thoát khỏi file của bạn.

Mã này triển khai các tuyến API cho hai yêu cầu POST :

  • /user : Tạo user mới trong database .
  • /post : Tạo một bài đăng mới trong database .

Giống như trước đây, Prisma Client được sử dụng trong cả hai cách triển khai. Trong triển khai /user route, bạn đang chuyển các giá trị từ phần thân của yêu cầu HTTP đến Prisma Client create truy vấn.

Tuyến /post có liên quan nhiều hơn một chút: Ở đây bạn không thể chuyển trực tiếp các giá trị từ phần thân của yêu cầu HTTP; thay vào đó, trước tiên bạn cần extract chúng theo cách thủ công để chuyển chúng đến truy vấn Prisma Client. Lý do cho điều này là cấu trúc của JSON trong phần thân yêu cầu không trùng với cấu trúc mà Prisma Client mong đợi, vì vậy bạn cần tạo cấu trúc mong đợi theo cách thủ công.

Bạn có thể kiểm tra các tuyến mới bằng cách dừng server với CTRL+C Sau đó, khởi động lại server bằng:

  • npx ts-node src/index.ts

Để tạo user mới qua /user route, bạn có thể gửi yêu cầu POST sau với curl :

  • curl -X POST -H "Content-Type: application/json" -d '{"name":"Bob", "email":"bob@prisma.io"}' http://localhost:3000/user

Thao tác này sẽ tạo một user mới trong database , in kết quả sau:

Output
{"id":2,"email":"bob@prisma.io","name":"Bob"}

Để tạo một bài đăng mới qua /post route, bạn có thể gửi yêu cầu POST sau với curl :

  • curl -X POST -H "Content-Type: application/json" -d '{"title":"I am Bob", "authorEmail":"bob@prisma.io"}' http://localhost:3000/post

Thao tác này sẽ tạo một bài đăng mới trong database và kết nối nó với user bằng email bob@prisma.io . Nó in ra kết quả sau:

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

Cuối cùng, bạn có thể thực hiện các tuyến PUTDELETE .

Mở index.ts bằng lệnh sau:

  • nano src/index.ts

Tiếp theo, sau khi triển khai hai tuyến POST , hãy thêm mã được đánh dấu:

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'), ) 

Lưu và thoát khỏi file của bạn.

Mã này triển khai các tuyến API cho một yêu cầu PUT và một yêu cầu DELETE :

  • /post/publish/:id ( PUT ): Xuất bản một bài đăng theo ID của nó.
  • /post/:id ( DELETE ): Xóa một bài đăng theo ID của nó.

, Prisma Client được sử dụng trong cả hai cách triển khai. Trong quá trình triển khai lộ trình /post/publish/:id , ID của bài đăng sẽ được xuất bản được truy xuất từ URL và được chuyển đến truy vấn update của Prisma Client. Việc triển khai tuyến /post/:id để xóa một bài đăng trong database cũng lấy ID bài đăng từ URL và chuyển nó đến truy vấn delete của Prisma Client.

, dừng server bằng CTRL+C trên bàn phím của bạn. Sau đó, khởi động lại server bằng:

  • npx ts-node src/index.ts

Bạn có thể kiểm tra tuyến PUT bằng lệnh curl sau:

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

Điều này sẽ xuất bản bài đăng với giá trị ID là 2 . Nếu bạn gửi lại yêu cầu /feed , bài đăng này bây giờ sẽ được đưa vào phản hồi.

Cuối cùng, bạn có thể kiểm tra lộ trình DELETE bằng lệnh curl sau:

  • curl -X DELETE http://localhost:3000/post/1

Thao tác này sẽ xóa bài đăng có giá trị ID là 1 . Để xác thực rằng bài đăng có ID này đã bị xóa, bạn có thể gửi lại yêu cầu GET tới tuyến đường /post/1 .

Trong bước này, bạn đã triển khai các tuyến API REST còn lại cho ứng dụng viết blog của bạn . API hiện đáp ứng các yêu cầu GET , POST , PUTDELETE và triển khai chức năng đọc và ghi dữ liệu trong database .

Kết luận

Trong bài viết này, bạn đã tạo một server REST API với một số tuyến đường khác nhau để tạo, đọc, cập nhật và xóa dữ liệu user và đăng cho ứng dụng viết blog mẫu. Bên trong các tuyến API, bạn đang sử dụng Prisma Client để gửi các truy vấn tương ứng đến database của bạn .

Trong các bước tiếp theo, bạn có thể triển khai các tuyến API bổ sung hoặc mở rộng schemas database của bạn bằng cách sử dụng Prisma Migrate. Hãy nhớ truy cập tài liệu Prisma để tìm hiểu về các khía cạnh khác nhau của Prisma và khám phá một số dự án ví dụ sẵn sàng chạy trong repository lưu trữ prisma-examples lăng kính — bằng cách sử dụng các công cụ như API GraphQL hoặc grPC .


Tags:

Các tin liên quan

Cách cài đặt PostgreSQL trên Ubuntu 20.04 [Quickstart]
2020-05-27
Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04
2020-05-27
Cách cài đặt và sử dụng PostgreSQL trên CentOS 8
2020-04-03
Cách cài đặt và sử dụng PostgreSQL trên CentOS 7
2020-01-08
Cách giám sát database PostgreSQL được quản lý của bạn bằng Nagios Core trên Ubuntu 18.04
2019-08-15
Cách phân tích thống kê database PostgreSQL được quản lý bằng elastic trên Ubuntu 18.04
2019-08-14
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên macOS
2019-07-30
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 18.04
2019-06-28
Cách kiểm tra database PostgreSQL với InSpec trên Ubuntu 18.04
2019-04-02
Công cụ kết nối dịch vụ database và đo điểm chuẩn PostgreSQL bằng pgbench
2019-02-14