•8 min read

REST API vs GraphQL — Bạn nên dùng cái nào?

REST API vs GraphQL — Bạn nên dùng cái nào?
Kiến trúc API

REST

Click to reveal
Kiến trúc API
Representational State Transfer — Phong cách API truyền thống sử dụng nhiều endpoint với các phản hồi cố định. Sử dụng các động từ HTTP tiêu chuẩn (GET, POST, PUT, DELETE).

REST

Kiến trúc API

GraphQL

Click to reveal
Kiến trúc API
Ngôn ngữ truy vấn cho API — Một endpoint duy nhất nơi client chỉ định chính xác dữ liệu họ cần. Được Facebook phát triển vào năm 2012.

GraphQL

Hiệu suất API

Over-fetching

Click to reveal
Hiệu suất API
Lấy nhiều dữ liệu hơn mức cần thiết từ một endpoint. Phổ biến trong REST khi một endpoint trả về 50 trường nhưng bạn chỉ cần 2.

Over-fetching

Hiệu suất API

Vấn đề N+1

Click to reveal
Hiệu suất API
Thực hiện N+1 yêu cầu để lấy dữ liệu lồng nhau. Trong REST: lấy người dùng (1), sau đó là bài đăng của họ (N), sau đó là bình luận của mỗi bài đăng (N×M).

Vấn đề N+1

Mọi ứng dụng web đều cần di chuyển dữ liệu giữa frontend và backend. Hai mô hình nổi bật đã xuất hiện trong thập kỷ qua: REST và GraphQL. Tôi đã triển khai các API sản xuất với cả hai, và câu trả lời không phải là "cái này tốt hơn cái kia". Nó phụ thuộc vào người đang sử dụng API và mức độ phức tạp của các mối quan hệ dữ liệu.


Audio Briefing
0:00 / 0:00
Interactive Dev Tool
100% Client-Side & Private

cURL to Fetch, Python Requests & Go Converter

Instant code generator with client-side secret redaction

Paste any raw cURL command from Chrome DevTools or docs to instantly export clean JavaScript Fetch, Axios, Python Requests, async HTTPX, and Go net/http code.

Zero-LeakFetch / AxiosPython HTTPXGo net/http

Các đối thủ

REST (Representational State Transfer)

Các phương thức HTTP tiêu chuẩn (GET, POST, PUT, DELETE) trên nhiều endpoint. Mỗi endpoint trả về một cấu trúc dữ liệu do máy chủ định nghĩa — bạn nhận được những gì họ cung cấp.

GraphQL

Một ngôn ngữ truy vấn với một endpoint duy nhất. Client yêu cầu chính xác dữ liệu mà nó cần — không hơn, không kém.


Advertisement

Những điểm khác biệt chính

1. Lấy dữ liệu (Over-fetching so với Độ chính xác)

REST trả về bất cứ thứ gì máy chủ gửi. Truy cập /users/1 và bạn có thể nhận lại 50 trường trong khi tất cả những gì bạn cần là name của người dùng. GraphQL cho phép bạn chọn các trường bạn muốn. Phản hồi khớp với truy vấn của bạn, không có gì thừa.

Khía cạnhRESTGraphQL
Endpoints
Nhiều (ví dụ: /users, /posts)
Một (/graphql)
Hình dạng phản hồi
Máy chủ định nghĩa (cố định)
Client định nghĩa (linh hoạt)
Over-fetching
Phổ biến — lấy tất cả các trường
Không thể — chỉ chọn những gì cần thiết
Under-fetching
Có thể cần nhiều yêu cầu
Đã giải quyết — truy vấn lồng nhau
2. Vấn đề N+1 (Số lượng yêu cầu)

Cần một người dùng, bài đăng của họ và những người theo dõi họ? Với REST đó là ba yêu cầu riêng biệt. Với GraphQL đó là một.

Kịch bảnYêu cầu RESTYêu cầu GraphQL
Người dùng + Bài đăng + Bình luận
3+ yêu cầu
1 yêu cầu
Bảng điều khiển với 10 widget
10+ yêu cầu
1 yêu cầu
API di động (băng thông hạn chế)
Payload nặng
Payload tối thiểu
3. Quản lý phiên bản

Các API REST quản lý phiên bản thông qua URL (/api/v1/ so với /api/v2/). GraphQL bỏ qua điều này — thêm các trường mới, bỏ các trường cũ, không cần tăng phiên bản.


So sánh kiến trúc


Bạn nên chọn cái nào?

Khi nào nên chọn REST

Yếu tốƯu điểm của REST
API đơn giản
Thiết lập nhanh hơn, ít công cụ hơn
HTTP Caching
Bộ nhớ đệm trình duyệt/CDN hoạt động ngay lập tức
API công khai/bên thứ ba
Dễ hiểu, dễ dàng cho các nhà phát triển bên ngoài
Kinh nghiệm nhóm
Hầu hết các nhà phát triển backend đều hiểu rõ REST

Khi nào nên chọn GraphQL

Yếu tốƯu điểm của GraphQL
Mô hình dữ liệu phức tạp
Truy vấn lồng nhau rõ ràng thay vì hỗn loạn JOIN
Nhiều Client
Mỗi client (Web/iOS/Android) nhận chính xác những gì nó cần
Quan trọng về hiệu suất
Loại bỏ over-fetching, giảm kích thước payload
Schema đang phát triển
Thêm trường mà không cần quản lý phiên bản, loại bỏ một cách duyên dáng

Advertisement

Tiện ích nhà phát triển tương tác: Bộ chuyển đổi cURL sang mã Client

Một trong những siêu năng lực thực tế lớn nhất của REST là khả năng kiểm thử dòng lệnh phổ biến thông qua curl. Cho dù bạn đang kiểm tra các endpoint, sao chép payload webhook hay chuyển đổi tài liệu API thành mã client, hãy dán bất kỳ đoạn curl thô nào bên dưới để chuyển đổi nó thành JavaScript Fetch, Axios, Python Requests, async HTTPX, Go hoặc Rust an toàn về kiểu:


Quan điểm của tôi

Nếu bạn đang xây dựng một thứ gì đó đơn giản — một ứng dụng CRUD, một API công khai cho các nhà phát triển bên thứ ba hoặc một công cụ nội bộ — hãy bắt đầu với REST. Nó được hiểu rõ, bộ nhớ đệm hoạt động tự nhiên và bạn sẽ triển khai nhanh hơn. Nếu bạn đang xây dựng một ứng dụng nặng về dữ liệu với nhiều client (web, iOS, Android) mà mỗi client cần các phần khác nhau của cùng một dữ liệu, sự phức tạp ban đầu của GraphQL sẽ tự đền đáp từ client thứ hai trở đi.

Thiết kế API GraphQL REST Kiến trúc

Bạn cũng có thể thích

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement