Bruno là một máy khách API mã nguồn mở, nhẹ, có nguồn gốc từ Git, và thiết kế đó giúp nó nhanh chóng và dễ dàng quản lý phiên bản. Nhưng nó để lại một khoảng trống mà các nhóm nhanh chóng gặp phải: không có cách nào để mô phỏng một điểm cuối (endpoint) chưa tồn tại. Nếu bạn đã tìm kiếm một giải pháp thay thế cho máy chủ giả lập (mock server) của Bruno, hướng dẫn này giải thích lý do tồn tại khoảng trống đó, các giải pháp tạm thời mà mọi người sử dụng, và cách tạo một máy chủ giả lập trực tiếp từ đặc tả OpenAPI của bạn.
Câu trả lời ngắn gọn: Bruno không có máy chủ giả lập tích hợp sẵn. Bạn có thể gửi yêu cầu và viết thử nghiệm, nhưng bạn không thể thiết lập một điểm cuối giả trả về các phản hồi mẫu. Để giả lập, bạn phải sử dụng một công cụ bên ngoài hoặc tự tay xây dựng một máy chủ.
Tại sao bạn cần một máy chủ giả lập
Máy chủ giả lập trả về các phản hồi thực tế cho các điểm cuối chưa được xây dựng, chưa ổn định hoặc khó kích hoạt theo yêu cầu. Điều đó mở ra một vài điều:
- Phát triển song song. Các nhóm front-end và di động xây dựng dựa trên hợp đồng trong khi phần backend vẫn đang được tiến hành. Không ai phải chờ đợi.
- Kiểm thử đường dẫn lỗi. Các API thực hiếm khi đưa cho bạn lỗi 429 hoặc 503 khi bạn cần. Một giả lập có thể trả về bất kỳ trạng thái, tiêu đề hoặc nội dung bị lỗi nào theo lệnh.
- Bản demo và nguyên mẫu. Trình bày một luồng hoạt động mà không cần backend trực tiếp, cơ sở dữ liệu hoặc thông tin xác thực.
- CI ổn định. Các bài kiểm thử sử dụng giả lập sẽ không bị hỏng vì máy chủ dàn dựng (staging server) bị lỗi hoặc bị giới hạn tốc độ.
Dưới đây là các kịch bản lỗi mà giả lập giúp bạn kiểm thử một cách có chủ đích, thay vì chờ chúng xảy ra trong môi trường sản phẩm:
| Kịch bản | Giả lập trả về gì | Tại sao khó thực hiện nếu không có giả lập |
|---|---|---|
| Đạt giới hạn tốc độ | 429 + tiêu đề Retry-After |
Backend hiếm khi điều tiết theo yêu cầu |
| Máy chủ ngừng hoạt động | 500 / 503 |
Không thể làm hỏng môi trường dàn dựng chỉ để kiểm thử |
| Phản hồi chậm | Nội dung bị trì hoãn | Khó tái tạo độ trễ thực tế |
| Tập kết quả trống | 200 với [] |
Phụ thuộc vào trạng thái dữ liệu cụ thể |
| Nội dung bị lỗi | Nội dung thiếu trường bắt buộc | Xác thực backend thường ngăn chặn điều này |
Bruno có máy chủ giả lập không?
Không. Bruno tập trung vào việc gửi yêu cầu, tổ chức các bộ sưu tập dưới dạng tệp văn bản thuần túy và chạy các xác nhận. Không có máy chủ giả lập gốc và không có cài đặt nào biến một yêu cầu đã lưu thành một stub trực tiếp. Đó là một lựa chọn phạm vi có chủ đích, không phải là một sự bỏ sót, nhưng điều đó có nghĩa là việc giả lập nằm ngoài công cụ.
Trên thực tế, người dùng Bruno giải quyết khoảng trống này theo hai cách:
- Công cụ giả lập bên ngoài. Thiết lập một dịch vụ riêng biệt như Mockoon, WireMock, Prism hoặc json-server, định nghĩa các phản hồi ở đó, sau đó trỏ Bruno đến URL đó. Hai công cụ, hai nguồn sự thật.
- Máy chủ tự xây dựng. Viết một ứng dụng Express, Flask hoặc FastAPI nhỏ trả về JSON được đóng gói. Nhanh chóng cho một điểm cuối, tẻ nhạt khi duy trì trên một API đang phát triển.
Cả hai đều hoạt động. Cả hai đều thêm các bộ phận chuyển động nằm ngoài bộ sưu tập của bạn.
Chi phí của việc giả lập "đắp thêm"
Việc gắn một lớp giả lập riêng biệt vào Bruno là khả thi, nhưng chi phí sẽ xuất hiện theo thời gian:
- Sai lệch. Đặc tả của bạn, các yêu cầu Bruno của bạn và các định nghĩa giả lập của bạn nằm ở ba nơi. Thay đổi một điểm cuối và bạn phải cập nhật cả ba, hoặc một trong số đó sẽ âm thầm lỗi thời.
- Chi phí thiết lập. Mọi thành viên mới trong nhóm đều phải cài đặt và cấu hình công cụ giả lập trước khi họ có thể chạy bất cứ thứ gì cục bộ.
- Viết phản hồi thủ công. Các máy chủ tự xây dựng có nghĩa là phải tự viết các payload mẫu cho từng trường và từng mã trạng thái.
- Không có dữ liệu thực tế. Các stub tĩnh luôn trả về cùng một
"name": "string", điều này che giấu các lỗi chỉ xuất hiện với các đầu vào đa dạng.
Không có điều nào trong số này là chí mạng. Nhưng đó là ma sát tích lũy khi API phát triển. Để có cái nhìn đầy đủ hơn về nơi những khoảng trống này tích tụ, hãy xem phân tích nền tảng API tất cả trong một thay thế Bruno của chúng tôi.
Thay vào đó, hãy tạo máy chủ giả lập từ đặc tả OpenAPI của bạn
Cách tiếp cận sạch hơn là tạo giả lập từ hợp đồng mà bạn đã duy trì. Apidog thực hiện điều này: nhập hoặc viết một đặc tả OpenAPI, và nó sẽ tạo một máy chủ giả lập hoạt động từ cùng các định nghĩa mà bạn sử dụng để thiết kế, kiểm thử và tài liệu. Một nguồn sự thật duy nhất, không phải ba.

Một vài điều làm cho điều này khác với các công cụ "đắp thêm":
- Giả lập thông minh từ đặc tả. Apidog đọc tên trường và kiểu dữ liệu và trả về dữ liệu hợp lý, vì vậy một trường
emailtrông giống như một email và một trườngcreated_attrông giống như một ngày, không cần phải viết quy tắc. - Phản hồi động. Các phản hồi được tạo ra từ lược đồ của bạn trên mỗi yêu cầu, vì vậy bạn nhận được dữ liệu đa dạng thay vì một ví dụ cố định. Bạn có thể thêm các quy tắc điều kiện khi bạn cần một trường hợp cụ thể.
- Thiết lập không mã. Bạn không viết hoặc lưu trữ một máy chủ riêng biệt. Định nghĩa điểm cuối trong đặc tả và URL giả lập đã sẵn sàng.
- Luôn đồng bộ. Cập nhật đặc tả và giả lập cũng cập nhật theo, vì chúng chia sẻ một định nghĩa.
Bởi vì giả lập, thư viện yêu cầu và tài liệu đều đến từ cùng một dự án, không có nơi thứ ba nào để giữ cho chúng đồng bộ. Nếu quy trình làm việc của bạn tập trung vào Git, đặc tả vẫn có thể được so sánh và xem xét, điều này rất phù hợp với quy trình làm việc API Git-native. Để biết thêm về nơi việc giả lập thể hiện giá trị của nó, hãy xem các trường hợp sử dụng giả lập API.
Hướng dẫn nhanh: từ đặc tả đến URL giả lập
Đây là phiên bản ngắn gọn về cách thiết lập một giả lập từ một đặc tả hiện có:
- Nhập đặc tả của bạn. Đưa tệp OpenAPI (hoặc Swagger) của bạn vào, hoặc trỏ Apidog đến URL đặc tả. Các điểm cuối và lược đồ hiện có sẽ được nhập nguyên vẹn.
- Mở một điểm cuối. Mỗi điểm cuối đã nhập đều có lược đồ của nó, vì vậy giả lập có mọi thứ cần thiết.
- Lấy URL giả lập. Apidog tự động hiển thị một điểm cuối giả lập cục bộ và trên đám mây. Không cần triển khai máy chủ.
- Gửi một yêu cầu. Truy cập URL giả lập và bạn sẽ nhận được JSON có cấu trúc theo lược đồ, được tạo từ đặc tả.
- Điều chỉnh phản hồi (tùy chọn). Thêm các quy tắc cho các mã trạng thái cụ thể hoặc các trường hợp biên, như lỗi
429đó, khi bạn cần kiểm thử một đường dẫn cụ thể.
Bạn trỏ giao diện người dùng, bản dựng di động hoặc bộ kiểm thử của mình đến URL giả lập và tiếp tục công việc trong khi phần backend đang hoàn thiện.
Khi các giải pháp tạm thời là đủ
Thành thật mà nói, bạn không phải lúc nào cũng cần một giả lập dựa trên đặc tả. Hãy gắn bó với Bruno cộng với một công cụ bên ngoài nhẹ khi:
- Bạn chỉ cần tạo stub một hoặc hai điểm cuối để kiểm thử cục bộ nhanh chóng.
- Nhóm của bạn hài lòng với việc duy trì các bộ sưu tập dựa trên tệp của Bruno và không muốn chuyển đổi công cụ.
- Một stub tĩnh là tốt vì bạn không kiểm thử dữ liệu đa dạng hoặc nhiều đường dẫn lỗi.
- Bạn đã chạy Mockoon, WireMock hoặc Prism và nguồn sự thật bổ sung không làm bạn chậm lại.
Sự đánh đổi là có thật: con đường nhẹ nhàng giữ được sự đơn giản của Bruno nhưng khiến bạn phải duy trì các giả lập riêng biệt. Con đường dựa trên đặc tả loại bỏ sự sai lệch đó với cái giá là áp dụng một nền tảng rộng hơn. Hãy chọn dựa trên mức độ phát triển của API của bạn.
FAQ
Bruno có máy chủ giả lập tích hợp sẵn không?
Không. Bruno là một máy khách API để gửi yêu cầu và chạy các bài kiểm thử. Nó không có máy chủ giả lập gốc, vì vậy để giả lập các điểm cuối, bạn sử dụng một công cụ bên ngoài hoặc tự viết máy chủ stub của riêng mình và trỏ Bruno đến đó.
Cách dễ nhất để thêm giả lập vào quy trình làm việc kiểu Bruno là gì?
Thay vì định nghĩa riêng, hãy tạo giả lập từ đặc tả OpenAPI của bạn. Các công cụ như Apidog đọc đặc tả và tạo ra một URL giả lập sẵn sàng, vì vậy bạn giữ một nguồn sự thật duy nhất cho thiết kế, giả lập, kiểm thử và tài liệu thay vì duy trì các định nghĩa giả lập ở một nơi khác.
Tôi có thể tiếp tục sử dụng Bruno và chỉ cần thêm một máy chủ giả lập bên cạnh nó không?
Có. Chạy một công cụ giả lập bên ngoài như Mockoon, WireMock hoặc Prism, định nghĩa các phản hồi ở đó và trỏ Bruno đến URL đó. Nó hoạt động, nhưng đặc tả, yêu cầu và dữ liệu giả lập của bạn nằm ở các nơi riêng biệt và có thể bị lệch, đây là lý do chính khiến các nhóm hợp nhất.
Nếu việc duy trì một lớp giả lập riêng biệt đã bắt đầu tốn kém hơn lợi ích nó mang lại, thì việc thử một giả lập dựa trên đặc tả là đáng giá. Nhập tệp OpenAPI của bạn vào Apidog và bạn sẽ có một URL giả lập hoạt động chỉ trong vài phút, không cần phải lưu trữ thêm máy chủ.
