Khi xây dựng frontend, debug client hoặc học một thư viện HTTP mới, bạn thường cần một endpoint trả về JSON “giống thật” mà không phải dựng backend. Dummy API giải quyết đúng nhu cầu đó: một API công khai, miễn phí, có thể gọi ngay để lấy dữ liệu mẫu. Bài viết này hướng dẫn cách chọn dummy API phù hợp, gọi chúng bằng curl, fetch, Python, và khi nào nên chuyển sang tự xây dựng fake REST API của riêng bạn. Nếu bạn muốn nắm nền tảng về cách gọi API từ trình duyệt, hãy xem thêm hướng dẫn Fetch API của MDN.
Dummy API thực chất là gì?
Dummy API là một dịch vụ được host sẵn, trả về JSON mẫu cho các tài nguyên phổ biến như:
- Users
- Posts
- Comments
- Products
- Carts
- Todos
Bạn không cần đăng ký, không cần database và không phải lo ảnh hưởng dữ liệu production.
Hầu hết dummy API hỗ trợ các method quen thuộc:
GET
POST
PUT
PATCH
DELETE
Tuy nhiên, cần lưu ý: các thao tác ghi thường chỉ là giả lập. Ví dụ, khi bạn gửi POST, server có thể trả về payload kèm một id, nhưng dữ liệu đó không được lưu bền vững.
Nên dùng dummy API khi bạn cần:
- Prototype nhanh UI
- Test logic gọi API
- Học
fetch, Axios, React Query, SWR - Demo phân trang, loading state, empty state
Không nên dùng dummy API khi bạn cần:
- Schema đúng với sản phẩm của bạn
- Dữ liệu có trạng thái
- Test lỗi tùy chỉnh như
429,500, timeout - Đồng bộ với hợp đồng OpenAPI thật
Các dummy API và fake API miễn phí tốt nhất để kiểm thử
Dưới đây là các API công khai hữu ích nhất cho developer. Tất cả đều miễn phí và không yêu cầu bạn tự dựng backend.
1. JSONPlaceholder
JSONPlaceholder là lựa chọn kinh điển để test các request đọc dữ liệu.
Nó cung cấp các tài nguyên liên quan với nhau:
postscommentsalbumsphotostodosusers
Ví dụ gọi một bài viết:
curl https://jsonplaceholder.typicode.com/posts/1
Response mẫu:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit..."
}
Bạn cũng có thể test quan hệ dữ liệu, ví dụ lấy comments của một post:
curl https://jsonplaceholder.typicode.com/posts/1/comments
Ví dụ POST:
curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{
"title": "Hello API",
"body": "Testing dummy API",
"userId": 1
}'
JSONPlaceholder sẽ trả về một object có id, nhưng dữ liệu không được lưu thật.
2. DummyJSON
DummyJSON phù hợp hơn nếu bạn cần dữ liệu gần với ứng dụng thực tế, đặc biệt là e-commerce.
Nó có các nhóm dữ liệu như:
- Products
- Carts
- Users
- Posts
- Comments
- Quotes
- Todos
- Recipes
Lấy thông tin một sản phẩm:
curl https://dummyjson.com/products/1
Tìm kiếm sản phẩm:
curl "https://dummyjson.com/products/search?q=phone"
Phân trang danh sách sản phẩm:
curl "https://dummyjson.com/products?limit=10&skip=20"
DummyJSON cũng có auth flow để thực hành lưu token:
curl -X POST https://dummyjson.com/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "emilys",
"password": "emilyspass"
}'
Response sẽ bao gồm token để bạn test các request đã xác thực mà không cần tích hợp identity provider thật.
3. reqres.in
reqres.in tập trung vào vòng đời request/response:
- List users
- Single user
- Register
- Login
- Delayed response
Điểm cần lưu ý: gói miễn phí hiện yêu cầu API key header.
curl https://reqres.in/api/users/2 \
-H "x-api-key: reqres-free-v1"
Nếu thiếu header này, bạn có thể nhận lỗi 401.
Ví dụ test response trễ:
curl "https://reqres.in/api/users?delay=3" \
-H "x-api-key: reqres-free-v1"
Endpoint này hữu ích để kiểm tra loading state hoặc skeleton UI.
Khi nào nên dùng từng dummy API?
| Dummy API | Tốt nhất cho | Luồng xác thực | Khả năng lưu dữ liệu |
|---|---|---|---|
| JSONPlaceholder | Dữ liệu blog, quan hệ lồng nhau | Không | Giả lập, không lưu |
| DummyJSON | E-commerce, giỏ hàng, đăng nhập | Có token | Giả lập, không lưu |
| reqres.in | Phân trang, đăng ký, đăng nhập, delay | Header API key | Giả lập, không lưu |
Nếu bạn muốn thêm lựa chọn ngoài ba API trên, danh sách các API công khai để kiểm thử có nhiều lựa chọn chuyên biệt hơn. Khi cần dữ liệu theo chủ đề như thời tiết, tiền tệ hoặc nội dung mẫu, bạn cũng có thể tham khảo danh sách API công khai miễn phí cho developer.
Cách gọi dummy API trong code
Việc gọi dummy API giống như gọi bất kỳ HTTP endpoint nào khác.
Gọi bằng JavaScript fetch
Ví dụ đọc thông tin user từ DummyJSON:
const res = await fetch('https://dummyjson.com/users/1');
if (!res.ok) {
throw new Error(`Request failed: ${res.status}`);
}
const user = await res.json();
console.log(user.firstName);
console.log(user.email);
Ví dụ tạo user mới:
const res = await fetch('https://dummyjson.com/users/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
firstName: 'Ada',
lastName: 'Lovelace',
age: 28,
}),
});
if (!res.ok) {
throw new Error(`Request failed: ${res.status}`);
}
const createdUser = await res.json();
console.log(createdUser);
Lưu ý: object trả về có thể có id, nhưng dữ liệu không được lưu thật trên server.
Gọi bằng Axios
import axios from 'axios';
const { data } = await axios.get('https://dummyjson.com/products/1');
console.log(data.title);
console.log(data.price);
Xử lý lỗi cơ bản:
import axios from 'axios';
try {
const { data } = await axios.get('https://dummyjson.com/products/999999');
console.log(data);
} catch (error) {
if (error.response) {
console.error('Status:', error.response.status);
console.error('Body:', error.response.data);
} else {
console.error('Network error:', error.message);
}
}
Gọi bằng Python
import requests
response = requests.get("https://jsonplaceholder.typicode.com/todos/1")
response.raise_for_status()
todo = response.json()
print(todo)
Ví dụ gửi POST:
import requests
payload = {
"title": "Learn dummy API",
"completed": False,
"userId": 1
}
response = requests.post(
"https://jsonplaceholder.typicode.com/todos",
json=payload
)
response.raise_for_status()
print(response.json())
Nếu bạn cần dữ liệu kiểm thử đáng tin cậy hơn cho assertion, hướng dẫn về tạo dữ liệu kiểm thử API thực tế giải thích cách tạo tên, email, timestamp và dữ liệu mẫu gần với production hơn thay vì dùng các giá trị như test123.
Khi dummy API công khai không còn đủ
Dummy API công khai rất tiện cho thử nghiệm nhanh, nhưng sẽ bị giới hạn khi dự án trở nên cụ thể hơn.
Bạn nên chuyển sang mock API riêng khi gặp các tình huống sau.
1. Schema không khớp với ứng dụng
Ứng dụng của bạn có thể cần response như sau:
{
"id": "cus_123",
"email": "user@example.com",
"subscription_tier": "pro",
"billing": {
"status": "active",
"next_invoice_at": "2026-07-01T00:00:00Z"
}
}
Trong khi JSONPlaceholder chỉ có posts, albums, todos. Bạn không thể bắt một dummy API công khai trả về đúng schema sản phẩm của mình.
2. Bạn cần trạng thái thật
Ví dụ, với giỏ hàng:
- User thêm sản phẩm A
- User thêm sản phẩm B
- UI cần hiển thị tổng tiền mới
- User xóa sản phẩm A
Dummy API thường không lưu trạng thái giữa các request. Sau khi POST xong, dữ liệu “đã tạo” sẽ biến mất.
3. Bạn cần kiểm soát lỗi
Frontend cần được test với nhiều case:
400 Bad Request401 Unauthorized403 Forbidden404 Not Found429 Too Many Requests500 Internal Server Error- Response chậm 5 giây
- Body sai format
Các API công khai thường không cho bạn cấu hình những tình huống này theo nhu cầu.
4. Frontend bắt đầu trước backend
Trong nhiều team, frontend và backend phát triển song song. Frontend cần endpoint hoạt động ngay theo hợp đồng đã thống nhất, trong khi backend chưa triển khai xong.
Lúc này, bạn không cần “mượn” một API công khai nữa. Bạn cần một mock API được xây dựng để kiểm thử, trả về đúng schema, đúng status code và đúng behavior mà ứng dụng của bạn cần.
Cách xây dựng fake API của riêng bạn với Apidog
Apidog là nền tảng API kết hợp thiết kế, kiểm thử, debug và mocking trong cùng một nơi.
Điểm hữu ích với mock API là: bạn định nghĩa schema endpoint, sau đó Apidog có thể tạo dữ liệu mock dựa trên schema đó. Ví dụ:
- Trường
emailtrả về email mẫu - Trường
createdAttrả về timestamp - Trường
pricetrả về số - Trường
countrycó thể được cấu hình để trả về tên quốc gia
Quy trình cơ bản theo tài liệu mock API data trong Apidog:
Bước 1: Tạo hoặc nhập endpoint
Bạn có thể:
- Tạo API mới trực tiếp trong Apidog
- Nhập file OpenAPI
- Nhập file Swagger
Sau khi import, Apidog đọc schema của endpoint để biết response cần có những field nào.
Bước 2: Định nghĩa response schema
Ví dụ response cho endpoint GET /customers/{id}:
{
"id": "string",
"email": "string",
"name": "string",
"subscription_tier": "string",
"billing": {
"status": "string",
"next_invoice_at": "string"
}
}
Bạn có thể cấu hình từng field để dữ liệu mock thực tế hơn.
Bước 3: Gọi mock URL như API thật
Apidog cung cấp mock URL cho endpoint. Frontend có thể gọi URL này như gọi backend thật:
const res = await fetch('https://mock-url.example.com/customers/cus_123');
const customer = await res.json();
console.log(customer.subscription_tier);
Điểm khác biệt so với dummy API công khai: response khớp với contract của chính bạn.
Bước 4: Thêm lỗi và điều kiện
Bạn có thể cấu hình mock để trả về các case như:
200 OK
404 Not Found
500 Internal Server Error
Hoặc response trễ để test loading state.
Ví dụ frontend có thể xử lý lỗi như sau:
const res = await fetch('/api/customers/cus_123');
if (res.status === 404) {
showNotFoundMessage();
} else if (res.status >= 500) {
showRetryMessage();
} else {
const customer = await res.json();
renderCustomer(customer);
}
Vì mock được tạo từ spec, khi schema thay đổi, mock cũng có thể được cập nhật theo contract mới. Nếu bạn muốn đi sâu hơn vào cách tạo dữ liệu mock từ spec, hãy xem hướng dẫn về tạo dữ liệu mock từ OpenAPI schemas.
Dummy API công khai so với mock API Apidog
| Nhu cầu | Dummy API công khai | Mock API Apidog |
|---|---|---|
| Cần JSON nhanh để prototype | Rất tốt | Rất tốt |
| Cần schema đúng với sản phẩm | Không | Có |
| Cần response lỗi tùy chỉnh | Không | Có |
| Cần delay tùy chỉnh | Không hoặc hạn chế | Có |
| Cần khớp OpenAPI contract | Không | Có |
| Thời gian thiết lập | Gần như bằng 0 | Vài phút |
Không có lựa chọn nào luôn tốt hơn. Cách dùng thực tế thường là:
- Dùng dummy API công khai cho demo nhanh, học thư viện, thử UI.
- Dùng mock API riêng khi code sẽ đi vào dự án thật hoặc cần bám theo contract.
Các câu hỏi thường gặp
Dummy API có giống mock API không?
Có phần giống nhau, nhưng không hoàn toàn.
Dummy API thường là dịch vụ công khai, dùng chung, trả về dữ liệu mẫu cố định. JSONPlaceholder là ví dụ điển hình.
Mock API là API bạn tự định nghĩa và kiểm soát. Bạn quyết định schema, status code, delay, lỗi và các điều kiện response.
Nói ngắn gọn: dummy API là một dạng mock được người khác host sẵn. Nếu muốn phân biệt kỹ hơn, bạn có thể đọc phần giải thích mock API là gì.
Fake API miễn phí có an toàn để dùng với dữ liệu thật không?
Không.
Đừng gửi các dữ liệu sau tới dummy API công khai:
- Dữ liệu người dùng thật
- Email khách hàng thật
- Token
- API key
- Password
- Dữ liệu nội bộ công ty
Hãy giả định mọi thứ bạn gửi lên API công khai đều có thể bị log lại. Chỉ dùng dữ liệu test dùng một lần.
Dummy API có lưu dữ liệu tôi gửi không?
Hầu như không.
JSONPlaceholder, DummyJSON và reqres.in đều có thể chấp nhận request ghi như POST, PUT, PATCH, DELETE, nhưng dữ liệu thường không được lưu bền vững.
Ví dụ, bạn có thể nhận response như đã tạo thành công:
{
"id": 101,
"title": "Hello"
}
Nhưng nếu gọi lại danh sách, bản ghi đó sẽ không tồn tại.
Nếu cần trạng thái thật, bạn cần mock có state hoặc backend thật.
Tôi có thể xây dựng fake API mà không cần viết code không?
Có.
Với Apidog, bạn có thể định nghĩa endpoint, response schema và để mock server tạo dữ liệu. Bạn cũng có thể import OpenAPI/Swagger để có mock endpoint hoạt động mà không cần viết server code.
Tổng kết
Dummy API công khai như JSONPlaceholder, DummyJSON và reqres.in là cách nhanh nhất để lấy JSON mẫu cho prototype, học thư viện HTTP và test UI cơ bản.
Nhưng khi bạn cần schema riêng, trạng thái thật, lỗi có kiểm soát hoặc contract OpenAPI chính xác, hãy tạo mock API của riêng bạn.
Apidog giúp bạn nhập spec, tạo dữ liệu mock dựa trên schema và gọi endpoint mock trong vài phút. Tải Apidog để biến API contract tiếp theo của bạn thành mock hoạt động trước khi backend được triển khai.

Top comments (0)