Khi bắt đầu xây dựng một ứng dụng web hay mobile, một trong những quyết định quan trọng nhất mà team backend phải đưa ra là: dùng REST API hay GraphQL? Cả hai đều là những cách phổ biến để giao tiếp giữa client và server, nhưng chúng có triết lý thiết kế hoàn toàn khác nhau. Bài viết này sẽ giúp bạn hiểu rõ từng loại và đưa ra lựa chọn phù hợp.
1. REST API là gì?
REST (Representational State Transfer) là kiến trúc thiết kế API ra đời từ năm 2000 và đến nay vẫn là lựa chọn phổ biến nhất trong ngành. REST hoạt động dựa trên giao thức HTTP với các phương thức quen thuộc: GET, POST, PUT, DELETE.
Mỗi "tài nguyên" (resource) trong hệ thống sẽ có một endpoint riêng:
GET /users → Lấy danh sách users
GET /users/1 → Lấy thông tin user có id = 1
POST /users → Tạo user mới
PUT /users/1 → Cập nhật user có id = 1
DELETE /users/1 → Xóa user có id = 1REST đơn giản, dễ hiểu và được hỗ trợ bởi mọi ngôn ngữ, framework, công cụ trên thị trường.


![[第2部分] REST API 组件及其解读方法 - Skiplevel - 幂简集成](https://kajabi-storefronts-production.kajabi-cdn.com/kajabi-storefronts-production/file-uploads/blogs/2147485434/images/315487-7af3-d17-c8af-0b4d8af188db_rest-api-model-diagram.png)
2. GraphQL là gì?
GraphQL là ngôn ngữ truy vấn API được Facebook phát triển nội bộ từ năm 2012 và công bố mã nguồn mở vào năm 2015. Thay vì có nhiều endpoint khác nhau như REST, GraphQL chỉ có một endpoint duy nhất (thường là /graphql) và client tự mô tả chính xác dữ liệu mình cần.
Ví dụ, thay vì gọi 3 endpoint riêng để lấy thông tin user, danh sách bài viết và bình luận, bạn chỉ cần một query GraphQL:
graphql
query {
user(id: 1) {
name
email
posts {
title
comments {
content
}
}
}
}Server sẽ trả về đúng những gì bạn yêu cầu, không hơn không kém.
3. Điểm khác biệt cốt lõi
Over-fetching và Under-fetching
Đây là vấn đề kinh điển của REST mà GraphQL giải quyết triệt để.
Over-fetching: REST trả về toàn bộ dữ liệu của một endpoint dù bạn chỉ cần 2-3 trường. Ví dụ gọi
GET /users/1nhưng chỉ cầnnamevàemail, REST vẫn trả về cảaddress,phone,createdAt...Under-fetching: Để hiển thị một màn hình, bạn phải gọi nhiều endpoint khác nhau (user + posts + comments), dẫn đến nhiều round-trip lên server.
GraphQL giải quyết cả hai bằng cách cho client kiểm soát hoàn toàn dữ liệu trả về.
Versioning
Với REST, khi API thay đổi bạn thường phải tạo phiên bản mới (/api/v1, /api/v2) để không phá vỡ các client cũ. Với GraphQL, bạn chỉ cần thêm field mới vào schema mà không cần versioning, vì client chỉ lấy đúng những field họ khai báo.
Độ phức tạp
REST đơn giản hơn để setup và debug. GraphQL đòi hỏi bạn phải định nghĩa schema, resolver và học thêm một số khái niệm mới như mutation, subscription.
4. REST API phù hợp khi nào?



REST là lựa chọn tốt khi:
Dự án có quy mô nhỏ đến vừa, team chưa có kinh nghiệm với GraphQL
API cần được public ra ngoài cho bên thứ ba tích hợp (REST dễ hiểu và có tài liệu phong phú hơn)
Ứng dụng có cấu trúc dữ liệu đơn giản, ít quan hệ phức tạp giữa các resource
Cần caching tầng HTTP dễ dàng (REST tận dụng tốt HTTP cache mặc định của browser và CDN)
Team muốn onboard nhanh thành viên mới mà không mất nhiều thời gian training
5. GraphQL phù hợp khi nào?


GraphQL tỏa sáng trong những tình huống:
Ứng dụng có dữ liệu phức tạp, nhiều quan hệ lồng nhau (mạng xã hội, e-commerce, dashboard)
Cùng một backend phục vụ nhiều loại client khác nhau (web, mobile iOS, mobile Android) với nhu cầu dữ liệu khác nhau
Ứng dụng mobile nơi băng thông là yếu tố quan trọng — GraphQL giúp giảm lượng dữ liệu truyền đi đáng kể
Team có đủ kinh nghiệm và muốn tối ưu trải nghiệm developer ở phía frontend
Dự án cần real-time với GraphQL Subscriptions
6. Bảng so sánh nhanh
Tiêu chí | REST API | GraphQL |
|---|---|---|
Số endpoint | Nhiều | Một |
Kiểm soát dữ liệu | Server quyết định | Client quyết định |
Over/Under-fetching | Có thể xảy ra | Không |
Độ phức tạp setup | Thấp | Cao hơn |
Versioning | Cần thiết | Không cần |
Caching HTTP | Dễ dàng | Phức tạp hơn |
Phù hợp | API đơn giản, public | App phức tạp, nhiều client |
Kết luận: Không có câu trả lời tuyệt đối
REST và GraphQL không phải là cuộc chiến "cái nào tốt hơn" — mà là "cái nào phù hợp hơn với bài toán của bạn". Nhiều hệ thống lớn còn dùng cả hai song song: REST cho các endpoint đơn giản, public API; GraphQL cho các tính năng phức tạp phía client.
Nếu bạn đang bắt đầu một dự án mới và team chưa có kinh nghiệm với GraphQL, hãy bắt đầu với REST — nó sẽ giúp bạn ra sản phẩm nhanh hơn. Khi dự án lớn dần và bạn bắt đầu cảm thấy "đau" với over-fetching hay quản lý nhiều endpoint, đó là lúc nên cân nhắc migrate sang GraphQL.