Table of Contents
Tóm tắt về REST?
Kiến trúc thiết kế API dùng tập phương thức KHÔNG trạng thái (stateless), bao gồm GET, POST, PUT và DELETE. Thông thường được trao đổi dưới định dạng JSON.
Lợi ích REST: Khả năng mở rộng, bạn có thể tách biệt Client và Server, đồng thời có thể mở rộng dễ dàng. Ngoài ra, REST cho phép nhiều định dạng dữ liệu khác nhau không chỉ JSON
Hạn chế của REST:
Fetching quá mức – Khi API cung cấp nhiều thông tin hơn so với yêu cầu của khách hàng.
Fetching hạn chế – Khi API không cung cấp tất cả thông tin bắt buộc. Vì vậy, client side phải thực hiện nhiều yêu cầu để có được mọi thứ mà ứng dụng cần.
Tóm tắt về GraphQL?
GraphQL là một kiến trúc thiết kế API sử dụng một cách tiếp cận khác, trong đó mọi thứ được coi như một biểu đồ kết nối với nhau. Bạn có thể thay đổi request của mình bất kỳ không cần phải thay đổi ở phía API và nhận chỉ tài nguyên bạn yêu cầu. Ngoài ra, nó cho phép bạn kết hợp các entity khác nhau thành một truy vấn duy nhất.
Lợi ích GraphQL:
Truy xuất dữ liệu chính xác và không dư, không thiếu. Một điểm cộng lớn.
Từ góc độ client app, việc phát triển sẽ nhanh và đỡ tốn thời gian. Thông thường, khi có những thay đổi về yêu cầu dữ liệu, bạn chỉ cần sửa đổi query và không cần thay đổi nhiều, quy trình phát triển sản phẩm trở nên chóng. Cả phía API server và client đều có khả năng hoạt động độc lập với điều kiện cả hai đều biết cấu trúc của dữ liệu.
Hạn chế của GraphQL:
Sẽ phức tạp đối với các ứng dụng đơn giản để có thể thiết lập các loại, truy vấn, v.v., vì nó sẽ được thực hiện dễ dàng bằng REST.
Sử dụng một endpoint cho tất cả truy vấn thay vì tuân theo đặc tả HTTP cho bộ nhớ đệm. Bộ nhớ đệm ở tầng mạng rất quan trọng vì nó có thể làm giảm lưu lượng truy cập đến máy chủ.
Ví dụ:
Chúng ta đang cần hiển thị new feed của user bao gồm danh sách bài post của user và những follower của người đó. Trong trường hợp này, ta phải hiển thị tác giả của bài post, các bài post cũng như những người follower của user đó.
Nếu sử dụng REST, ta sẽ gửi ít nhất 2 hoặc 3 request như sau:
/user/ để lấy chi tiết thông tin user (tác giả) có thể là tên.
/user//posts để lấy danh sách các bài đăng của người dùng đó.
/user//follower để lấy danh sách những người theo dõi cho người dùng.
Nhưng trong tất cả request trên, ta phải request quá nhiều dữ liệu. Ví dụ: trong yêu cầu đầu tiên, ta chỉ cần tên, nhưng lại nhận được tất cả thông tin chi tiết về user.
Đây là lúc GraphQL cho thấy sức mạnh của nó. Ta chỉ cần chỉ định truy vấn và chúng tôi có thể nhận được đầu ra mong muốn. Để đạt được điều tương tự khi sử dụng GraphQL, chúng ta có thể sử dụng duy nhất một query kiểu như sau:
query {
User(id: ‘123’) {
name
posts {
title
}
followers {
name
}
}
}
Kết luận
GraphQL chắc chắn có nhiều lợi thế hơn REST, nhưng không phải lúc nào cũng có thể triển khai tốt và nhanh chóng. Trong khi (gần như) mọi nền platform lớn đều đang support việc triển khai REST nhanh chóng, developer gần như không cần phải làm gì thêm để tạo ra một API sử dụng REST. GraphQL đòi hỏi những yêu cầu một số cài đặt cơ bản. GraphQL có đủ hấp dẫn để các ông lớn tích hợp vào trong hệ thống của họ (platform, thư viện, template, …) trong tương lai hay không vẫn còn là một dấu hỏi, nhưng sự phát triển của GraphQL gần đây đáng để bạn bắt đầu tìm hiểu về nó.