Nhóm frontend của bạn đang bị tắc nghẽn: backend cho GET /users và GET /orders chưa sẵn sàng, nhưng giao diện vẫn cần dữ liệu để hiển thị danh sách, phân trang và xử lý trạng thái trống. Cách làm cũ là tự tạo tệp JSON giả, rồi liên tục sửa khi trường API thay đổi — một quy trình dễ lệch khỏi API thực tế.
Có một cách nhanh hơn. Nếu đã có đặc tả API, Apidog có thể tạo mock trực tiếp từ schema endpoint, không cần cấu hình hoặc viết mã. Tính năng này là Smart Mock: nó đọc tên và kiểu trường để tạo dữ liệu hợp lý. Ví dụ, trường name có thể trả về tên, còn email có thể trả về địa chỉ email.
Bài viết này hướng dẫn mock hai endpoint thương mại điện tử từ đầu đến cuối: lấy URL mock, hiểu thứ tự ưu tiên phản hồi và điều chỉnh khi Smart Mock không tạo dữ liệu như mong muốn. Nếu cần nắm khái niệm trước, hãy xem mock API là gì và hoạt động như thế nào và tài liệu JSON Schema.
Smart Mock làm gì và vì sao giúp tiết kiệm thời gian?
Theo tài liệu, công cụ mock của Apidog hỗ trợ:
- Smart Mock: tự tạo dữ liệu từ đặc tả API.
- Response Example: trả về ví dụ phản hồi đã định nghĩa.
- Custom Mock: trả về phản hồi tùy chỉnh.
- Conditional Mock: trả về phản hồi dựa trên tham số request.
- Mock Script: tạo phản hồi có giá trị liên quan đến request.
Smart Mock là lựa chọn không cần cấu hình trong bộ tính năng này. Bạn chỉ cần có endpoint với schema phản hồi. Apidog sẽ đọc schema và điền dữ liệu phù hợp cho các trường.
Điều này đặc biệt hữu ích khi frontend cần làm việc trước backend:
- Không cần tự duy trì file JSON mock.
- Mock thay đổi cùng schema.
- Endpoint thiếu ví dụ phản hồi vẫn có dữ liệu để frontend sử dụng.
- Dễ kiểm tra UI với dữ liệu thay đổi qua mỗi lần gọi.
Trước khi bắt đầu: yêu cầu duy nhất
Smart Mock cần endpoint có response schema.
Nếu thiết kế API trong Apidog, hãy thêm schema vào phần response của endpoint. Nếu import tệp OpenAPI, response schema thường đã có sẵn.
Không có response schema, Smart Mock không có cấu trúc để sinh dữ liệu hữu ích.
Nếu dùng Local Mock, bạn cần ứng dụng Apidog desktop vì Local Mock không có trên Apidog Web. Tải Apidog để làm theo.
Từng bước mock GET /users và GET /orders
Hãy tạo mock cho một API cửa hàng đơn giản gồm hai endpoint:
GET /usersGET /orders
Bước 1: Định nghĩa endpoint và response schema
Tạo endpoint GET /users với response body như sau:
{
"id": 1024,
"name": "Amara Osei",
"email": "amara.osei@example.com",
"phone": "+1-415-555-0148",
"createdAt": "2026-03-11T09:24:00Z",
"isActive": true
}
Tiếp theo, tạo GET /orders trả về danh sách đơn hàng:
[
{
"orderId": "ORD-58210",
"userId": 1024,
"total": 84.5,
"currency": "USD",
"status": "shipped",
"createdAt": "2026-05-02T14:03:00Z"
}
]
Đảm bảo mọi thuộc tính đều có kiểu dữ liệu trong schema. Smart Mock sử dụng cả tên trường và kiểu dữ liệu để chọn giá trị phù hợp.
Bước 2: Sao chép URL mock
Mỗi endpoint sẽ tự động có URL mock. Vị trí URL tùy thuộc vào chế độ bạn dùng:
- Trong DESIGN, URL mock nằm ở tab API bên dưới endpoint.
- Trong DEBUG, URL mock nằm ở tab Mock.
Nhấp “Nhấp để sao chép” để lấy URL.
Lưu ý: thao tác này chỉ sao chép URL. Nếu endpoint không phải GET, hoặc cần request body, bạn phải tự thêm HTTP method và body khi gọi request.
Ví dụ Local Mock theo chế độ đường dẫn:
http://127.0.0.1:4523/m1/{projectID}-{versionNo}-{serverNo}/users
Local Mock tự khởi động khi ứng dụng Apidog đang mở.
Ngoài ra còn có chế độ ID, dùng endpoint ID để định tuyến chính xác:
http://127.0.0.1:4523/m2/{projectID}-{versionNo}-{serverNo}/{endpointId}
Bước 3: Gọi mock bằng curl
Gọi endpoint users:
curl http://127.0.0.1:4523/m1/1234567-0-0/users
Kết quả có thể tương tự:
{
"id": 3187,
"name": "Diego Marchetti",
"email": "diego.marchetti@example.net",
"phone": "+1-628-555-0113",
"createdAt": "2026-01-27T18:41:22Z",
"isActive": true
}
Các giá trị như name, email và createdAt được tạo dựa trên tên thuộc tính, không đơn thuần là chuỗi ngẫu nhiên.
Gọi endpoint orders tương tự:
curl http://127.0.0.1:4523/m1/1234567-0-0/orders
Bạn sẽ nhận được mảng đơn hàng với các trường như tổng tiền, trạng thái và thời gian tạo — đủ để triển khai màn hình danh sách đơn hàng ngay cả khi backend chưa hoàn thiện.
Smart Mock quyết định giá trị như thế nào?
Smart Mock áp dụng ba mức ưu tiên khi tạo dữ liệu cho từng thuộc tính.
- Mock Field
Nếu bạn cấu hình giá trị hoặc biểu thức mock trực tiếp trên thuộc tính, thiết lập này có ưu tiên cao nhất.
Có hai lựa chọn:
- Fixed value: luôn trả về một giá trị cố định.
- Faker statement: tạo dữ liệu động theo biểu thức Faker.
Ví dụ: đặt currency là giá trị cố định USD, hoặc để status tạo ngẫu nhiên giữa shipped, pending và delivered.
- Property Name Matching
Nếu không có Mock Field, Smart Mock sẽ thử khớp tên thuộc tính với các quy tắc tích hợp sẵn hoặc quy tắc bạn tự thêm.
Đây là lý do email có thể tạo email hợp lý, còn createdAt có thể tạo timestamp phù hợp.
- JSON Schema
Nếu tên trường không khớp quy tắc nào, Smart Mock sẽ tạo giá trị mặc định theo kiểu dữ liệu và các ràng buộc trong JSON Schema.
Smart Mock tôn trọng các ràng buộc JSON Schema, bao gồm:
enum-
minimumvàmaximum -
minLengthvàmaxLength patternminItems- Kiểu dữ liệu của thuộc tính
Ví dụ, nếu status là enum:
{
"type": "string",
"enum": ["pending", "shipped", "delivered"]
}
Smart Mock chỉ trả về một trong ba giá trị này.
Nếu mảng có minItems: 3, phản hồi sẽ chứa ít nhất ba phần tử.
Apidog cũng hỗ trợ locale cho mock. Bạn có thể đổi locale để tạo dữ liệu phù hợp với thị trường, chẳng hạn tên và địa chỉ theo định dạng Nhật Bản.
Khi Smart Mock đoán sai: cách điều chỉnh
Smart Mock dựa trên suy luận nên đôi khi không tạo ra dữ liệu đúng ý. Ví dụ:
-
skukhông khớp quy tắc tích hợp sẵn và chỉ trả về chuỗi chung. -
totaltrả về số nguyên trong khi UI cần số thập phân. -
statustrả về giá trị không nằm trong nghiệp vụ thực tế.
Dưới đây là các cách xử lý, từ đơn giản đến kiểm soát cao hơn.
1. Thắt chặt JSON Schema
Đây thường là cách nên làm đầu tiên.
Ví dụ schema cho một đơn hàng:
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"pattern": "^SKU-[A-Z0-9]{6}$"
},
"total": {
"type": "number",
"minimum": 0,
"maximum": 10000
},
"status": {
"type": "string",
"enum": ["pending", "shipped", "delivered"]
}
}
}
Khi schema cụ thể hơn, dữ liệu Smart Mock cũng nằm trong phạm vi mong muốn hơn.
2. Thiết lập Mock Field
Dùng Mock Field khi schema không diễn tả đầy đủ dữ liệu bạn muốn.
Ví dụ:
- Đặt
currencylà Fixed value:USD. - Dùng Faker statement cho
statusnếu cần dữ liệu thay đổi theo các giá trị hợp lệ.
Faker của Apidog dựa trên các ý tưởng tương tự Mock.js. Xem thêm hướng dẫn sử dụng Faker trong Apidog.
3. Thêm quy tắc Property Name Matching
Nếu cùng một trường xuất hiện ở nhiều endpoint, hãy tạo quy tắc dùng chung.
Ví dụ, để tất cả trường sku trong dự án tuân theo một định dạng:
- Vào Settings.
- Chọn General Settings.
- Chọn Feature Settings.
- Mở Mock Settings.
- Nhấp New.
- Tạo điều kiện khớp với tên
sku. - Cấu hình biểu thức mock tương ứng.
Từ đó, mọi trường sku sẽ dùng quy tắc này thay vì trả về chuỗi mặc định.
Thứ tự ưu tiên mock: phản hồi nào được trả về?
Khi một endpoint có nhiều nguồn phản hồi, Apidog sử dụng thiết lập Default mock method trong:
Project Settings → Mock Settings
Có hai chế độ:
- Smart Mock First mặc định theo thứ tự:
Mock Expectation → Smart Mock
- Response example first theo thứ tự:
Mock Expectation → Response Example → Smart Mock
Mock Expectation luôn có ưu tiên cao nhất nếu điều kiện khớp.
Ví dụ, bạn cấu hình expectation trả về 404 khi userId=9999. Khi request có điều kiện đó, Apidog sẽ trả về phản hồi expectation, bất kể bạn đang dùng Smart Mock First hay Response Example First.
Để tìm hiểu thêm về phản hồi dựa trên tham số, xem hướng dẫn mock các phản hồi API có điều kiện trong Apidog.
Tóm lại:
Mock Expectation
> Response Example hoặc Smart Mock
> Smart Mock làm fallback
Local Mock, Cloud Mock và Runner Mock
Smart Mock và Custom Mock mô tả cách dữ liệu được tạo. Còn Local, Cloud và Runner Mock mô tả nơi mock chạy.
Local Mock
Local Mock chạy trên máy tính của bạn thông qua ứng dụng Apidog.
- Tự khởi động khi ứng dụng mở.
- Lắng nghe tại
127.0.0.1:4523. - Không có trên Apidog Web.
- Phù hợp cho công việc frontend cá nhân.
Cloud Mock
Cloud Mock được lưu trữ trên máy chủ Apidog.
- Có thể truy cập 24/7.
- Tắt theo mặc định.
- Cần bật trong phần quản lý môi trường.
- Dùng URL bắt đầu bằng
https://mock.apidog.com. - Phù hợp khi đồng đội hoặc bản preview đã deploy cần truy cập mock.
Cloud Mock dùng cho kiểm thử, không dành cho lưu lượng production.
Runner Mock
Runner Mock được tự lưu trữ trên hạ tầng của đội ngũ.
- Phù hợp khi mock cần nằm trong mạng nội bộ.
- Có thể chia sẻ trong nhóm.
- Hữu ích với môi trường riêng hoặc yêu cầu hạ tầng tự quản lý.
Chọn nhanh:
| Nhu cầu | Lựa chọn |
|---|---|
| Phát triển frontend trên máy cá nhân | Local Mock |
| Chia sẻ mock cho đồng đội hoặc preview | Cloud Mock |
| Lưu trữ mock trong hạ tầng nội bộ | Runner Mock |
Tham khảo thêm so sánh các công cụ mock API trực tuyến và hướng dẫn Apidog Cloud Mock.
Lưu ý về định tuyến mock
Có một số quy tắc định tuyến cần nhớ.
Endpoint path phải bắt đầu bằng /
Đường dẫn đúng:
/orders
Một URL đầy đủ không bắt đầu bằng / sẽ không sử dụng mock environment. Đường dẫn không có dấu / đầu chỉ hoạt động ở chế độ ID.
Hai API trùng method và path
Nếu hai API có cùng HTTP method và path, chế độ path không thể tự xác định endpoint.
Thêm query parameter sau để chỉ định endpoint:
?apidogApiId={endpointId}
Dữ liệu thay đổi khi gửi request mới
Mỗi lần gọi lại request, Smart Mock có thể sinh dữ liệu động mới.
Nếu nhận được cùng phản hồi nhiều lần, hãy kiểm tra xem client hoặc trình duyệt có đang dùng dữ liệu cache hay không.
Tự động hóa quy trình với Apidog CLI
Mocking là khả năng GUI và cloud trong Apidog. Apidog CLI không khởi động mock server từ terminal.
Vai trò của CLI là giữ schema API — nguồn dữ liệu của Smart Mock — luôn chính xác khi dự án phát triển.
Vì Smart Mock sinh dữ liệu từ endpoint schema, mock chỉ chính xác khi đặc tả chính xác. Apidog CLI và các coding agent như Cursor, Claude Code, Trae và Codex có thể hỗ trợ tạo hoặc cập nhật endpoint và schema trong dự án.
Sau khi mock giúp frontend tiếp tục phát triển, bạn có thể chạy scenario kiểm thử trong CI để kiểm tra backend thực tế theo cùng API contract:
apidog run -t <scenario_id> -e <env_id> -r html,cli
Cài CLI:
npm install -g apidog-cli
Yêu cầu Node.js v16 trở lên.
Đăng nhập bằng token:
apidog login --with-token <your-token>
Sau đó tích hợp lệnh chạy scenario vào pipeline CI/CD. Xem hướng dẫn chạy Apidog trong pipeline CI/CD.
Câu hỏi thường gặp
Có cần viết mã để dùng Smart Mock không?
Không. Chỉ cần endpoint có response schema, Smart Mock sẽ tự tạo dữ liệu.
Bạn chỉ cần dùng Faker statement, Mock Field hoặc mock script khi muốn ghi đè dữ liệu của một trường cụ thể. Xem thêm tổng quan về mock API.
Vì sao URL mock không trả về gì?
Các nguyên nhân phổ biến:
- Endpoint chưa có response schema.
- Path không bắt đầu bằng
/. - Ứng dụng Apidog chưa mở khi dùng Local Mock.
- URL hoặc endpoint ID không đúng.
Làm sao để trả về giá trị cụ thể thay vì dữ liệu ngẫu nhiên?
Thiết lập Mock Field cho thuộc tính đó.
- Dùng Fixed value nếu giá trị luôn cố định.
- Dùng Faker statement nếu cần dữ liệu đa dạng nhưng có kiểm soát.
Mock Field có ưu tiên cao hơn Property Name Matching và JSON Schema mặc định.
Đồng đội có thể gọi Local Mock trên máy tôi không?
Chỉ khi họ truy cập được qua mạng cục bộ và ứng dụng Apidog đang mở.
Nếu cần mock luôn sẵn sàng, hãy bật Cloud Mock và sử dụng URL https://mock.apidog.com.
Nếu có cả Response Example và Smart Mock, phản hồi nào được dùng?
Điều này phụ thuộc vào Default mock method:
- Với Smart Mock First, Smart Mock được dùng sau khi không có Mock Expectation khớp.
- Với Response example first, Response Example được dùng trước Smart Mock.
- Mock Expectation luôn ghi đè cả hai nếu điều kiện khớp.
Tóm tắt
Smart Mock biến API schema thành mock hoạt động mà không cần viết mã hay duy trì JSON giả thủ công.
Quy trình triển khai:
- Thêm response schema cho endpoint.
- Sao chép URL mock từ tab API hoặc Mock.
- Gọi mock từ frontend hoặc
curl. - Thắt chặt JSON Schema nếu dữ liệu chưa phù hợp.
- Dùng Mock Field hoặc Property Name Matching khi cần kiểm soát nhiều hơn.
- Dùng Mock Expectations cho phản hồi có điều kiện.
Khi backend chưa sẵn sàng, Smart Mock giúp frontend tiếp tục triển khai dựa trên cùng API contract thay vì chờ đợi hoặc duy trì mock thủ công.


Top comments (0)