GraphQL và REST là hai cách tiếp cận khác nhau trong việc thiết kế API để trao đổi dữ liệu qua Internet. REST cho phép các ứng dụng máy khách trao đổi dữ liệu với một máy chủ bằng cách sử dụng các động từ HTTP, vốn là giao thức giao tiếp chuẩn của Internet. Mặt khác, GraphQL là một ngôn ngữ truy vấn API xác định các thông số kỹ thuật về cách thức ứng dụng khách yêu cầu dữ liệu từ máy chủ từ xa phải như thế nào. Bạn có thể sử dụng GraphQL trong lệnh gọi API của mình mà không cần dựa vào ứng dụng phía máy chủ để xác định yêu cầu. Cả GraphQL và REST đều là những công nghệ mạnh mẽ đứng sau hầu hết các ứng dụng hiện đại.
Cả GraphQL và REST đều là các kiểu kiến trúc API phổ biến cho phép trao đổi dữ liệu giữa các dịch vụ hoặc ứng dụng khác nhau trong một mô hình máy khách – máy chủ.
API tạo điều kiện cho việc truy cập dữ liệu và các thao tác dữ liệu như:
REST và GraphQL cho phép bạn tạo, sửa đổi, cập nhật và xóa dữ liệu trên một ứng dụng, dịch vụ hoặc mô-đun riêng biệt thông qua API. API được phát triển với REST được gọi là API RESTful hoặc API REST. API được phát triển với GraphQL chỉ đơn giản là API GraphQL.
Đội ngũ frontend và backend sử dụng các kiến trúc API này để tạo ra các ứng dụng dạng mô-đun và có thể truy cập. Sử dụng kiến trúc API giúp hệ thống được bảo mật, ở dạng mô-đun và có quy mô linh hoạt. Kiến trúc API cũng làm cho hệ thống đạt hiệu năng cao hơn và dễ dàng tích hợp với các hệ thống khác.
Tiếp theo, chúng ta sẽ thảo luận về một số điểm tương đồng khác giữa GraphQL và REST.
Cả REST và GraphQL đều thực hiện một số nguyên tắc kiến trúc API phổ biến. Ví dụ: cả hai đều có chung các nguyên tắc sau:
REST và GraphQL đều thiết kế việc trao đổi dữ liệu của mình xung quanh tài nguyên. Tài nguyên được hiểu là bất kỳ dữ liệu hoặc đối tượng nào mà máy khách có thể truy cập và thao tác thông qua API. Mỗi tài nguyên có mã định danh duy nhất riêng (URI) và một tập hợp các thao tác (phương thức HTTP) mà máy khách có thể thực hiện trên đó.
Ví dụ: hãy xem xét một API mạng xã hội nơi người dùng tạo và quản lý bài đăng. Trong API dựa trên tài nguyên, bài đăng sẽ là một tài nguyên. Nó có mã định danh duy nhất riêng, ví dụ: /posts/1234. Đồng thời, nó có một tập hợp các thao tác, như GET để truy xuất bài đăng trong REST hoặc query (truy vấn) để truy xuất bài đăng trong GraphQL.
Cả REST và GraphQL đều hỗ trợ các định dạng dữ liệu giống nhau.
JSON là định dạng trao đổi dữ liệu phổ biến nhất mà tất cả các ngôn ngữ, nền tảng và hệ thống đều hiểu được. Máy chủ trả về dữ liệu JSON cho máy khách. Các định dạng dữ liệu khác có được hỗ trợ nhưng ít được sử dụng hơn, bao gồm XML và HTML.
Tương tự, REST và GraphQL đều hỗ trợ khả năng ghi vào bộ nhớ đệm. Vì vậy, máy khách và máy chủ có thể lưu dữ liệu thường xuyên được truy cập vào bộ nhớ đệm để tăng tốc độ giao tiếp.
Cả API GraphQL và REST đều hoạt động với bất kỳ cấu trúc cơ sở dữ liệu và ngôn ngữ lập trình nào, cả phía máy khách và phía máy chủ. Do vậy, các API này có khả năng tương tác cao với mọi ứng dụng.
GraphQL xuất hiện vào năm 2012 để đáp ứng nhu cầu về tốc độ trong các nền tảng mạng xã hội mới nổi. Các nhà phát triển nhận thấy rằng các kiến trúc API hiện có, như REST, có cấu trúc và quá dài để tạo ra nguồn cấp tin tức một cách hiệu quả.
Tiếp theo, chúng ta sẽ thảo luận về một số thách thức mà các API này phải đối mặt.
API REST đòi hỏi các yêu cầu máy khách phải tuân theo một cấu trúc cố định để nhận tài nguyên. Cấu trúc cứng nhắc này rất dễ sử dụng, nhưng không phải lúc nào cũng là phương tiện hiệu quả nhất để trao đổi chính xác dữ liệu cần.
API REST luôn trả về một tập dữ liệu toàn bộ. Ví dụ: từ một đối tượng person (người) trong API REST, bạn sẽ nhận được tên, ngày sinh, địa chỉ và số điện thoại của người đó. Bạn sẽ nhận được tất cả dữ liệu này ngay cả khi bạn chỉ cần lấy số điện thoại.
Tương tự, nếu bạn muốn biết số điện thoại của một người và lần mua gần đây nhất, bạn sẽ cần nhiều yêu cầu API REST. URL /person sẽ trả về số điện thoại và URL /purchase sẽ trả về lịch sử mua hàng.
Các nhà phát triển mạng xã hội đã phải viết rất nhiều mã chỉ để xử lý các yêu cầu API, điều này ảnh hưởng đến hiệu năng và trải nghiệm người dùng.
GraphQL xuất hiện như một giải pháp dựa trên truy vấn. Truy vấn có thể trả về dữ liệu chính xác chỉ trong một trao đổi yêu cầu và phản hồi API.
API REST là một khái niệm kiến trúc cho giao tiếp ứng dụng. Trong khi đó, GraphQL là một thông số kỹ thuật, một ngôn ngữ truy vấn API và một bộ công cụ. GraphQL hoạt động trên một điểm cuối duy nhất bằng HTTP.
Ngoài ra, quá trình phát triển REST tập trung nhiều hơn vào việc tạo ra các API mới. Trong khi đó, GraphQL tập trung vào hiệu năng và tính linh hoạt của API.
Tiếp theo, chúng tôi sẽ chỉ ra thêm một số điểm khác biệt nữa.
Dưới đây là những thứ mà một yêu cầu REST sử dụng để hoạt động:
Ví dụ: bạn sử dụng GET để có được dữ liệu chỉ đọc từ một tài nguyên, POST để thêm một mục tài nguyên mới, hoặc PUT để cập nhật một tài nguyên.
Ngược lại, đây là những thứ mà các yêu cầu GraphQL sử dụng:
Định dạng dữ liệu mô tả cách bạn muốn máy chủ trả về dữ liệu, bao gồm các đối tượng và trường phù hợp với lược đồ phía máy chủ. Bạn cũng có thể nhập dữ liệu mới. Trong nội bộ, GraphQL gửi mọi yêu cầu máy khách dưới dạng một yêu cầu HTTP POST.
Theo kiến trúc REST, dữ liệu được trả về cho máy khách từ máy chủ trong cấu trúc “toàn bộ tài nguyên” do máy chủ chỉ định. Các ví dụ sau đây thể hiện dữ liệu trả về trong REST và GraphQL.
Trong REST, GET /posts trả về như sau:
[
{
“id”: 1,
“title”: “Bài đăng đầu tiên”,
“content”: “Đây là nội dung của bài đăng đầu tiên.”
},
{
“id”: 2,
“title”: “Bài đăng thứ hai”,
“content”: “Đây là nội dung của bài đăng thứ hai.”
},
{
“id”: 3,
“title”: “Bài đăng thứ ba”,
“content”: “Đây là nội dung của bài đăng thứ ba.”
}
]
Khi bạn sử dụng GraphQL, chỉ có dữ liệu được chỉ định trong cấu trúc do máy khách đưa ra mới được trả về.
GET /graphql?query{post(id: 1) {id title content}} chỉ trả về bài đăng đầu tiên:
{
“data”: {
“posts”: [
{
“id”: “1”,
“title”: “Bài đăng đầu tiên”,
“content”: “Đây là nội dung của bài đăng đầu tiên.”
},
]}}
GraphQL sử dụng lược đồ phía máy chủ để xác định dữ liệu và dịch vụ dữ liệu, khác với API REST.
Lược đồ được viết bằng ngôn ngữ định nghĩa lược đồ GraphQL, bao gồm các chi tiết như sau:
Lược đồ xác định rõ ràng loại để mô tả tất cả dữ liệu có sẵn trên hệ thống và cách máy khách có thể truy cập hoặc sửa đổi dữ liệu đó.
Trong khi đó, API REST không yêu cầu lược đồ phía máy chủ. Nhưng bạn có thể chọn xác định lược đồ để thiết kế API, tài liệu và phát triển máy khách hiệu quả.
Khi API phát triển, các cấu trúc và thao tác dữ liệu của chúng có thể thay đổi. Đối với các máy khách không có kiến thức về những thay đổi này, việc thay đổi có thể phá vỡ hệ thống của máy khách hoặc gây ra các lỗi không xác định.
API REST thường bao gồm lập phiên bản trong URL để giải quyết vấn đề này, như https://example.com/api/v1/person/12341. Tuy nhiên, lập phiên bản là không bắt buộc và có thể gây ra lỗi.
GraphQL yêu cầu khả năng tương thích ngược API. Vì vậy, các trường bị xóa trả về một thông báo lỗi, hoặc những trường có thẻ deprecated (không còn được đề xuất sử dụng) trả về một cảnh báo.
GraphQL là một kiến trúc API được định kiểu mạnh, nghĩa là GraphQL yêu cầu mô tả chi tiết về dữ liệu, cấu trúc dữ liệu và các thao tác dữ liệu trong lược đồ. Do mức độ chi tiết trong lược đồ, hệ thống có thể tự động xác định lỗi yêu cầu và đưa ra các thông báo lỗi hữu ích.
API REST được định kiểu yếu và bạn phải xây dựng quy trình xử lý lỗi vào mã xung quanh. Ví dụ: nếu một yêu cầu PUT phân tích cú pháp một giá trị số dưới dạng văn bản thay vì dạng số nguyên, hệ thống sẽ không tự động xác định lỗi.
REST | GraphQL | |
Đó là gì? | REST là một tập hợp các quy tắc định hình quá trình trao đổi dữ liệu có cấu trúc giữa một máy khách và một máy chủ. | GraphQL là một ngôn ngữ truy vấn, kiểu kiến trúc và tập hợp các công cụ để tạo và thao tác với các API. |
Trường hợp sử dụng phù hợp nhất | REST phù hợp với các nguồn dữ liệu đơn giản trong đó tài nguyên được xác định rõ ràng. | GraphQL phù hợp với các nguồn dữ liệu lớn, phức tạp và liên quan đến nhau. |
Truy cập dữ liệu | REST có nhiều điểm cuối dưới dạng URL để xác định tài nguyên. | GraphQL có một điểm cuối URL duy nhất. |
Dữ liệu trả về | REST trả về dữ liệu theo một cấu trúc cố định do máy chủ xác định. | GraphQL trả về dữ liệu theo một cấu trúc linh hoạt do máy khách xác định. |
Cách dữ liệu được cấu trúc và xác định | Dữ liệu REST định kiểu yếu. Vì vậy, máy khách phải quyết định cách diễn giải dữ liệu đã định dạng khi dữ liệu được trả về. | Dữ liệu GraphQL định kiểu mạnh. Vì vậy, máy khách nhận dữ liệu theo định dạng đã xác định trước và cả hai bên cùng hiểu. |
Kiểm tra lỗi | Với REST, khách hàng phải kiểm tra xem dữ liệu trả về có hợp lệ hay không. | Với GraphQL, các yêu cầu không hợp lệ thường bị cấu trúc lược đồ từ chối. Điều này làm xuất hiện một thông báo lỗi được tự động tạo. |
Amazon Web Services (AWS) giúp bạn xây dựng và cung cấp các API được quản lý tốt hơn.
AWS AppSync tạo ra các API GraphQL phi máy chủ và API gửi – đăng ký nhận (pub/sub). Chúng đơn giản hóa quá trình phát triển ứng dụng thông qua một điểm cuối duy nhất để truy vấn, cập nhật hoặc phát hành dữ liệu một cách an toàn.
Với AWS AppSync, bạn tạo ra các API để cho phép khách hàng thực hiện các thao tác sau:
Tương tự như vậy, Cổng API Amazon là dịch vụ được quản lý toàn phần giúp bạn dễ dàng tạo, phát hành, duy trì, giám sát và bảo vệ API ở mọi quy mô.
Dưới đây là những cách bạn có thể được lợi bằng cách sử dụng Cổng API:
Bắt đầu sử dụng GraphQL và REST trên AWS bằng cách tạo tài khoản ngay hôm nay.
Nguồn: https://aws.amazon.com/vi/compare/the-difference-between-graphql-and-rest/
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE