Tổng quan
Khi tạo một Server, có nhiều cách tiếp cận để thiết kế API dùng trong việc giao tiếp như SOAP, REST, GraphQL.
REST API cố định những gì bạn sẽ nhận được, đôi khi một request không thể lấy được hết những thứ bạn cần hoặc đôi khi dữ liệu trả về lại thừa thãi không sử dụng GraphQL lại khác, client có thể xác định được những dữ liệu cần thiết, cũng như có thể gọi được nhiều query trong một lần call api duy nhất
Sơ lược về GraphQL
GraphQL được Facebook (hiện tại là Meta) phát triển vào năm 2012 để sử dụng trong nội bộ và chính thức phát hành vào 2015, nó được sinh ra nhằm mục đích thay thế cho REST API khi mà facebook đã trở nên quá lớn và cần xử lý rất nhiều data khiến cho REST API trở nên quá cồng kềnh.
GraphQL là ngôn ngữ truy vấn – thao tác với dữ liệu (data manipulation language) cho phép client yêu cầu chính xác dữ liệu cần thiết.
Giả sử, khi bạn truy vấn data user ở REST API, bạn sẽ luôn nhận được data giống nhau cho mọi truy vấn khiến cho đôi khi một số thông tin không cần thiết cũng được trả về, trong khi với GraphQL, với tính năng chỉ cần hiển thị email, username, thì bạn chỉ cần truy vấn đúng 2 trường đó, giúp giảm băng thông và tăng hiệu suất.
Khi máy chủ nhận được một request, đầu tiên nó sẽ kiểm tra xem query đùng dể truy vấn có chính xác hay không, sau đó câu lệnh sẽ được chuyển tới resolver để xử lý dữ liệu, sau cùng dữ liệu sẽ được lọc để lấy các trường được client yêu cầu và trả về.
Ưu điểm
- Giảm thiểu lượng dữ liệu truyền qua mạng: GraphQL cho phép client chỉ định chính xác dữ liệu cần lấy, từ đó giảm bớt lượng dữ liệu không cần thiết truyền qua mạng, cải thiện hiệu suất và tăng tốc độ phản hồi của ứng dụng.
- Tính linh hoạt: GraphQL cho phép truy vấn dữ liệu từ nhiều nguồn khác nhau trong cùng một lời truy vấn. Điều này giúp cho việc phát triển ứng dụng trở nên dễ dàng và linh hoạt hơn.
- Tính tương thích: GraphQL là một ngôn ngữ truy vấn độc lập với bất kỳ nền tảng hay ngôn ngữ lập trình nào. Vì vậy, nó có thể được sử dụng cho bất kỳ ứng dụng nào, đồng thời hỗ trợ các công nghệ như React, Vue, Angular, NodeJS, Python, Java, Ruby,…
- Định dạng dữ liệu trả về linh hoạt: GraphQL cho phép client chỉ định định dạng dữ liệu trả về. Điều này giúp cho việc hiển thị dữ liệu trở nên linh hoạt hơn, giảm bớt sự phụ thuộc vào cấu trúc của backend.
- Hỗ trợ tốt cho việc tạo API: GraphQL cung cấp nhiều công cụ cho việc tạo API, giúp phát triển ứng dụng nhanh hơn và dễ dàng hơn.
So sánh GraphQL với REST
Hiệu suất
REST cố định dữ liệu trả về cho từng endpoint cho nên đôi khi có thể gây ra hiện tượng over-fetching (dữ liệu lấy ra dư thừa) hoặc under-fetching (dữ liệu lấy ra bị thiếu) nên lại phải gọi thêm API để lấy thêm data làm giảm hiệu suất
GraphQL linh hoạt hơn và cho phép người dùng xác định dữ liệu cần thiết, ngoài ra việc cho phép gọi nhiều query trong cùng một lần fetch giúp giảm giao tiếp qua lại giữa client và server, giúp tăng hiệu suất
HTTP
REST sử dụng nhiều endpoint cũng như nhiều phương thức HTTP cho từng hành động khác nhau như GET, POST, PUT, PATCH, … và status code trả về cũng tùy từng trường hợp
Trong khi đó, GraphQL hầu như chỉ sử dụng một endpoint cũng như một phương thức là POST để gửi request, khi dữ liệu trả về, nếu request thành công hoặc chỉ là lỗi đơn giản thì HTTP Status Code luôn là 200, tuy nhiên trong một số trường hợp lỗi nghiêm trọng, HTTP Status Code có thể là 500
Schema
GraphQL có Schema xác định rõ ràng kiểu dữ liệu, mối quan hệ giữa chúng và người dùng phải tuân thủ theo Schema đó, đảm bảo tính nhất quán và bảo mật
REST API không sử dụng Schema, dữ liệu trả về tùy thuộc vào thiết kế của từng endpoint
Những điểm nổi trội của GraphQL so với REST
- Efficiency: GraphQL cho phép lấy dữ liệu chỉ cần một yêu cầu duy nhất, trong khi REST thường yêu cầu nhiều yêu cầu riêng biệt để lấy dữ liệu từ nhiều endpoint khác nhau. Điều này giúp giảm tải cho máy chủ và tăng hiệu suất ứng dụng
- Flexibility: GraphQL cho phép người dùng lựa chọn các trường dữ liệu mà họ muốn lấy, trong khi REST trả về tất cả các trường dữ liệu có sẵn trên endpoint. Điều này giúp tránh tình trạng dư thừa dữ liệu và giảm lượng dữ liệu được truyền giữa máy khách và máy chủ.
- Type System: GraphQL có hệ thống kiểu dữ liệu rõ ràng hơn REST, cho phép định nghĩa các kiểu dữ liệu đơn giản hoặc phức tạp, giúp xác định các yêu cầu hợp lệ từ phía máy khách và trả về dữ liệu đúng định dạng từ phía máy chủ.
- Tooling: GraphQL được hỗ trợ bởi các công cụ và thư viện tốt hơn so với REST, giúp dễ dàng tạo ra các tài liệu API tự động, kiểm tra lỗi, và đơn giản hóa việc phát triển và bảo trì ứng dụng
Tạm kết
Qua bài viết trên, chúng ta đã tìm hiểu cơ bản GraphQL là gì cũng như ưu điểm của nó so với REST API. Với những tính năng được cung cấp và đang được phát triển, trong tương lai có lẽ GraphQL sẽ trở nên phổ biến hơn nữa.
Tham khảo
https://aws.amazon.com/vi/compare/the-difference-between-graphql-and-rest