DEV Community

Cover image for Công cụ giả lập API CLI mã nguồn mở miễn phí
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Công cụ giả lập API CLI mã nguồn mở miễn phí

Khi bạn mô phỏng một API từ dòng lệnh, giấy phép quan trọng không kém danh sách tính năng. Một máy chủ giả lập mà bạn có thể đọc mã nguồn, tự lưu trữ và chạy trong CI mà không cần đếm số chỗ ngồi rất khác với một máy chủ giả lập SaaS nằm sau màn hình đăng nhập. Bài viết này tập trung vào các công cụ mã nguồn mở mà bạn có thể sao chép, kiểm tra và chạy miễn phí.

Dùng thử Apidog ngay hôm nay

Mọi công cụ trong danh sách đều có mã nguồn dưới giấy phép mở (MIT hoặc Apache-2.0), có kho GitHub công khai và có thể tự lưu trữ mà không cần tài khoản. Đây là tiêu chí lọc chính. Nếu bạn cần công cụ nhỏ hơn, chỉ một tệp thực thi và ưu tiên tốc độ khởi động hoặc kích thước cài đặt, hãy xem các lựa chọn máy chủ giả lập nhẹ. Danh sách này ưu tiên mã nguồn và khả năng tự lưu trữ, nên vẫn bao gồm các nền tảng container nặng hơn.

Mỗi công cụ dưới đây gồm giấy phép, lệnh chạy nhanh, tình huống phù hợp nhất và giới hạn cần biết. Nếu muốn so sánh thêm với các lựa chọn thương mại, hãy xem tổng hợp các công cụ giả lập API tốt nhấttổng quan về các công cụ giả lập API REST.

Một lưu ý rõ ràng: Apidog không phải là mã nguồn mở; đây là nền tảng thương mại freemium. Công cụ này chỉ xuất hiện ở phần cuối như một lựa chọn thay thế tích hợp, không phải một mục mã nguồn mở. Tất cả công cụ được đánh số bên dưới đều thực sự là mã nguồn mở.

Điều gì khiến một công cụ giả lập CLI được xem là mã nguồn mở?

Kiểm tra ba tiêu chí sau trước khi đưa một công cụ vào stack CI hoặc môi trường phát triển cục bộ.

  1. Giấy phép mở

    Mã nguồn phải công khai dưới giấy phép mở. Các công cụ trong bài đều dùng MIT hoặc Apache-2.0, nên bạn có thể đọc, phân nhánh và triển khai trong sản phẩm của mình mà không có phí giấy phép hay giới hạn số chỗ ngồi.

  2. Có thể tự lưu trữ

    Bạn phải chạy được công cụ trên laptop, trong container hoặc trên hạ tầng riêng. Không cần control plane được lưu trữ, không cần gọi về máy chủ nhà cung cấp và không bắt buộc có tài khoản. Đây là điều cần thiết cho CI không có kết nối mạng.

  3. Được duy trì công khai

    Kho GitHub cần có lịch sử commit, issue và bản phát hành thực tế. Số sao chỉ là tín hiệu ban đầu; commit gần đây và release được gắn thẻ thường đáng tin cậy hơn.

Danh sách này không xếp hạng theo tốc độ thô hoặc kích thước cài đặt. Nếu đó là ưu tiên, hãy xem khía cạnh nhẹ. Ở đây, một nền tảng lớn chạy bằng container vẫn phù hợp nếu mã nguồn mở và tự lưu trữ được.

1. Prism (Stoplight)

Prism biến tệp OpenAPI hoặc Postman thành máy chủ giả lập trực tiếp. Trỏ Prism đến một đặc tả, công cụ sẽ phục vụ phản hồi ví dụ, xác thực request theo schema và có thể chạy như proxy xác thực trước API thật.

Chạy nhanh

npm install -g @stoplight/prism-cli
prism mock https://raw.githubusercontent.com/stoplightio/prism/master/examples/petstore.oas2.yaml
Enter fullscreen mode Exit fullscreen mode

Lệnh này khởi động mock server tại http://127.0.0.1:4010.

curl http://127.0.0.1:4010/pets
Enter fullscreen mode Exit fullscreen mode

GET /pets trả về dữ liệu ví dụ từ tài liệu OpenAPI. Nếu gửi payload không khớp schema, Prism chỉ ra phần schema bị vi phạm.

Dùng khi nào?

  • Bạn xem OpenAPI là nguồn thông tin đáng tin cậy.
  • Bạn cần mock dựa trên hợp đồng.
  • Bạn muốn phát hiện sai khác giữa đặc tả và API thật bằng proxy xác thực.

Giới hạn

  • Phản hồi phụ thuộc vào example và schema trong đặc tả.
  • Không có stateful behavior tích hợp, chẳng hạn “tạo rồi đọc lại”.
  • Cần môi trường Node.js.

2. Mockoon CLI

Mockoon thường được biết đến qua ứng dụng desktop, nhưng CLI dùng cùng engine để chạy trong CI và môi trường không có giao diện đồ họa. Bạn có thể tạo môi trường bằng ứng dụng, chỉnh sửa tệp cấu hình hoặc dùng tệp OpenAPI làm đầu vào.

Chạy nhanh

npm install -g @mockoon/cli
mockoon-cli start --data ./environment.json --port 3000
Enter fullscreen mode Exit fullscreen mode

Bạn cũng có thể chạy trực tiếp từ OpenAPI:

mockoon-cli start --data ./openapi.yaml --port 3000
Enter fullscreen mode Exit fullscreen mode

Trong quá trình phát triển, thêm --watch để tự tải lại khi tệp thay đổi và --log-transaction để in đầy đủ request/response:

mockoon-cli start \
  --data ./environment.json \
  --port 3000 \
  --watch \
  --log-transaction
Enter fullscreen mode Exit fullscreen mode

Dùng khi nào?

  • Bạn cần phản hồi giàu logic nhưng không muốn viết code.
  • Endpoint phải trả nội dung khác nhau theo điều kiện request.
  • Bạn muốn thiết kế trực quan bằng desktop app, sau đó chạy headless trong CI.
  • Bạn cần response templating, rule điều kiện hoặc proxy mode.

Giới hạn

  • Cách tạo môi trường thuận tiện nhất vẫn là desktop app.
  • Chỉnh sửa trực tiếp JSON môi trường có thể phức tạp.
  • Cú pháp templating động cần thời gian làm quen.

3. json-server

json-server là cách nhanh để dựng REST API giả lập có trạng thái. Cung cấp một tệp JSON, công cụ tự tạo các tuyến CRUD gồm GET, POST, PUT, PATCHDELETE, đồng thời ghi thay đổi trở lại tệp.

Chạy nhanh

Tạo db.json:

{
  "posts": [
    {
      "id": "1",
      "title": "Bài viết đầu tiên",
      "published": true
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Khởi động server:

npx json-server db.json
Enter fullscreen mode Exit fullscreen mode

Sau đó kiểm tra các tuyến CRUD:

curl http://localhost:3000/posts
curl http://localhost:3000/posts/1

curl -X POST http://localhost:3000/posts \
  -H 'Content-Type: application/json' \
  -d '{"title":"Bài viết mới","published":false}'
Enter fullscreen mode Exit fullscreen mode

Nếu posts là mảng cấp cao nhất trong db.json, bạn có ngay:

  • GET /posts
  • GET /posts/1
  • POST /posts
  • PUT /posts/1
  • PATCH /posts/1
  • DELETE /posts/1

Bản ghi tạo bằng POST được lưu vào tệp. Request tiếp theo sẽ đọc được dữ liệu vừa thêm.

Dùng khi nào?

  • Frontend cần phát triển trước khi backend hoàn thành.
  • Bạn cần REST mock có stateful behavior ngay lập tức.
  • Bạn muốn tránh cấu hình và không cần cài đặt global nhờ npx.

Giới hạn

  • Công cụ áp đặt một kiểu REST riêng, nên không phù hợp với mọi API tùy biến.
  • Không nhập OpenAPI; tệp JSON chính là hợp đồng.
  • Không предназначен cho kiểm thử tải hoặc mô phỏng hành vi production.

4. WireMock

WireMock là lựa chọn mạnh cho mô phỏng HTTP mã nguồn mở. Công cụ chạy độc lập, nhận cấu hình qua API quản trị JSON hoặc tệp stub JSON, và hỗ trợ request matching, response templating, kịch bản stateful, chèn lỗi, ghi và phát lại request.

Chạy nhanh với Docker

docker run -it --rm -p 8080:8080 wiremock/wiremock:latest
Enter fullscreen mode Exit fullscreen mode

Mở terminal khác để tạo stub:

curl -X POST http://localhost:8080/__admin/mappings \
  -H 'Content-Type: application/json' \
  -d '{
    "request": {
      "method": "GET",
      "url": "/hello"
    },
    "response": {
      "status": 200,
      "body": "world"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Kiểm tra endpoint:

curl http://localhost:8080/hello
Enter fullscreen mode Exit fullscreen mode

Kết quả:

world
Enter fullscreen mode Exit fullscreen mode

Bạn cũng có thể đặt tệp stub vào thư mục mappings/ rồi gắn thư mục đó vào container.

Dùng khi nào?

  • Bạn cần kịch bản kiểm thử phức tạp.
  • Mock cần trạng thái, độ trễ hoặc lỗi để mô phỏng bên thứ ba không ổn định.
  • Bạn muốn ghi API thật rồi phát lại sau.
  • Mock phải hoạt động gần giống hệ thống đang kiểm thử.

Giới hạn

  • Đây là công cụ JVM, nên cần Java runtime hoặc Docker.
  • Bề mặt cấu hình rộng; mock đơn giản có thể trở nên quá phức tạp.
  • Không có lệnh “đọc đặc tả và chạy” trực tiếp như Prism.

5. MockServer

MockServer là mock server và HTTP(S) proxy trên cùng một cổng, tập trung vào kiểm thử tích hợp. Nó có thể mô phỏng API, proxy và ghi lại lưu lượng trực tiếp, đồng thời chèn lỗi để kiểm tra cách client xử lý lỗi. Các phiên bản gần đây hỗ trợ HTTP/2, gRPC và WebSocket.

Chạy nhanh với Docker

docker run -d --rm -p 1080:1080 mockserver/mockserver
Enter fullscreen mode Exit fullscreen mode

Đăng ký một expectation:

curl -X PUT 'http://localhost:1080/mockserver/expectation' \
  -H 'Content-Type: application/json' \
  -d '{
    "httpRequest": {
      "path": "/order"
    },
    "httpResponse": {
      "body": "{\"status\":\"ok\"}"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

Gọi endpoint:

curl http://localhost:1080/order
Enter fullscreen mode Exit fullscreen mode

Kết quả trả về:

{"status":"ok"}
Enter fullscreen mode Exit fullscreen mode

MockServer cũng có client cho Java, JavaScript, Ruby và các ngôn ngữ khác. Bạn có thể đặt expectation trực tiếp trong code kiểm thử thay vì gọi curl.

Dùng khi nào?

  • Bạn cần mock, proxy và xác minh request trong cùng một công cụ.
  • Bạn muốn kiểm tra request đã được gọi đúng số lần hay chưa.
  • Stack kiểm thử của bạn phụ thuộc nhiều vào JVM.
  • Bạn cần chèn lỗi hoặc kiểm tra tương tác client-server chi tiết.

Nếu MockServer chưa phù hợp, hãy xem các lựa chọn thay thế MockServer.

Giới hạn

  • Dựa trên JVM, tương tự WireMock.
  • Expectation JSON có thể dài dòng.
  • Có nhiều phần giao nhau với WireMock; nên chọn theo client library phù hợp hơn với stack của bạn.

6. Microcks

Microcks là lựa chọn theo hướng nền tảng và là dự án ươm tạo của Cloud Native Computing Foundation. Công cụ có thể biến dự án OpenAPI, AsyncAPI, gRPC, GraphQL, Postman collection và SoapUI thành mock trực tiếp. Các hợp đồng này cũng được tái sử dụng để chạy kiểm thử tuân thủ với triển khai thật.

Microcks không chỉ xử lý HTTP mà còn hỗ trợ giao thức bất đồng bộ và hướng sự kiện.

Chạy nhanh

docker run -d --name microcks -p 8585:8080 quay.io/microcks/microcks-uber:latest
Enter fullscreen mode Exit fullscreen mode

Mở http://localhost:8585, sau đó nhập spec để tạo các mock endpoint.

Microcks có microcks-cli để điều khiển một instance đang chạy từ CI:

microcks-cli import 'petstore.yaml:true' \
  --microcksURL=http://localhost:8585/api \
  --keycloakClientId=... \
  --keycloakClientSecret=...
Enter fullscreen mode Exit fullscreen mode

Dùng khi nào?

  • Nhóm cần danh mục mock dùng chung cho nhiều API và giao thức.
  • Bạn cần kiểm thử hợp đồng tích hợp.
  • Hệ thống có API bất đồng bộ hoặc hướng sự kiện như Kafka, MQTT và các công cụ tương tự.
  • Bạn cần quản lý mock ở quy mô nền tảng thay vì chỉ một mock cục bộ.

Giới hạn

  • Đây là server platform, không phải một tệp thực thi đơn lẻ.
  • microcks-cli chỉ nhập artifact và kích hoạt kiểm thử trên Microcks đang chạy; CLI không tự phục vụ mock.
  • Nặng hơn Prism hoặc json-server nếu chỉ cần một mock cục bộ dùng một lần.

Một lưu ý rõ ràng: Apidog

Apidog không phải mã nguồn mở, vì vậy không có vị trí được đánh số trong danh sách. Tuy nhiên, nếu bạn đang phải ghép nhiều công cụ riêng cho mô phỏng dựa trên đặc tả, CRUD stateful và kiểm thử hợp đồng, đây là một lựa chọn tích hợp đáng xem xét.

Apidog là nền tảng freemium có gói miễn phí bao gồm tính năng mock. Lệnh apidog mock trong apidog-cli cho phép quản lý mock expectation từ terminal, cùng với thiết kế, kiểm thử và tài liệu trong một dự án. Tính năng mock thông minh tự tạo giá trị trường thực tế từ schema, giúp giảm việc viết thủ công response example.

Sự đánh đổi rất rõ:

  • Chọn công cụ mã nguồn mở nếu tự lưu trữ hoặc chạy trong môi trường không có kết nối mạng là yêu cầu bắt buộc.
  • Chọn Apidog nếu quy trình thiết kế đến mô phỏng tích hợp quan trọng hơn việc có mã nguồn mở.

Cách lựa chọn

Công cụ Tốt nhất cho Cài đặt Giấy phép Ghi chú
Prism Mô phỏng dựa trên đặc tả và proxy xác thực npm i -g @stoplight/prism-cli Apache-2.0 Nhận OpenAPI/Postman làm đầu vào; không có trạng thái
Mockoon CLI Phản hồi dựa trên rule, không cần code npm i -g @mockoon/cli MIT Thiết kế trong app, chạy headless
json-server REST mock có trạng thái cho frontend npx json-server db.json MIT CRUD đầy đủ với lưu trữ, không cần cấu hình
WireMock Kịch bản kiểm thử phức tạp, chèn lỗi docker run wiremock/wiremock Apache-2.0 JVM; ghi-và-phát lại; có trạng thái
MockServer Mock, proxy và xác minh request docker run mockserver/mockserver Apache-2.0 JVM; HTTP/2, gRPC, WebSocket
Microcks Danh mục đa API, đa giao thức dùng chung docker run microcks-uber Apache-2.0 Nền tảng CNCF; CLI là client, không phải server
Apidog (không phải OSS) Quy trình thiết kế đến mô phỏng tích hợp npm i -g apidog-cli Freemium Có gói miễn phí; dùng apidog mock trong cùng dự án

Chọn theo dạng bài toán thay vì độ phổ biến:

  • Có OpenAPI và cần thực thi hợp đồng: bắt đầu với Prism.
  • Cần CRUD stateful cho frontend trước khi backend hoàn thiện: chọn json-server.
  • Cần kịch bản giàu logic, lỗi, độ trễ hoặc ghi-phát lại: dùng WireMock hoặc MockServer; chọn theo client library phù hợp.
  • Cần danh mục mock dùng chung, đa giao thức và kiểm thử hợp đồng: chọn Microcks.

Để đối chiếu công cụ với từng tình huống thực tế, hãy xem hướng dẫn về các trường hợp sử dụng giả lập API.

Kết luận

Các công cụ mock CLI mã nguồn mở cho phép bạn đọc mã nguồn, tự lưu trữ và chạy mock trong CI miễn phí.

  • Prism và json-server xử lý các trường hợp phổ biến chỉ với một lệnh.
  • WireMock và MockServer phù hợp với kiểm thử phức tạp.
  • Microcks mở rộng mô phỏng thành danh mục được quản lý trên nhiều giao thức.

Cả sáu công cụ đều dùng giấy phép MIT hoặc Apache-2.0, đều có thể tự lưu trữ và đều có kho GitHub công khai.

Nếu bạn muốn quản lý mock cùng với thiết kế API, kiểm thử và tài liệu mà không cần kết nối nhiều công cụ riêng lẻ, hãy tải xuống Apidog và thử apidog mock trên gói miễn phí. Đây không phải lựa chọn mã nguồn mở, nhưng cung cấp một nơi để chạy quy trình từ dòng lệnh đến CI.

Top comments (0)