JSON-Server: REST API Giả Lập Từ File JSON
JSON-Server biến một file JSON thành REST API đầy đủ với các route GET, POST, PUT, PATCH, và DELETE, không cần viết code backend. Bạn thêm lọc, sắp xếp, phân trang, và nhúng quan hệ qua tham số truy vấn thay vì viết controller. Hãy dùng khi bạn cần một API giả lập để phát triển hoặc test trước khi backend thật tồn tại; bỏ qua nếu bạn cần xác thực, logic nghiệp vụ, hay lớp dữ liệu cho production.
JSON-Server Là Gì?
JSON-Server là công cụ Node.js đọc một file db.json (hoặc db.json5) và phục vụ các khoá cấp cao nhất của nó như tài nguyên REST, nên một mảng posts trở thành các route GET/POST/PUT/PATCH/DELETE tại /posts. Chạy nó bằng npx json-server db.json sẽ khởi động server HTTP ở cổng 3000, dựa trên dữ liệu trong file đó. Tham số truy vấn xử lý lọc, sắp xếp, và phân trang mà không cần cấu hình thêm.
Tính Năng Chính Để Tạo API Giả Lập
- ✓Đầy đủ route CRUD cho tài nguyên dạng mảng: GET, POST, PUT, PATCH, và DELETE trên /posts, được tạo trực tiếp từ cấu trúc file JSON.
- ✓Lọc theo truy vấn với toán tử tường minh — field:operator=value — bao gồm eq, ne, lt, lte, gt, gte, in, contains, startsWith, và endsWith.
- ✓Sắp xếp qua _sort, kể cả thứ tự giảm dần với dấu trừ ở đầu, và sắp xếp nhiều trường như _sort=author.name,-views.
- ✓Phân trang qua _page và _per_page, mặc định 10 mục mỗi trang, trả về metadata first/prev/next/last/pages/items kèm theo data.
- ✓Nhúng quan hệ với _embed, nên GET /posts?_embed=comments gắn kèm comment của mỗi post ngay trong response.
- ✓Truy vấn boolean phức tạp qua _where, nhận một object JSON thô để lọc, và ghi đè các tham số truy vấn đơn giản khi có mặt.
- ✓Tự động phục vụ file tĩnh từ ./public, và có thể thêm thư mục file tĩnh khác qua cờ -s.
- ✓Xoá theo chuỗi phụ thuộc với _dependent, nên DELETE /posts/1?_dependent=comments sẽ xoá luôn comment của post đó.
Khi Nào Nên Dùng JSON-Server
- •Xây dựng frontend dựa trên endpoint REST thật trước khi đội backend triển khai xong bất cứ thứ gì.
- •Viết integration test cần request/response HTTP thật thay vì mock fetch giả.
- •Prototype nhanh một data model bằng cách chỉnh sửa trực tiếp db.json và thấy route cập nhật ngay.
- •Demo ứng dụng với file tĩnh phục vụ song song dữ liệu API, nhờ hỗ trợ thư mục ./public sẵn có.
Bắt Đầu: Cài Đặt
Cài json-server như một dependency của dự án bằng `npm install json-server`. README không hướng dẫn cài đặt global; ví dụ sử dụng chạy thẳng qua npx (`npx json-server db.json`), hoạt động dù bạn có cài local hay không. Chạy `json-server --help` để xem đầy đủ tuỳ chọn CLI — README không liệt kê hết các cờ ngay trong văn bản, nên lệnh đó mới là tài liệu tham khảo thật cho các cờ như -s cho thư mục file tĩnh.
Tạo Và Truy Cập API Giả Lập
Tạo một file db.json với các mảng và object ở cấp cao nhất, ví dụ một mảng posts với trường id/title/views, cùng một mảng comments tham chiếu tới postId. Định dạng JSON5 cũng được hỗ trợ (db.json5), cho phép viết comment và dấu phẩy thừa trong file. Khởi động server bằng `npx json-server db.json`; nó lắng nghe tại http://localhost:3000 và log địa chỉ đó khi khởi động. Từ đó, `curl http://localhost:3000/posts/1` trả về post tương ứng dạng JSON, và mảng đó trở thành route CRUD đầy đủ tại /posts. Tham số truy vấn cộng thêm khả năng lọc, sắp xếp, phân trang, nhúng quan hệ, và lọc phức tạp qua _where.
Điểm mạnh
- ✓CRUD đầy đủ được tạo tự động từ cấu trúc file JSON — không cần định nghĩa route, không ORM, không migration.
- ✓Các toán tử truy vấn (eq, ne, lt, lte, gt, gte, in, contains, startsWith, endsWith) đủ đáp ứng phần lớn nhu cầu lọc của frontend khi phát triển.
- ✓Phân trang trả về metadata thật (first/prev/next/last/pages/items), gần với response phân trang của một API production hơn là mock tự viết tay.
- ✓Giấy phép MIT, nên không có rào cản bản quyền khi dùng trong bất kỳ dự án nào.
- ✓Phục vụ file tĩnh từ ./public có sẵn, nên một bản demo có thể phục vụ các tệp HTML/CSS/JS song song với dữ liệu API trong cùng một process.
Phạm Vi Của JSON-Server
- △Không có xác thực, phân quyền, hay validation. Ai chạm được tới server đều đọc và ghi được mọi tài nguyên.
- △README hiện tại mô tả bản beta v1, mà chính dự án gắn nhãn là dùng được nhưng có thể phá vỡ tương thích; bản ổn định là v0.17.4 nằm ở nhánh riêng.
- △Đây là công cụ cho phát triển và test, README không định vị nó cho traffic production.
- △Việc migrate từ v0 lên v1 thay đổi hành vi thật: id giờ luôn là string và tự sinh, _limit được thay bằng _page/_per_page, _expand được thay bằng _embed, và cờ --delay bị bỏ để thay bằng throttling trong DevTools trình duyệt — nâng cấp không phải chuyện thay thế trực tiếp.
- △Logic nghiệp vụ ngoài CRUD và truy vấn không được công cụ này cung cấp; bất cứ thứ gì tuỳ biến đều cần tự viết middleware hoặc chuyển sang backend khác.
Lựa Chọn Thay Thế Cho JSON-Server
Câu Hỏi Thường Gặp
JSON-Server được xây dựng và tài liệu hoá như một công cụ cho phát triển và test, không phải lớp dữ liệu production. Nó không có lớp xác thực hay validation riêng, nên hãy dùng nó ở local hoặc CI thay vì phục vụ người dùng thật.
JSON-Server được phát hành theo giấy phép MIT, theo thông tin trên repository GitHub.
Bạn định nghĩa dữ liệu API bằng cách viết file db.json (hoặc db.json5) với các khoá cấp cao nhất là tài nguyên: một mảng như posts trở thành route CRUD đầy đủ, còn một object thường như profile trở thành tài nguyên dạng object đơn với GET/PUT/PATCH.
JSON-Server hỗ trợ tham số _where ngoài các filter field:operator đơn giản. Nó nhận một object JSON thô cho logic boolean như điều kiện OR trên nhiều trường, và ghi đè các tham số truy vấn đơn giản khi có mặt.
JSON-Server tự động phục vụ file từ thư mục ./public, và cờ -s cho phép thêm các thư mục file tĩnh khác như ./static hay ./node_modules.
Bản migrate lên v1 khiến id luôn là string và tự sinh, thay tham số _limit đã deprecated bằng _page/_per_page, thay _expand bằng _embed cho quan hệ, và bỏ cờ CLI --delay để dùng throttling network trong DevTools trình duyệt.
Vấn đề JSON-Server giải quyết
Công việc frontend thường bị đình trệ cho tới khi có backend thật, hoặc team tự viết mock fetch tạm bợ rồi lệch dần khỏi hành vi HTTP thật: sai status code, phân trang không thật, chuỗi truy vấn không được phân tích đúng. JSON-Server biến một file JSON thành các route phản hồi như một REST API thật, gồm CRUD với status phù hợp, lọc theo toán tử, và metadata phân trang, để code frontend và test có thể gọi thẳng vào endpoint HTTP thật trước khi đội backend triển khai xong.
Ai nên dùng — và ai nên bỏ qua
Hãy dùng JSON-Server nếu bạn đang xây frontend hoặc viết test và muốn có request HTTP thật tới các route CRUD mà không cần dựng database và backend framework. Nó phù hợp với team cần hành vi lọc, sắp xếp, và phân trang trông chân thực trong lúc phát triển. Bỏ qua nếu bạn cần xác thực, phân quyền, hay quy tắc nghiệp vụ được thực thi ở phía server — đó là điều một mock server dựa trên file JSON không hướng tới, và bạn sẽ phải gắn thêm middleware hoặc chuyển sang backend thật.
Repo liên quan
Chưa chắc json-server có hợp với bạn?
Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về json-server.
