Bạn cần một API giả để phát triển khi backend chưa sẵn sàng, dịch vụ bên thứ ba bị giới hạn tốc độ, hoặc test không nên phụ thuộc vào máy chủ thật. Vấn đề không phải là có dùng mock hay không, mà là tạo mock theo cách có thể lặp lại: chạy được từ script, CI và tác nhân AI thay vì phải cấu hình lại bằng giao diện mỗi lần.
Mock được tạo bằng CLI có thể được lưu trong repository, review qua pull request và tái tạo bằng đúng một lệnh. Bài viết này trình bày hai hướng:
- Chạy mock cục bộ từ một tệp với Prism, Mockoon CLI hoặc json-server.
- Nhập spec và quản lý mock được lưu trữ bằng CLI của Apidog.
Nếu cần so sánh thêm trước khi chọn công cụ, xem các công cụ mock API tốt nhất và các công cụ mock API REST.
Cách chung: chạy máy chủ mock từ một tệp
Nhóm công cụ này biến một tệp spec hoặc dữ liệu thành HTTP endpoint cục bộ. Không cần tài khoản, không cần đăng nhập và không cần tạo dự án.
Chọn công cụ theo đầu vào bạn đang có:
| Đầu vào | Công cụ phù hợp | Điểm chính |
|---|---|---|
| Spec OpenAPI | Prism | Mock theo contract, có xác thực request |
| Tệp môi trường Mockoon hoặc OpenAPI | Mockoon CLI | Route được cấu hình phong phú, chạy không cần GUI |
| Tệp JSON dữ liệu | json-server | REST API có trạng thái nhanh chóng |
Prism: phục vụ spec OpenAPI
Nếu đã có OpenAPI, Prism của Stoplight là cách nhanh để tạo mock dựa trên contract.
npx @stoplight/prism-cli mock ./openapi.yaml
Lệnh này chạy máy chủ tại http://127.0.0.1:4010. Prism đọc:
-
pathsđể tạo route; -
exampletrong response để trả dữ liệu mẫu; - schema để sinh dữ liệu hợp lệ khi chưa có example;
- định nghĩa request để xác thực request đến.
Kiểm tra endpoint:
curl http://127.0.0.1:4010/orders/123
Nếu request không đúng cấu trúc theo spec, Prism trả về mã 422 thay vì bỏ qua lỗi. Đây là lựa chọn phù hợp khi mục tiêu là kiểm tra client có tuân thủ API contract hay không.
Prism là stateless: một request POST không lưu dữ liệu cho request tiếp theo.
Cài đặt toàn cục nếu không muốn dùng npx:
npm install -g @stoplight/prism-cli
Mockoon CLI: chạy tệp dữ liệu mà không cần GUI
Mockoon CLI chạy mock từ tệp môi trường Mockoon hoặc một tệp OpenAPI JSON/YAML. Bạn có thể thiết kế route bằng ứng dụng desktop Mockoon, xuất tệp môi trường, rồi dùng CLI trong CI hoặc trên server.
npx @mockoon/cli start --data ./env.json
Mặc định, Mockoon CLI phục vụ ở cổng 3000. Đổi cổng bằng --port:
npx @mockoon/cli start --data ./env.json --port 8080
Nếu tệp môi trường được tạo bởi phiên bản Mockoon cũ, CLI sẽ di chuyển cấu trúc trong bộ nhớ và không sửa tệp gốc.
Cài đặt toàn cục:
npm install -g @mockoon/cli
Dùng Mockoon CLI khi bạn cần route được tùy chỉnh thủ công nhiều hơn khả năng mà một OpenAPI spec đơn thuần cung cấp, nhưng vẫn muốn chạy mock không cần giao diện. Đây cũng là trường hợp điển hình của một máy chủ mock nhẹ cho API RESTful.
json-server: tạo REST API giả từ JSON
Khi chưa có spec, json-server là lựa chọn nhanh nhất. Chỉ cần tạo tệp JSON chứa dữ liệu.
Ví dụ db.json:
{
"posts": [
{
"id": 1,
"title": "Bài viết đầu tiên"
}
]
}
Chạy server:
npx json-server db.json
Bạn có ngay endpoint:
http://localhost:3000/posts
json-server hỗ trợ các phương thức REST như:
GET
POST
PUT
PATCH
DELETE
Không giống Prism, POST thực sự thêm bản ghi và ghi lại vào tệp JSON. Vì vậy, đây là lựa chọn phù hợp khi test cần hành vi có trạng thái, chẳng hạn:
- Gửi
POST /posts. - Gọi
GET /posts. - Xác nhận bản ghi vừa tạo xuất hiện trong danh sách.
Cài đặt toàn cục:
npm install -g json-server
Điểm đánh đổi của mock cục bộ
Prism, Mockoon CLI và json-server đều đơn giản: chạy từ một tệp và không cần hạ tầng bổ sung. Tuy nhiên, mock, tài liệu, thiết kế API và test có thể nằm ở các tệp hoặc quy trình riêng biệt. Bạn phải tự đảm bảo chúng luôn đồng bộ.
Nếu cần so khớp request chính xác hoặc phát lại request, MockServer và WireMock cung cấp nhiều khả năng hơn, nhưng yêu cầu môi trường chạy Java.
Cách CLI của Apidog: nhập spec, script các kỳ vọng
Apidog hoạt động khác với Prism hoặc json-server.
CLI apidog không khởi động máy chủ mock cục bộ từ một tệp. Không có lệnh như:
apidog mock ./openapi.yaml
Thay vào đó, Apidog lưu trữ mock. Bạn dùng CLI để:
- Nhập spec vào dự án.
- Tạo mock thông minh được lưu trữ cho các endpoint.
- Tạo, đọc, cập nhật và xóa các kỳ vọng mock tùy chỉnh.
Apidog không phải là mã nguồn mở; đây là sản phẩm thương mại có phiên bản miễn phí. Điểm khác biệt là mock, thiết kế API và test có thể dùng chung một nguồn thông tin trong cùng dự án.
Nếu chỉ cần mock dùng một lần từ một tệp, Prism hoặc json-server thường nhẹ hơn. Nếu mock cần theo kịp API khi spec thay đổi, quy trình của Apidog phù hợp hơn.
Cài đặt và đăng nhập
Cài đặt CLI:
npm install -g apidog-cli
Đăng nhập bằng access token:
apidog login --with-token <YOUR_ACCESS_TOKEN>
Xem thêm hướng dẫn cài đặt Apidog CLI để thiết lập token.
Nhập spec để tạo mock thông minh được lưu trữ
Bắt đầu bằng cách nhập OpenAPI vào dự án:
apidog import --project <PROJECT_ID> --format openapi --file ./openapi.json
Sau khi nhập, Apidog tạo URL mock cho mỗi endpoint. Bạn không cần khởi động server cục bộ.
Mock thông minh sử dụng kiểu dữ liệu và tên trường từ schema. Ví dụ:
- Trường
emailtrả về giá trị có định dạng email. - Trường
createdAttrả về timestamp có định dạng phù hợp.
apidog import cũng hỗ trợ Swagger 2.0, Postman và định dạng Apidog. Điều này giúp bạn đưa định nghĩa API hiện có vào dự án và có mock trực tiếp chỉ bằng một lệnh.
Quản lý phản hồi tùy chỉnh với apidog mock
Mock tự động phù hợp với trường hợp chung. Khi cần phản hồi cụ thể cho từng request, hãy tạo kỳ vọng mock.
Ví dụ use case:
- Người dùng có ID A nhận
200. - Người dùng có ID B nhận
404. - Request khớp điều kiện cụ thể trả về payload riêng.
Xem các lệnh hỗ trợ:
apidog mock --help
Liệt kê các kỳ vọng trong dự án:
apidog mock list --project <PROJECT_ID>
Lọc theo endpoint:
apidog mock list --project <PROJECT_ID> --http-api-id <ENDPOINT_ID>
Đầu ra là JSON có cấu trúc, vì vậy bạn có thể dùng jq để lọc ID cần dùng cho các bước tiếp theo.
Các thao tác đọc, cập nhật và xóa kỳ vọng:
apidog mock get --project <PROJECT_ID>
apidog mock update --project <PROJECT_ID> --file ./mock.json
apidog mock delete --project <PROJECT_ID>
Các lệnh create và update nhận tệp --file mô tả kỳ vọng mock. Hãy xác thực tệp này trước khi ghi.
Xác thực tệp kỳ vọng trước khi tạo hoặc cập nhật
Không nên tự đoán cấu trúc JSON của kỳ vọng. Apidog CLI cung cấp schema cho từng thao tác ghi.
Lấy schema của thao tác tạo mock:
apidog cli-schema get mock-create
Xác thực tệp kỳ vọng:
apidog cli-schema validate mock-create --file ./mock.json
Tạo kỳ vọng sau khi xác thực thành công:
apidog mock create --project <PROJECT_ID> --file ./mock.json
Quy trình nên dùng trong script hoặc CI:
apidog cli-schema validate mock-create --file ./mock.json \
&& apidog mock create --project <PROJECT_ID> --file ./mock.json
Nếu xác thực trả về mã thoát khác 0, pipeline dừng trước khi tệp lỗi được áp dụng vào dự án.
Với thao tác cập nhật, dùng schema key mock-update.
Mỗi lệnh trả về JSON kèm khối agentHints.nextSteps, giúp người dùng hoặc tác nhân AI biết lệnh nên chạy tiếp theo. Xem hướng dẫn hoàn chỉnh về Apidog CLI để tìm hiểu các nhóm lệnh khác.
Tích hợp mock vào CI
Cả hai hướng đều phù hợp với CI vì lệnh CLI có mã thoát và đầu ra văn bản.
Chạy Prism trong job CI
Khởi động Prism nền, chạy test, sau đó dừng process:
# start Prism in the background, then run tests against it
npx @stoplight/prism-cli mock ./openapi.yaml &
PRISM_PID=$!
npm test
kill $PRISM_PID
Test của bạn có thể gọi endpoint tại http://127.0.0.1:4010.
Áp dụng kỳ vọng Apidog trong CI
Với Apidog, không cần khởi động hoặc dừng process cục bộ. Mock đã được lưu trữ, nên CI chỉ cần xác thực và áp dụng kỳ vọng:
# ensure the expectation is well-formed, then apply it
apidog cli-schema validate mock-create --file ./mock.json
apidog mock create --project <PROJECT_ID> --file ./mock.json
Sau đó, test gọi trực tiếp URL mock được lưu trữ.
Lợi ích chính của mock từ CLI là tính tái lập: developer, CI và tác nhân AI đều có thể thiết lập cùng API giả bằng cùng một tập lệnh.
Các lỗi thường gặp
Mong đợi apidog mock khởi động máy chủ
apidog mock không có các lệnh sau:
apidog mock start
apidog mock serve
apidog mock ./file.yaml
Quy trình đúng là:
- Dùng
apidog importđể nhập spec và tạo mock được lưu trữ. - Dùng
apidog mockđể quản lý các kỳ vọng tùy chỉnh.
Nếu cần chạy một server cục bộ trực tiếp từ tệp, dùng Prism, Mockoon CLI hoặc json-server.
Bỏ qua bước xác thực schema
apidog mock create và apidog mock update nhận tệp qua --file. Tệp sai cấu trúc có thể thất bại hoặc tạo ra cấu hình không mong muốn.
Luôn chạy:
apidog cli-schema get mock-create
apidog cli-schema validate mock-create --file ./mock.json
Hai lệnh bổ sung này giúp tránh mất thời gian gỡ lỗi cấu hình mock.
Prism trả dữ liệu nghèo nàn vì spec quá mỏng
Chất lượng mock Prism phụ thuộc vào OpenAPI spec. Nếu response không có example và schema thiếu chi tiết, dữ liệu trả về cũng sẽ chung chung.
Cải thiện bằng cách thêm example vào response:
responses:
"200":
description: Order found
content:
application/json:
schema:
type: object
properties:
id:
type: string
status:
type: string
example:
id: "123"
status: "paid"
Mong đợi trạng thái từ công cụ không trạng thái
Prism và mock hợp đồng của Apidog không duy trì dữ liệu ghi giữa các request.
Nếu cần luồng như sau:
POST /ordersGET /orders/:id- Nhận lại bản ghi vừa tạo
hãy dùng json-server, hoặc cấu hình kỳ vọng Apidog để trả về cấu trúc dữ liệu mong muốn.
Tóm lại
Tạo mock bằng CLI biến thao tác thủ công thành các lệnh có thể script, review và chạy lại trong CI.
- Dùng Prism khi đã có OpenAPI và cần mock theo contract.
- Dùng Mockoon CLI khi có tệp môi trường hoặc cần route tùy chỉnh mà không cần GUI.
- Dùng json-server khi cần REST API có trạng thái từ một tệp JSON.
- Dùng Apidog khi muốn mock, thiết kế API và test nằm trong cùng một dự án; nhập spec bằng
apidog import, sau đó quản lý kỳ vọng bằngapidog mockvàcli-schema.
Nếu cần một server dùng một lần từ tệp, các công cụ mã nguồn mở là đủ. Nếu cần mock đồng bộ với thiết kế và test trong dự án, hãy tải xuống Apidog, cài đặt CLI và đưa quy trình mock vào script thay vì thao tác bằng chuột.
Top comments (0)