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 người dùng cần dữ liệu thực tế để hiển thị danh sách, phân trang và xử lý trạng thái trống. Cách khắc phục cũ là tự viết một tệp JSON giả và phục vụ nó, sau đó liên tục vá lỗi mỗi khi một trường thay đổi. Công việc đó rất nhàm chán và nó sẽ nhanh chóng không đồng bộ với API thực tế.
Có một cách nhanh hơn. Nếu bạn đã có một đặc tả API, Apidog có thể tạo ra một mock hoạt động trực tiếp từ schema endpoint, không cần cấu hình và không cần mã. Tính năng này được gọi là Smart Mock, nó đọc tên và kiểu trường của bạn để tạo ra dữ liệu trông thật: một trường name trả về một tên có vẻ hợp lý, một trường email trả về một email có vẻ hợp lý. Hướng dẫn này sẽ chỉ cho bạn cách mock hai endpoint thương mại điện tử từ đầu đến cuối, chỉ ra vị trí của URL mock, giải thích thứ tự ưu tiên quyết định phản hồi nào thắng, và trình bày những việc cần làm khi Smart Mock đoán sai. Nếu bạn muốn tìm hiểu khái niệm chung trước, tổng quan của chúng tôi về mock API là gì và hoạt động như thế nào sẽ đặt nền tảng, và trang JSON Schema giải thích mô hình ràng buộc mà Smart Mock tuân thủ.
Smart Mock làm gì và tại sao nó giúp bạn tiết kiệm thời gian
Công cụ mock của Apidog có thể làm năm điều, theo tài liệu. Nó có thể trả về dữ liệu được tạo tự động từ đặc tả API của bạn, đó là Smart Mock. Nó có thể trả về ví dụ phản hồi mà bạn đã định nghĩa trong đặc tả. Nó có thể trả về một phản hồi tùy chỉnh được chỉ định. Nó có thể trả về các phản hồi khác nhau dựa trên các tham số yêu cầu, đó là mock có điều kiện. Và nó có thể trả về các phản hồi có giá trị liên quan đến yêu cầu thông qua các mock script.

Smart Mock là thành viên không cần cấu hình của bộ tính năng đó, và nó được tích hợp vào Apidog cùng với các công cụ thiết kế, gỡ lỗi và kiểm thử. Bạn không cần định nghĩa các thân ví dụ, và bạn không cần viết các quy tắc. Chỉ cần một endpoint có schema phản hồi được chỉ định, Smart Mock sẽ đọc schema đó và điền vào mọi trường với các giá trị thực tế. Nó hoạt động như một cơ chế dự phòng tự động: bất kỳ endpoint nào thiếu ví dụ được định nghĩa trước vẫn trả về một cái gì đó hợp lý, vì vậy không có yêu cầu nào trả về trống.
Đối với một frontend bị tắc nghẽn, đó là toàn bộ vấn đề. Bạn nhập hoặc thiết kế API của mình một lần, và mỗi endpoint sẽ trở thành một mock hoạt động ngay lập tức. Khi schema thay đổi, mock cũng thay đổi theo, vì cả hai đều đọc từ một nguồn.
Trước khi bắt đầu: một yêu cầu duy nhất
Smart Mock cần một phản hồi được chỉ định trên endpoint. Đó là điều kiện tiên quyết duy nhất. Nếu bạn thiết kế API trong Apidog, hãy thêm một schema phản hồi trong định nghĩa phản hồi của endpoint. Nếu bạn nhập một tệp OpenAPI, các schema phản hồi thường đi kèm với nó. Nếu không có phản hồi được định nghĩa, công cụ sẽ không có gì để đọc, và mock sẽ không trả về bất kỳ điều gì hữu ích.
Bạn cũng sẽ cần ứng dụng Apidog dành cho máy tính để bàn nếu bạn định sử dụng Local Mock, vì nó chạy trên máy của bạn và không có sẵn trên Apidog Web. Tải xuống Apidog để làm theo. Nó miễn phí và không yêu cầu thẻ tín dụng.
Từng bước: mock GET /users và GET /orders
Hãy xây dựng một mock cho một API cửa hàng nhỏ. Chúng ta sẽ định nghĩa hai endpoint và gọi cả hai.
Bước 1: định nghĩa các endpoint và schema phản hồi của chúng
Tạo GET /users với phần thân phản hồi 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
}
Sau đó tạo GET /orders, trả về một danh sách:
[
{
"orderId": "ORD-58210",
"userId": 1024,
"total": 84.50,
"currency": "USD",
"status": "shipped",
"createdAt": "2026-05-02T14:03:00Z"
}
]
Đảm bảo mỗi thuộc tính có một kiểu trong schema. Kiểu và tên là những gì Smart Mock sử dụng để chọn các giá trị phù hợp.
Bước 2: tìm và sao chép URL mock
Mỗi endpoint tự động nhận được một URL mock. Nơi bạn tìm thấy nó phụ thuộc vào chế độ bạn đang sử dụng:
- Trong chế độ DESIGN, URL mock nằm trong tab API dưới endpoint.
- Trong chế độ DEBUG, nó nằm trong tab Mock.
Nhấp vào "Nhấp để sao chép" để lấy nó. Một điều cần lưu ý: thao tác này chỉ sao chép URL. Nếu endpoint của bạn sử dụng một phương thức khác ngoài GET, hoặc cần một phần thân yêu cầu, bạn phải tự thêm phương thức và phần thân khi gọi nó.
Một URL Local Mock chạy trên 127.0.0.1 cổng 4523 và trông như thế này ở chế độ đường dẫn:
http://127.0.0.1:4523/m1/{projectID}-{versionNo}-{serverNo}/users
Local Mock tự động khởi động khi ứng dụng Apidog đang mở. Cũng có một dạng chế độ ID nhắm mục tiêu một endpoint bằng ID của nó:
http://127.0.0.1:4523/m2/{projectID}-{versionNo}-{serverNo}/{endpointId}
Bước 3: gọi mock
Gọi URL bằng curl:
curl http://127.0.0.1:4523/m1/1234567-0-0/users
Bạn sẽ nhận được kết quả tương tự như sau, được tạo từ schema của bạn:
{
"id": 3187,
"name": "Diego Marchetti",
"email": "diego.marchetti@example.net",
"phone": "+1-628-555-0113",
"createdAt": "2026-01-27T18:41:22Z",
"isActive": true
}
Lưu ý rằng name trông giống như một tên và email trông giống như một email. Đó là Property Name Matching đang hoạt động, không phải là dữ liệu ngẫu nhiên. Làm mới yêu cầu và các giá trị động sẽ được tạo lại, vì vậy mỗi lần gọi sẽ cung cấp cho bạn dữ liệu mới. Điều này hữu ích để kiểm tra cách giao diện người dùng của bạn xử lý nội dung đa dạng.
Gọi endpoint orders theo cùng một cách:
curl http://127.0.0.1:4523/m1/1234567-0-0/orders
Bạn nhận được một mảng các đối tượng đơn hàng với tổng số, trạng thái và dấu thời gian thực tế, sẵn sàng cho chế độ xem danh sách đơn hàng của bạn.
Cách Smart Mock quyết định từng giá trị
Khi Smart Mock điền vào một thuộc tính duy nhất, nó hoạt động thông qua một ưu tiên tạo dữ liệu ba cấp. Hiểu thứ tự này sẽ cho bạn biết chính xác cách điều khiển đầu ra.
- Trường Mock (Mock Field). Nếu bạn đặt một giá trị hoặc biểu thức tùy chỉnh cho thuộc tính trong đặc tả phản hồi, giá trị đó sẽ được ưu tiên. Trường Mock có hai loại đầu vào: một giá trị Cố định (Fixed value), là một giá trị tĩnh được trả về mỗi lần, và một câu lệnh Faker (Faker statement), là một biểu thức động tạo ra dữ liệu đa dạng. Ví dụ, đặt Trường Mock của trường
statusthành một câu lệnh Faker chọn từshipped,pending, vàdelivered. - Khớp tên thuộc tính (Property Name Matching). Nếu không có Trường Mock nào được đặt, Smart Mock sẽ khớp tên thuộc tính với các quy tắc tích hợp sẵn sử dụng các mẫu ký tự đại diện hoặc biểu thức chính quy, sau đó tạo dữ liệu phù hợp. Đây là lý do tại sao
emailvàcreatedAthiển thị đúng. Các quy tắc nằm trong Cài đặt Mock (Mock Settings), và bạn có thể thêm quy tắc của riêng mình. - JSON Schema. Nếu tên không khớp với quy tắc nào, Smart Mock sẽ quay lại một giá trị mặc định dựa trên kiểu dữ liệu bị ràng buộc bởi schema của bạn. Một chuỗi không có tên khớp và không có ràng buộc sẽ chỉ nhận được một chuỗi chung.

Dữ liệu được tạo ra tuân thủ các ràng buộc JSON Schema của bạn: độ dài chuỗi, giá trị enum, phạm vi số và độ dài mảng đều được tôn trọng. Nếu bạn đặt status là một enum gồm ba giá trị, Smart Mock sẽ chỉ trả về một trong ba giá trị đó. Nếu bạn đặt minItems của một mảng là 3, bạn sẽ nhận được ít nhất ba mục. Mọi cài đặt thuộc tính đều xuất hiện trong dữ liệu mock cuối cùng.
Apidog cũng hỗ trợ các ngôn ngữ địa phương (locale) cho mock, vì vậy bạn có thể tạo dữ liệu kiểm thử bằng các ngôn ngữ và định dạng khu vực khác nhau. Nếu cửa hàng của bạn phục vụ thị trường Nhật Bản, hãy chuyển đổi locale và tên cũng như địa chỉ sẽ trả về đúng định dạng.
Khi Smart Mock đoán sai, và cách điều chỉnh nó
Smart Mock hoạt động dựa trên suy luận, vì vậy đôi khi nó có thể đoán sai. Một thuộc tính có tên sku có thể không khớp với bất kỳ quy tắc tích hợp sẵn nào và sẽ quay lại một chuỗi chung. Một total có thể trả về một số nguyên khi bạn muốn hai chữ số thập phân và một phạm vi hợp lý. Dưới đây là cách sửa lỗi, từ cách nhẹ nhàng nhất đến cách kiểm soát nhiều nhất.
Trước tiên, hãy thắt chặt schema. Thường thì cách khắc phục là một ràng buộc tốt hơn. Thêm một enum cho status, một minimum và maximum cho total, hoặc một pattern cho sku. Smart Mock tôn trọng tất cả những điều này, vì vậy đầu ra sẽ nằm trong phạm vi mà không cần bất kỳ giá trị tùy chỉnh nào.
Đặt một Trường Mock (Mock Field). Khi chỉ schema không thể diễn tả điều bạn muốn, hãy đặt Trường Mock của thuộc tính. Sử dụng giá trị Cố định (Fixed value) khi trường luôn phải trả về cùng một thứ, chẳng hạn như currency là USD. Sử dụng câu lệnh Faker (Faker statement) khi bạn muốn sự đa dạng trong phạm vi nhất định. Lớp Faker của Apidog được xây dựng dựa trên những ý tưởng tương tự như thư viện Mock.js, và hướng dẫn của chúng tôi về sử dụng Faker trong Apidog trình bày chi tiết cú pháp biểu thức.
Thêm một quy tắc Khớp tên thuộc tính (Property Name Matching). Nếu cùng một trường bị đặt tên sai xuất hiện trên nhiều endpoint, hãy dạy Smart Mock một lần. Vào Cài đặt (Settings), sau đó Cài đặt Chung (General Settings), sau đó Cài đặt Tính năng (Feature Settings), sau đó Cài đặt Mock (Mock Settings). Nhấp vào Mới (New), định nghĩa điều kiện khớp với tên trường của bạn và cung cấp cho nó một biểu thức mock. Từ đó trở đi, mọi sku trong dự án sẽ tạo ra mẫu bạn đã định nghĩa thay vì một chuỗi chung.
Thứ tự ưu tiên của mock: điều gì thực sự thắng thế
Một nguồn gây nhầm lẫn phổ biến là endpoint trả về phản hồi nào khi có nhiều phản hồi khả thi. Apidog giải quyết vấn đề này bằng cài đặt phương thức mock mặc định (Default mock method), được tìm thấy trong Cài đặt Dự án (Project Settings) dưới Cài đặt Mock (Mock Settings). Nó có hai tùy chọn:
- Smart Mock First (mặc định) đưa ra trình tự: Mock Expectation, sau đó Smart Mock.
- Response example first đưa ra trình tự: Mock Expectation, sau đó Response Example, sau đó Smart Mock.
Đọc từ trái sang phải. Theo mặc định, một yêu cầu sẽ kiểm tra Mock Expectation khớp, và nếu không có cái nào khớp, Smart Mock sẽ tạo ra phần thân. Chuyển sang "Response example first" và một Response Example được định nghĩa sẽ được kiểm tra trước khi Smart Mock dự phòng.
Một quy tắc đứng trên cả hai trình tự: Mock Expectations luôn được ưu tiên hàng đầu khi chúng được cấu hình và điều kiện của chúng khớp, bất kể bạn chọn trình tự nào. Vì vậy, nếu bạn thiết lập một phản hồi có điều kiện trả về 404 khi userId là 9999, thì expectation đó sẽ được kích hoạt bất kể phương thức mock mặc định là gì. Để tìm hiểu đầy đủ về các phản hồi dựa trên tham số, hãy xem hướng dẫn của chúng tôi về mock các phản hồi API có điều kiện trong Apidog.
Tóm tắt thực tế: Mock Expectations tùy chỉnh vượt trội hơn mọi thứ, sau đó là Smart Mock hoặc Response Example tùy thuộc vào cài đặt của bạn. Smart Mock luôn là lựa chọn dự phòng cuối cùng, đó là lý do tại sao mọi yêu cầu đều nhận được một phản hồi.
Local, Cloud và Runner Mock: nơi mock chạy
Smart Mock và Custom Mock mô tả cách một phản hồi được tạo ra. Nơi mock đó được lưu trữ là một lựa chọn riêng biệt, và Apidog cung cấp cho bạn ba tùy chọn:
- Local Mock chạy trên máy tính của bạn thông qua ứng dụng Apidog. Nó tự động khởi động và chỉ có thể truy cập được khi ứng dụng đang mở. Nó lắng nghe trên
127.0.0.1:4523, vì vậy đối với một thiết bị khác trên mạng của bạn, bạn cần IP LAN của máy mình. Nó không có sẵn trên Apidog Web. - Cloud Mock được lưu trữ trên máy chủ của Apidog và có thể truy cập 24/7. Nó tắt theo mặc định, vì vậy hãy bật nó trong quản lý môi trường khi bạn muốn một đồng đội hoặc một bản xem trước đã triển khai có thể truy cập mock. URL của nó sử dụng
https://mock.apidog.comvới cấu trúc đường dẫnm1/m2tương tự, và chúng được dùng cho mục đích kiểm thử, không phải cho lưu lượng truy cập sản phẩm. - Runner Mock được tự lưu trữ trên hạ tầng của nhóm bạn và chia sẻ trong toàn nhóm, phù hợp với một môi trường nội bộ nơi mock nên nằm sau mạng riêng của bạn.
Chọn Local Mock cho công việc frontend cá nhân, Cloud Mock khi người khác cần truy cập nó, và Runner Mock khi mock thuộc về máy chủ của riêng bạn. Nếu bạn đang cân nhắc các tùy chọn lưu trữ so với các dịch vụ khác, so sánh các công cụ mock API trực tuyến của chúng tôi đặt chúng cạnh nhau, và hướng dẫn Apidog Cloud Mock trình bày chi tiết về thiết lập lưu trữ.
Một vài điều cần lưu ý về định tuyến
Định tuyến mock có một vài quy tắc có thể gây khó khăn cho người dùng.
Đường dẫn endpoint phải bắt đầu bằng /. Một đường dẫn như /orders sẽ được định tuyến chính xác qua môi trường mock. Một URL hoàn chỉnh không bắt đầu bằng / sẽ không sử dụng môi trường mock chút nào, và một đường dẫn không có dấu gạch chéo đầu tiên chỉ hoạt động ở chế độ ID.
Nếu hai API chia sẻ cùng phương thức và đường dẫn, chế độ đường dẫn không thể tự phân biệt chúng. Hãy thêm tham số truy vấn ?apidogApiId={endpointId} để chỉ định chính xác endpoint mà bạn muốn.
Và hãy nhớ về hành vi làm mới: dữ liệu mock cập nhật khi bạn làm mới yêu cầu. Mỗi lần làm mới sẽ tạo lại các giá trị động, vì vậy nếu bạn thấy cùng một phản hồi hai lần, có thể bạn đang xem một chế độ xem đã lưu cache thay vì một lời gọi mới.
Tự động hóa quy trình làm việc với Apidog CLI
Mocking tự nó là một khả năng GUI và đám mây trong Apidog. Công cụ mock, dù là Local, Cloud hay Runner, đều phục vụ các phản hồi; Apidog CLI không lưu trữ hoặc khởi động một máy chủ mock từ terminal. Điều mà CLI bổ sung là một cách để giữ cho schema đằng sau các mock của bạn luôn chính xác khi dự án phát triển.
Vì Smart Mock tạo ra đầu ra từ schema endpoint, mock chỉ tốt bằng đặc tả. Apidog CLI, và các tác nhân mã hóa AI như Cursor, Claude Code, Trae, và Codex làm việc thông qua nó, có thể tạo và cập nhật các endpoint và schema trong dự án của bạn. Điều đó giữ cho đầu ra mock chính xác bất cứ khi nào hợp đồng thay đổi, mà không cần bất kỳ ai mở ứng dụng để chỉnh sửa thủ công các trường.
Sau đó, một khi mock đã gỡ bỏ các trở ngại cho công việc frontend, các kịch bản kiểm thử của cùng dự án sẽ chạy không giao diện trong CI để kiểm tra backend thực tế so với cùng một hợp đồng mà mock đã mô tả. Đó là một lệnh duy nhất:
apidog run -t <scenario_id> -e <env_id> -r html,cli
Cài đặt với npm install -g apidog-cli (Node.js v16 trở lên), xác thực với apidog login --with-token <your-token>, và bạn có thể tích hợp điều này vào bất kỳ pipeline nào. Hướng dẫn của chúng tôi về chạy Apidog trong một pipeline CI/CD sẽ hướng dẫn bạn thiết lập. Mock giúp frontend hoạt động liên tục; CLI giữ cho backend trung thực với cùng một nguồn sự thật.
Câu hỏi thường gặp
Tôi có phải viết bất kỳ mã nào để sử dụng Smart Mock không? Không. Miễn là một endpoint có schema phản hồi được chỉ định, Smart Mock sẽ tự động tạo dữ liệu thực tế. Bạn chỉ cần viết mã, một câu lệnh Faker hoặc một mock script, khi bạn muốn ghi đè một trường cụ thể. Xem tổng quan về mock API để biết các khái niệm.
Tại sao URL mock của tôi không trả về gì? Nguyên nhân phổ biến nhất là thiếu định nghĩa phản hồi trên endpoint. Smart Mock đọc schema phản hồi, vì vậy hãy thêm một cái trước. Đồng thời kiểm tra xem đường dẫn của bạn có bắt đầu bằng / hay không và, nếu bạn sử dụng Local Mock, rằng ứng dụng Apidog đang mở.
Làm cách nào để Smart Mock trả về một giá trị cụ thể thay vì một giá trị ngẫu nhiên? Đặt Trường Mock của thuộc tính. Một giá trị Cố định (Fixed value) trả về cùng một thứ mỗi lần; một câu lệnh Faker (Faker statement) trả về dữ liệu đa dạng nhưng được kiểm soát. Trường Mock nằm ở cấp ưu tiên cao nhất trong ba cấp của Smart Mock, vì vậy nó luôn thắng thế so với khớp tên và giá trị mặc định của schema.
Đồng đội có thể truy cập một mock đang chạy trên máy tính xách tay của tôi không? Chỉ qua mạng cục bộ của bạn, và chỉ khi ứng dụng Apidog đang mở, vì Local Mock lắng nghe trên 127.0.0.1:4523. Để truy cập liên tục, hãy bật Cloud Mock, tính năng này tắt theo mặc định và được lưu trữ tại https://mock.apidog.com.
Phản hồi nào thắng nếu tôi có cả ví dụ và Smart Mock? Điều đó phụ thuộc vào phương thức mock mặc định (Default mock method). Khi chọn "Smart Mock First", Smart Mock sẽ tạo phần thân. Khi chọn "Response example first", Response Example của bạn sẽ được sử dụng trước Smart Mock. Dù bằng cách nào, một Mock Expectation khớp sẽ ghi đè cả hai.
Tóm tắt
Smart Mock biến một schema API thành một mock hoạt động mà không cần mã và không cần cấu hình, đây chính xác là điều mà một frontend đang bị tắc nghẽn cần. Định nghĩa phản hồi của bạn, sao chép URL mock từ tab API hoặc tab Mock, và gọi nó; khi cần điều chỉnh các dự đoán, hãy thắt chặt schema hoặc đặt một Trường Mock, và hãy nhớ rằng Mock Expectations luôn thắng thế. Tải Apidog và mock endpoint đầu tiên của bạn chỉ trong thời gian đọc câu này.
