Hiểu được sự khác biệt giữa query và mutation trong GraphQL, bạn sẽ biết cách dùng chúng chính xác. Dưới đây là sự khác biệt chính giữa query và mutation trong GraphQL.
GraphQL là một ngôn ngữ truy vấn mạnh mẽ, cho phép các khách hàng chỉ yêu cầu dữ liệu họ cần từ server. Nó giúp bạn tăng tốc độ truy vấn bởi có thể tùy chỉnh các query để chỉ tìm nạp dữ liệu nhất định.
GraphQL có 2 kiểu hoạt động: query - truy vấn và mutation - đột biến. Dù có nhiều điểm tương đồng, chúng lại phục vụ cho các mục đích khác nhau.
Sự khác biệt giữa query và mutation trong GraphQL
Query và mutation giống nhau ở chỗ bạn dùng chúng để gửi yêu cầu tới GraphQL API. Tuy nhiên, chúng khác về mặt cú pháp, chế độ thực thi và cách sử dụng.
Cú pháp của query và mutation trong GraphQL
Cú pháp cơ bản của query GraphQL như sau:
query getProduct($id: ID!) {
product(id: $id) {
name
price
}
}
Giải mã chi tiết code:
- query là từ khóa xác định yêu cầu dưới dạng truy vấn.
- getProduct là tên hoạt động.
- $id là biến
- ID! Là kiểu biến
Nếu không cần các biến, loại bỏ chúng và xác định query như sau:
query getProducts {
products {
name
price
}
}
Trong một số tình huống, bạn có thể bỏ qua từ khóa query và name, viết một truy vấn GraphQL như sau:
products {
name
price
}
Dù mẫu code trên hoạt động, dùng từ khóa query vẫn dễ đọc hơn.
Cú pháp của mutation giống query ngoại trừ việc dùng từ khóa mutation.
mutation AddNewProduct ($name: String!, $price: Number!) {
addProduct(name: $name, price: $price) {
name
price
}
}
Các chế độ thực thi khác nhau
Điểm khác biệt khác giữa một query và mutation là các truy vấn chạy song song, còn mutation chạy đồng bộ. Khi chạy hai mutation, chúng sẽ lần lượt chạy theo thứ tự.
Cách dùng đối lập giữa query và mutation
Bạn chỉ nên dùng query cho các hoạt động READ. Ví dụ, dùng một query khi tìm nạp sản phầm từ một endpoint API.
Dùng mutation cho các tác vụ CREATE, UPDATE,DELETE. Chúng chủ yếu là những hoạt động làm thay đổi dữ liệu lưu trong database. Ví dụ, dùng một mutation khi cập nhật tên khách hàng qua endpoint đơn hàng.
Trên đây là sự khác biệt cơ bản giữa query và mutation trong GraphQL. Hi vọng bài viết hữu ích với các bạn.