Lăng kính vs mongodb

Ở phần trước chúng ta đã tìm hiểu về Mutation và Query cơ bản. Cách đọc dữ liệu với

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
7 và cách cập nhật dữ liệu với
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
8 sử dụng
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
9. Phần này, chúng ta sẽ cùng nhau đi kết nối với Cơ sở dữ liệu và thao tác với Cơ sở dữ liệu thông qua Prisma Client (mình sẽ đề cập đến chi tiết bên dưới)

Prisma là gì và tại sao sử dụng Prisma?

Lăng kính vs mongodb

Prisma là một Object Relational Mapping (ORM) được sử dụng để xây dựng các máy chủ như GraphQL Server, RESTful APIs, microservice, …v.v.

Như mình đã giới thiệu ở bài viết đầu tiên của loạt bài này. Prisma đơn giản là 1 layer nằm giữa Webserver và Database. Prisma giúp chúng ta giao tiếp với db một cách dễ dàng hơn

Cách truyền thống mà Webserver giao tiếp với Cơ sở dữ liệu là thông qua các câu lệnh SQL Query như

npm install -g prisma
0,
npm install -g prisma
1 hay
npm install -g prisma
2 Giờ đây, giờ vào các công cụ ORM nói chung và Prisma nói riêng. Chúng tạo ra một tầng trừu tượng giữa Webserver và Database. Điều này giúp lập trình viên dễ dàng trong thao tác với Cơ sở dữ liệu. Thay vì viết những câu lệnh SQL khô khan, có thể sai bất cứ lúc nào thì chúng ta có thể viết các hàm tương ứng

giải pháp truyền thống

Select * from Posts where title = "GraphQL API";
INSERT INTO Posts VALUES ("Graphql API", "Learning how to Writting GraphQL API", "thuan");

Giải pháp ORM (triển khai JavaScript)

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})

Việc sử dụng ORMs cũng cho chúng ta khả năng tùy biến rất cao. Trong hầu hết trường hợp phức tạp thì ORM đều có thể xử lý được. Chúng ta hãy cùng tìm hiểu nhé

Cài đặt Prisma và thao tác với Cơ sở dữ liệu

Prisma cho chúng ta 2 lựa chọn để setup Database

  • Tạo cơ sở dữ liệu mới. Sử dụng Cơ sở dữ liệu cục bộ (sử dụng Docker để xây dựng và chạy) hoặc Cơ sở dữ liệu demo (Sử dụng dịch vụ của Prisma. Đám mây Prisma)
  • Từ Design Database có sẵn. Các bạn có thể xem thêm tại đây

Điều hay ho ở đây là chúng ta không cần quan tâm đến việc sử dụng Cơ sở dữ liệu nào (Mysql, PostgresQL, MongoDB, …) Với mỗi loại, Prisma sẽ có cách xử lý mà vẫn đảm bảo tính chặt chẽ

Ở đây mình sẽ sử dụng Local Database để tạo Database. Các bạn cũng có thể sử dụng máy chủ demo. Xem hướng dẫn tại đây

Sử dụng Máy chủ demo sẽ dễ dàng hơn cho việc cài đặt và cấu hình. Nhưng mình vẫn ưu tiên sự ổn định và tốc độ nên mình sẽ quyết định sử dụng cục bộ. )

Về cơ bản thì việc sử dụng Local Database hay Demo Database đều sẽ trả về một PRISMA_ENDPOINT để chúng ta có thể kết nối với GraphQL Server

Mở Terminal, đầu tiên là cài đặt Prisma

npm install -g prisma

Cài đặt Docker. Để sử dụng Prisma cục bộ, chúng ta bắt buộc phải cài đặt Docker. Các bạn có thể tải Docker Community Edition tại đây

Tạo Docker Image, tại thư mục gốc

touch docker-compose.yml

Mình đang sử dụng MySQL, docker image của MySQL, paste đoạn code này vào file

npm install -g prisma
3

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
1

xây dựng hình ảnh

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
2

Khởi tạo Prisma

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
3

Lăng kính vs mongodb

Prisma init sẽ khởi động tạo ra 2 tệp

  • npm install -g prisma
    4. File này sẽ chứa toàn bộ Schema. Ở đây Prisma cho chúng ta một lược đồ
    npm install -g prisma
    5 có sẵn. Chẳng hạn mình sẽ add thêm 1 Schema nữa đặt tên là
    npm install -g prisma
    6

    const posts = prisma.posts({ title: 'GraphQL API' })
    const newPost = prisma.createPost({
      title: 'Graphql API',
      description: 'Learning how to Writting GraphQL API',
      author: 'thuan',
    })
    7

  • npm install -g prisma
    7. Tệp này sẽ chứa các cấu hình cần thiết để triển khai lên Prisma Server bao gồm điểm cuối, datamodal, hooks, generate, v.v. (chúng ta sẽ cùng nhau đi tìm hiểu chi tiết ở những phần sau)

OK giờ có thể triển khai đc rồi. v

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
9

Lăng kính vs mongodb

Truy cập

npm install -g prisma
8 và thao tác một số câu
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
7 và
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
8

Lăng kính vs mongodb

KHởi tạo

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
8 có tên là
touch docker-compose.yml
2. Ở bên phải
touch docker-compose.yml
3 đã tạo cho chúng ta toàn bộ tài liệu và lược đồ mà chúng ta vừa tạo. Cùng với đó là các thao tác cơ bản ĐỌC, TẠO, CẬP NHẬT, XÓA

Xem toàn bộ danh sách người dùng

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
6

Tiếp theo là Tạo 1

npm install -g prisma
6 với và kết nối với
npm install -g prisma
5 vừa tạo thông tin qua
touch docker-compose.yml
6. Thực hiện đột biến
touch docker-compose.yml
7

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
0

Lăng kính vs mongodb

Nếu chúng ta muốn xem và chỉnh sửa những dữ liệu này trong Cơ sở dữ liệu thì có thể vào Prisma Admin thông qua URL.

touch docker-compose.yml
8

được rồi. Xong. Giờ nếu chúng ta muốn thao tác với Prisma thông qua mã thì sao nhỉ. ?

Tạo ứng dụng khách Prisma. Dán mã đoạn này vào

npm install -g prisma
7, bên dưới
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
10 và
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
11

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
1

Chạy

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
2

Khi này Prisma sẽ tạo cho chúng ta 1 thư mục

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
12 chứa tất cả các thao tác dựa trên tệp
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
13

Xây dựng ứng dụng Node đơn giản

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
3

Khởi tạo tệp

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
14 và cài đặt
const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
15 (thư viện này sẽ giúp chúng tôi sử dụng với Prisma Client vừa mới được tạo bên trên)

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
4

Oke, hãy viết một số mã. D

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
16

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
5

Chạy ứng dụng Node,

const posts = prisma.posts({ title: 'GraphQL API' })
const newPost = prisma.createPost({
  title: 'Graphql API',
  description: 'Learning how to Writting GraphQL API',
  author: 'thuan',
})
6

Và đây là kết quả, chúng ta cũng có thể kiểm tra trong Prisma Admin (

touch docker-compose.yml
8)

Lăng kính vs mongodb

Kết luận

Do đó, tại phần này, chúng tôi đã khởi động Cơ sở dữ liệu thành công. Phần tiếp theo chúng ta sẽ cùng đi xây dựng những chức năng cơ bản cho Diễn đàn