+6

Khi nào chúng ta nghĩ đến Graphql

1. Nhu cầu thực tế

Hãy tưởng tượng có một chiếc máy bán hàng tự động. Để lấy một món đồ, chúng ta bấm một nút. Để lấy một món khác, chúng ta lại bấm một nút khác. Tương tự, nếu muốn lấy năm món đồ, chúng ta phải bấm năm nút khác nhau. Đây chính là cách tiếp cận của REST. Mỗi khi cần một phần dữ liệu, phía client sẽ thực hiện một yêu cầu mới. Quy trình này trở nên phức tạp và bất tiện khi chúng ta có thêm nhu cầu cần tổng hợp dữ liệu từ nhiều nguồn khác nhau trong hệ thống. Để giải quyết vấn đề này, anh em developer thường chọn một trong hai cách:

  1. Tổng hợp dữ liệu được thực hiện tại phía client quả bóng lúc này đã lăn đến chân của anh em mobile, web.
  2. Tạo các endpoint REST đặc biệt, nơi dữ liệu được tổng hợp tại tầng dịch vụ (service layer) và cung cấp một interface duy nhất cho client.

Thông thường mình sẽ ưu tiên lựa chọn cách (2) cho mọi yêu cầu bài toán để dễ dàng kiểm soát và dễ maintain. Những endpoint đặc biệt này tương tự như việc máy bán hàng tự động có các nút đặc biệt để chọn một tổ hợp món đồ nhất định. Mỗi nút đặc biệt xử lý một tổ hợp yêu cầu cụ thể. Nhưng câu hỏi đặt ra là: Chúng ta sẽ tạo bao nhiêu nút đặc biệt như vậy? Có thể có hàng trăm tổ hợp món đồ khác nhau. Ngay cả khi tạo ra hàng trăm nút, chúng ta không bao giờ chắc chắn rằng sẽ không có một khách hàng mới cần một tổ hợp cụ thể mà chúng ta chưa nghĩ đến. Vậy nên cách tiếp cận này không thể mở rộng.

Nhưng điều gì sẽ xảy ra nếu máy bán hàng tự động hỗ trợ tùy chọn chọn nhiều món cùng lúc chỉ bằng cách nhấn tổ hợp nút? Điều này giống như việc người dùng chỉ rõ cho máy chính xác những gì họ cần. Sau khi đặt hàng, người dùng nhận được tất cả những gì họ yêu cầu chỉ trong một lần hành động.

=> Đây cũng chính là bản chất của cách GraphQL hoạt động. Phía client chỉ cần chỉ rõ những gì nó cần, và GraphQL sẽ cung cấp tất cả dữ liệu trong một lần. Không cần thực hiện nhiều yêu cầu để thu thập dữ liệu nữa.

2. Thông tin kết nối

Nếu anh em muốn trao đổi thêm về bài viết, hãy kết nối với mình qua LinkedIn và Facebook:

Rất mong được kết nối và cùng thảo luận!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí