GraphQL là gì? Giữa GraphQL và Rest có gì khác biệt? Hãy tìm câu trả lời cho mình trong bài viết dưới đây nhé!
GraphQL là gì?
GraphQL là ngôn ngữ truy vấn cho API được phát triển bởi Meta (Facebook). Nó cung cấp một giản đồ của dữ liệu trong API và cho phép client khả năng yêu cầu chính xác thứ họ cần. GraphQL đứng giữa client và backend services (dịch vụ phía backend). Nó có thể tổng hợp nhiều nguồn request vào trong một câu truy vấn đơn lẻ.
GraphQL còn đồng thời còn hỗ trợ mutations (biến dị) và subscriptions (đăng ký theo dõi).
Mutations là cách GraphQL áp dụng chỉnh sửa dữ liệu ở nguồn.
Subscriptions là cách GraphQL dùng để cho phép client nhận thông báo khi có thay đổi (thao tác) trên dữ liệu.
So sánh GraphQL và REST
Trong thực tế, cả GraphQL và REST đều gửi HTTP request (Yêu cầu) và nhận HTTP response (phản hồi). Điểm khác biệt nổi bật đó chính là REST xoay quay tài nguyên. Mỗi tài nguyên được xác định bởi một URL. Để lấy một cuốn sách từ một API kho sách, nó sẽ như thế này:
Với GraphQL, mọi thứ sẽ khác, nó sẽ không chỉ ra cách dữ liệu được lấy thông qua GraphQL. Để làm điều đó chúng ta cần định nghĩa câu truy vấn.
Bây giờ chúng ta có thể gửi request đến GraphQL endpoint để lấy dữ liệu.
Có thể thấy GraphQL và REST đều sử dụng HTTP và cả hai đều thực hiện request thông qua URL, và đều nhận phản hồi bằng JSON. Tuy nhiên, chúng cũng có những sự khác biệt sau đây
- GraphQL chỉ rõ chính xác nguồn tài nguyên nào mà chúng ta muốn, trường dữ liệu nào chúng ta muốn.
- Trong khi đó, REST, thì người thực hiện API quyết định cho chúng ta việc sẽ trả về tài nguyên gì. Còn GraphQL thì client sẽ quyết định điều đó.
- GraphQL không sử dụng URL để xác định nguồn tài nguyên nào có trong API, thay vào đó GraphQL sử dụng schema.
- Chúng ta có thể gửi một câu truy vấn phức tạp để lấy thêm dữ liệu. Để làm được điều tương tự đối với REST thì phức tạp hơn, chúng ta cần thực hiện nhiều requests để lấy thêm dữ liệu mình muốn.
Điểm yếu của GraphQL
Vẻ đẹp của REST chính là chúng ta không cần thêm thư viện để tiêu thụ (đọc) API của một người khác. Request đơn giản sẽ được gửi đi sử dụng các công cụ như cURL hoặc đơn giản là một trình duyệt web.
Ngược lại, GraphQL yêu cầu rất nhiều công cụ hỗ trợ, cho cả client và phía server. Điều này yêu cầu đầu tư ban đầu và có thể sẽ không hợp lý đôi khi chỉ để cho các CRUD APIs đơn giản. Bên cạnh đó, GraphQL còn khó hơn trong việc caching.
Bài viết có tham khảo: System Design Interview by Alex Xu & Sahn Lam
Bộ môn Công nghệ Thông tin
Trường Cao đẳng FPT Mạng cá cược bóng đá
cơ sở Đà Nẵng