DEV Community

Cover image for DummyJSON là gì? API REST giả miễn phí (và cách tự xây dựng)
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

DummyJSON là gì? API REST giả miễn phí (và cách tự xây dựng)

Nếu bạn đang xây dựng UI trước khi backend sẵn sàng, bạn vẫn cần dữ liệu để render danh sách, trang chi tiết, phân trang, trạng thái loading và xử lý lỗi. DummyJSON là một API REST giả miễn phí, được host sẵn, trả về dữ liệu sản phẩm, người dùng, giỏ hàng và nhiều tài nguyên khác qua HTTP mà không cần đăng ký. Bài viết này hướng dẫn cách dùng DummyJSON, khi nào nên dùng nó thay vì các API thử nghiệm công khai khác, và khi nào bạn nên chuyển sang mock API tùy chỉnh.

Dùng thử Apidog hôm nay

DummyJSON là gì?

DummyJSON là một API JSON giữ chỗ miễn phí. Bạn gọi một endpoint công khai và nhận lại dữ liệu mẫu có cấu trúc. Không cần database, không cần API key, không cần setup backend.

Ví dụ: thay vì hard-code mảng sản phẩm trong frontend, bạn có thể gọi trực tiếp:

curl https://dummyjson.com/products
Enter fullscreen mode Exit fullscreen mode

Dữ liệu của DummyJSON là giả nhưng nhất quán. Một sản phẩm có title, price, rating, stock, category. Một người dùng có name, email, address, company. Điều này đủ tốt để bạn dựng:

  • Trang danh sách sản phẩm
  • Card sản phẩm
  • Trang chi tiết
  • Bộ lọc theo danh mục
  • Phân trang
  • Trạng thái loading
  • Demo đăng nhập
  • Giỏ hàng mẫu

Vì DummyJSON trả về JSON qua HTTPS, bạn có thể dùng nó từ fetch, ứng dụng mobile, curl, Postman, script Node.js hoặc bất kỳ HTTP client nào.

Ví dụ với fetch:

const res = await fetch("https://dummyjson.com/products?limit=10");
const data = await res.json();

console.log(data.products);
Enter fullscreen mode Exit fullscreen mode

Các endpoint chính của DummyJSON

DummyJSON cung cấp nhiều collection dùng được ngay:

  • /products: sản phẩm, giá, tồn kho, đánh giá, danh mục
  • /users: người dùng, email, địa chỉ, công ty
  • /carts: giỏ hàng liên kết với người dùng
  • /posts: bài viết
  • /comments: bình luận
  • /todos: việc cần làm
  • /recipes: công thức nấu ăn
  • /quotes: trích dẫn

Các endpoint này hỗ trợ những thao tác REST phổ biến:

Tác vụ Ví dụ
Lấy danh sách GET /products
Lấy theo ID GET /products/1
Phân trang GET /products?limit=10&skip=20
Tìm kiếm GET /products/search?q=phone
Lọc theo danh mục GET /products/category/smartphones
Chọn trường trả về GET /products?select=title,price
Mô phỏng mạng chậm GET /products?delay=3000

Ví dụ lấy 5 sản phẩm, bỏ qua 10 sản phẩm đầu:

curl "https://dummyjson.com/products?limit=5&skip=10"
Enter fullscreen mode Exit fullscreen mode

Ví dụ chỉ lấy titleprice:

curl "https://dummyjson.com/products?select=title,price"
Enter fullscreen mode Exit fullscreen mode

Ví dụ mô phỏng loading trong 3 giây:

curl "https://dummyjson.com/products?delay=3000"
Enter fullscreen mode Exit fullscreen mode

Tham số delay hữu ích khi bạn muốn kiểm tra skeleton UI, spinner hoặc trạng thái disabled của button.

Xác thực với DummyJSON

DummyJSON có endpoint đăng nhập để mô phỏng luồng xác thực. Bạn gửi username/password đến /auth/login, nhận token, sau đó dùng token với header Authorization.

# 1. Đăng nhập để lấy token
curl -X POST https://dummyjson.com/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"emilys","password":"emilyspass"}'
Enter fullscreen mode Exit fullscreen mode

Sau khi nhận token, gọi endpoint yêu cầu xác thực:

curl https://dummyjson.com/auth/me \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN_HERE"
Enter fullscreen mode Exit fullscreen mode

Ví dụ trong JavaScript:

async function login() {
  const res = await fetch("https://dummyjson.com/auth/login", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      username: "emilys",
      password: "emilyspass",
    }),
  });

  const user = await res.json();
  localStorage.setItem("token", user.accessToken);

  return user;
}

async function getCurrentUser() {
  const token = localStorage.getItem("token");

  const res = await fetch("https://dummyjson.com/auth/me", {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  });

  return res.json();
}
Enter fullscreen mode Exit fullscreen mode

Luồng này phù hợp để dựng nhanh màn hình login, lưu token, kiểm tra route được bảo vệ và xử lý trạng thái đăng nhập.

Ghi dữ liệu: có hỗ trợ nhưng không lưu vĩnh viễn

DummyJSON hỗ trợ POST, PUT, PATCHDELETE. Tuy nhiên, các thao tác này chỉ được mô phỏng. API trả về response giống như dữ liệu đã được tạo, cập nhật hoặc xóa, nhưng dữ liệu không được lưu vĩnh viễn.

Ví dụ tạo sản phẩm:

curl -X POST https://dummyjson.com/products/add \
  -H "Content-Type: application/json" \
  -d '{
    "title": "New Product",
    "price": 99
  }'
Enter fullscreen mode Exit fullscreen mode

Response sẽ trông như sản phẩm đã được tạo, nhưng nếu bạn gọi lại danh sách sản phẩm, bản ghi mới sẽ không tồn tại.

Điều này phù hợp cho demo UI nhưng không phù hợp nếu bạn cần kiểm thử flow có trạng thái thật, ví dụ:

  • Thêm sản phẩm rồi đọc lại
  • Cập nhật giỏ hàng qua nhiều bước
  • Tạo user rồi đăng nhập bằng user đó
  • Test dashboard quản trị với dữ liệu mới tạo

DummyJSON cũng không nên dùng cho load test. Đây là dịch vụ miễn phí dùng chung, phù hợp cho học tập, prototype và demo nhẹ.

Nếu bạn muốn nhiều lựa chọn hơn ngoài DummyJSON, danh sách các API miễn phí dành cho nhà phát triển tổng hợp nhiều API theo từng nhóm use case.

DummyJSON so với JSONPlaceholder so với Reqres

DummyJSON không phải API giả miễn phí duy nhất. Hai lựa chọn phổ biến khác là JSONPlaceholder và Reqres.

Công cụ Tốt nhất cho Tài nguyên Luồng xác thực Ghi có lưu trữ không?
DummyJSON Demo UI kiểu thương mại điện tử Sản phẩm, người dùng, giỏ hàng, bài viết, công thức nấu ăn, v.v. Login endpoint + bearer token Không, chỉ mô phỏng
JSONPlaceholder Demo CRUD nhanh, setup tối thiểu Bài viết, bình luận, người dùng, việc cần làm, album, ảnh Không có Không, chỉ mô phỏng
Reqres Demo đăng nhập, đăng ký và request/response Người dùng, mock đăng ký/đăng nhập Mock đăng ký/đăng nhập Không, chỉ mô phỏng

Cách chọn nhanh:

  • Dùng DummyJSON nếu bạn cần dữ liệu giống ứng dụng thương mại điện tử: sản phẩm, giỏ hàng, user.
  • Dùng JSONPlaceholder nếu bạn chỉ cần CRUD cơ bản cho bài viết, comment hoặc todo.
  • Dùng Reqres nếu bạn muốn demo nhanh flow đăng nhập/đăng ký.

Cả ba đều có cùng giới hạn: dữ liệu cố định, schema không tùy chỉnh, thao tác ghi không lưu thật.

JSONPlaceholder chạy trên json-server, nên mô hình dữ liệu của nó khá chung chung. DummyJSON hữu ích hơn khi bạn cần dữ liệu trông giống một cửa hàng thật. Reqres phù hợp khi trọng tâm là màn hình authentication.

Nguồn chính thức nên lưu lại:

Khi dữ liệu cố định không còn đủ

DummyJSON rất nhanh cho giai đoạn đầu, nhưng bạn sẽ gặp giới hạn khi ứng dụng bắt đầu có requirement riêng.

Các dấu hiệu bạn nên chuyển sang mock API tùy chỉnh:

  • Bạn cần field không có trong DummyJSON, ví dụ subscription_tier, feature_flags, tenantId.
  • Bạn cần response khớp với schema nội bộ của team.
  • Bạn cần thao tác ghi có trạng thái để tạo bản ghi rồi đọc lại.
  • Bạn cần chủ động trả về lỗi 400, 401, 429, 500.
  • Bạn cần test payload sai định dạng.
  • Bạn cần mock API khớp với file OpenAPI/Swagger.
  • Frontend và backend cần thống nhất contract trước khi backend hoàn thành.

Ví dụ, nếu frontend đang chờ API như sau:

{
  "id": "prod_123",
  "name": "Pro Plan",
  "subscription_tier": "premium",
  "feature_flags": {
    "analytics": true,
    "team_seats": true
  }
}
Enter fullscreen mode Exit fullscreen mode

DummyJSON không thể tự đổi schema sản phẩm để khớp response này. Lúc đó, bạn không nên tiếp tục ép frontend map dữ liệu tạm. Bạn nên tạo mock API theo schema thật.

Cách xây dựng API REST giả tùy chỉnh với Apidog

Apidog là nền tảng API hỗ trợ thiết kế, kiểm thử, tài liệu hóa và tạo mock API trong cùng một nơi. Khi DummyJSON không còn đủ, mock server của Apidog cho phép bạn định nghĩa endpoint, schema, response và mã trạng thái theo nhu cầu của dự án.

Quy trình triển khai như sau.

1. Định nghĩa endpoint và schema

Tạo endpoint, ví dụ:

GET /products
Enter fullscreen mode Exit fullscreen mode

Sau đó định nghĩa response schema:

{
  "id": "string",
  "title": "string",
  "price": "number",
  "stock": "integer",
  "category": "string",
  "createdAt": "string"
}
Enter fullscreen mode Exit fullscreen mode

Bạn có thể tạo thủ công hoặc import file OpenAPI/Swagger hiện có để mock API khớp với contract thật.

2. Tạo dữ liệu mock từ schema

Apidog đọc tên field và kiểu dữ liệu để tạo response hợp lý. Ví dụ:

  • email trả về email
  • price trả về số
  • createdAt trả về ngày
  • name trả về tên
  • avatar trả về URL ảnh

Ý tưởng tương tự Faker, nhưng được tích hợp vào workflow thiết kế API.

Nếu bạn dùng OpenAPI, hướng dẫn tạo dữ liệu mock từ schema OpenAPI giải thích chi tiết cách tạo dữ liệu dựa trên schema.

3. Tùy chỉnh response và lỗi

Khi bạn sở hữu mock API, bạn có thể định nghĩa cả happy path lẫn error path.

Ví dụ response thành công:

{
  "id": "prod_123",
  "title": "Wireless Keyboard",
  "price": 59.99,
  "stock": 25,
  "category": "accessories"
}
Enter fullscreen mode Exit fullscreen mode

Ví dụ response lỗi:

{
  "code": "PRODUCT_NOT_FOUND",
  "message": "Product does not exist"
}
Enter fullscreen mode Exit fullscreen mode

Bạn cũng có thể tạo response với status code cụ thể như:

HTTP/1.1 500 Internal Server Error
Enter fullscreen mode Exit fullscreen mode

Điều này giúp frontend kiểm thử các nhánh xử lý lỗi mà các API giả cố định thường không hỗ trợ theo ý muốn.

4. Chạy mock server và gọi từ frontend

Apidog cung cấp URL mock trực tiếp. Frontend chỉ cần đổi base URL từ DummyJSON sang mock server của bạn.

Ví dụ:

curl "https://<your-mock-host>/products?limit=5"
Enter fullscreen mode Exit fullscreen mode

Trong frontend:

const API_BASE_URL = "https://<your-mock-host>";

async function getProducts() {
  const res = await fetch(`${API_BASE_URL}/products?limit=5`);

  if (!res.ok) {
    throw new Error("Failed to fetch products");
  }

  return res.json();
}
Enter fullscreen mode Exit fullscreen mode

Vì mock được tạo từ schema của bạn, khi API spec thay đổi, mock cũng có thể được cập nhật theo cùng contract. Điều này giúp frontend và backend tránh lệch schema trong quá trình phát triển.

Nếu bạn cần dữ liệu thử nghiệm đa dạng hơn, hướng dẫn tạo dữ liệu thử nghiệm API thực tế có thể kết hợp tốt với mock-driven development.

Tóm lại:

  • DummyJSON tốt nhất cho demo nhanh, không cần cấu hình.
  • Apidog mock server phù hợp khi bạn cần schema riêng, response tùy chỉnh, lỗi có kiểm soát và mock khớp với API thật.

Câu hỏi thường gặp

DummyJSON có miễn phí không?

Có. DummyJSON miễn phí và không cần API key. Bạn có thể gọi trực tiếp từ trình duyệt, curl, frontend app hoặc script backend. Tuy nhiên, nó phù hợp cho học tập, prototype và demo, không phù hợp cho production traffic hoặc load testing.

DummyJSON có lưu dữ liệu tôi tạo hoặc cập nhật không?

Không. Các request POST, PUT, PATCHDELETE chỉ trả về response mô phỏng. Dữ liệu không được lưu trên server. Nếu bạn tạo sản phẩm mới rồi đọc lại danh sách, sản phẩm đó sẽ không xuất hiện.

Khi cần mock có trạng thái hoặc kiểm soát response tốt hơn, xem hướng dẫn về mock API.

Sự khác biệt giữa DummyJSON và mock server là gì?

DummyJSON là tập dữ liệu cố định, được host công khai và dùng chung. Bạn không kiểm soát schema hoặc dữ liệu trả về.

Mock server, như trong Apidog, chạy theo schema bạn định nghĩa. Bạn kiểm soát endpoint, field, response body, status code và các trường hợp lỗi.

Dùng DummyJSON cho demo chung. Dùng mock server khi dữ liệu phải khớp API thật của bạn.

Tôi có thể tạo dữ liệu thực tế hơn thay vì dữ liệu giữ chỗ không?

Có. Cách tốt nhất là tạo dữ liệu từ schema. Công cụ dựa trên schema có thể đọc tên field và kiểu dữ liệu để tạo giá trị hợp lý, ví dụ email, price, createdAt, status. Đây là lý do nhiều team chuyển từ API giả cố định sang mock API riêng khi dự án bắt đầu nghiêm túc hơn.

Kết luận

DummyJSON là một API REST giả miễn phí, nhanh và tiện để dựng UI khi backend chưa sẵn sàng. Nó đặc biệt hữu ích cho danh sách sản phẩm, người dùng, giỏ hàng, phân trang, tìm kiếm và demo authentication.

Giới hạn xuất hiện khi bạn cần schema riêng, dữ liệu ghi được lưu lại, lỗi có kiểm soát hoặc response khớp với OpenAPI contract của dự án.

Khi đến giai đoạn đó, hãy tạo mock API tùy chỉnh thay vì tiếp tục phụ thuộc vào dữ liệu cố định. Apidog cho phép bạn định nghĩa schema, tạo dữ liệu mock thực tế và giữ mock đồng bộ với API sẽ triển khai.

Top comments (0)