DEV Community

Cover image for Bruno มี Mock Server ไหม (และอะไรที่ควรใช้แทน)
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

Bruno มี Mock Server ไหม (และอะไรที่ควรใช้แทน)

Bruno คือไคลเอนต์ API แบบ Git-native, โอเพนซอร์ส และน้ำหนักเบา เหมาะกับการส่งคำขอ จัดการคอลเลกชันเป็นไฟล์ และทำงานร่วมกับ Git แต่มีข้อจำกัดสำคัญสำหรับทีมที่ต้องพัฒนาแบบขนาน: Bruno ไม่มีเซิร์ฟเวอร์จำลอง endpoint ในตัว หากคุณต้องการ mock endpoint ที่ยังไม่มีอยู่ บทความนี้สรุปทางเลือกที่ใช้ได้จริง และวิธีสร้าง Mock URL จาก OpenAPI spec โดยตรง

ลองใช้ Apidog วันนี้

คำตอบสั้น ๆ: Bruno ไม่มี mock server ในตัว คุณสามารถส่ง request และเขียน test/assertion ได้ แต่ไม่สามารถตั้ง endpoint ปลอมที่คืน response ตัวอย่างได้โดยตรง หากต้องการ mock API คุณต้องใช้เครื่องมือภายนอก หรือเขียนเซิร์ฟเวอร์ stub เอง

ทำไมคุณถึงต้องการเซิร์ฟเวอร์จำลอง

Mock server ช่วยคืน response ที่สมจริงสำหรับ endpoint ที่ยังไม่ได้สร้าง ยังไม่เสถียร หรือเรียกใช้งานจริงได้ยาก เหมาะกับกรณีต่อไปนี้:

  • พัฒนาแบบขนาน: frontend/mobile ทำงานตาม API contract ได้โดยไม่ต้องรอ backend
  • ทดสอบ error path: บังคับให้ API คืน 429, 503, header เฉพาะ หรือ payload ผิดรูปแบบได้
  • ทำ demo/prototype: แสดง workflow ได้โดยไม่ต้องมี backend, database หรือ credential จริง
  • ทำ CI ให้เสถียรขึ้น: test ไม่ล้มเพราะ staging down หรือโดน rate limit

ตัวอย่างสถานการณ์ที่ mock server ช่วยให้คุณทดสอบได้ตั้งใจ:

สถานการณ์ สิ่งที่ mock ส่งคืน ทำไมทำกับ API จริงได้ยาก
เกินขีดจำกัดอัตรา 429 + header Retry-After backend ไม่ค่อย rate limit ตามต้องการ
เซิร์ฟเวอร์หยุดทำงาน 500 / 503 ไม่ควรทำให้ staging พังเพื่อทดสอบ
response ช้า payload ที่หน่วงเวลา จำลอง latency จริงได้ยาก
result ว่าง 200 พร้อม [] ต้องพึ่ง state ของข้อมูล
payload ผิดรูปแบบ response ที่ขาด field จำเป็น backend validation มักป้องกันไว้แล้ว

Bruno มีเซิร์ฟเวอร์จำลองหรือไม่?

ไม่มี

Bruno โฟกัสที่การส่ง request, จัดระเบียบ collection เป็นไฟล์ธรรมดา และรัน assertion ไม่มี mock server ในตัว และไม่มี setting ที่แปลง request ที่บันทึกไว้ให้กลายเป็น stub endpoint ได้

ในทางปฏิบัติ ผู้ใช้ Bruno มักแก้ด้วย 2 วิธี:

  1. ใช้เครื่องมือ mock ภายนอก

    เช่น Mockoon, WireMock, Prism หรือ json-server แล้วชี้ Bruno ไปยัง URL ของ mock server

  2. เขียน stub server เอง

    เช่น Express, Flask หรือ FastAPI ที่คืน JSON ตามที่กำหนด

ตัวอย่าง Express stub แบบง่าย:

import express from "express";

const app = express();

app.get("/users", (req, res) => {
  res.json([
    {
      id: 1,
      name: "Somchai",
      email: "somchai@example.com"
    }
  ]);
});

app.get("/rate-limit", (req, res) => {
  res.set("Retry-After", "60");
  res.status(429).json({
    error: "Too Many Requests"
  });
});

app.listen(3000, () => {
  console.log("Mock server running at http://localhost:3000");
});
Enter fullscreen mode Exit fullscreen mode

จากนั้นใน Bruno ให้เปลี่ยน base URL เป็น:

http://localhost:3000
Enter fullscreen mode Exit fullscreen mode

วิธีนี้ใช้ได้ แต่เมื่อ API โตขึ้น คุณต้องดูแล mock response แยกจาก spec และ request collection

ต้นทุนของการ mock แบบ bolt-on

การต่อ mock layer แยกจาก Bruno ใช้งานได้ แต่มีต้นทุนสะสม:

  • Drift: spec, request ใน Bruno และ mock definition อยู่คนละที่ แก้ endpoint ครั้งเดียวต้องอัปเดตหลายจุด
  • Setup tax: สมาชิกใหม่ต้องติดตั้งและ configure mock tool ก่อนเริ่มงาน
  • Manual response writing: ต้องเขียน payload ตัวอย่างเองทุก field และทุก status code
  • ข้อมูลไม่สมจริง: static stub อาจคืน "name": "string" ซ้ำ ๆ ทำให้ไม่เจอ bug ที่เกิดจากข้อมูลจริงที่หลากหลาย

ถ้าทีมเริ่มเจอปัญหาเหล่านี้ ดูแนวทางเพิ่มเติมได้ที่ แพลตฟอร์ม API แบบครบวงจรทางเลือกของ Bruno

สร้างเซิร์ฟเวอร์จำลองจาก OpenAPI spec ของคุณแทน

วิธีที่สะอาดกว่าคือสร้าง mock จาก contract ที่ทีมดูแลอยู่แล้ว เช่น OpenAPI spec

Apidog สามารถนำเข้าหรือเขียน OpenAPI spec แล้วสร้าง mock server จาก definition เดียวกับที่ใช้สำหรับออกแบบ ทดสอบ และทำเอกสาร API ได้ ทำให้มีแหล่งข้อมูลความจริงเดียว แทนที่จะกระจายเป็นหลายไฟล์หลายเครื่องมือ

Apidog mock server

สิ่งที่แตกต่างจาก mock แบบแยกเครื่องมือ:

  • Mock จาก spec: อ่าน field name และ type จาก schema แล้วคืนข้อมูลที่เป็นไปได้ เช่น email เป็นรูปแบบอีเมล และ created_at เป็นวันที่
  • Dynamic response: สร้าง response จาก schema ในแต่ละ request ทำให้ข้อมูลหลากหลายกว่าตัวอย่างแบบ static
  • ไม่ต้องเขียน server เอง: define endpoint ใน spec แล้วใช้ Mock URL ได้
  • sync กับ spec: เมื่อแก้ spec, mock response จะอัปเดตตาม definition เดียวกัน

ถ้า workflow ของคุณเน้น Git, spec ยังสามารถ diff และ review ได้ตามปกติ ซึ่งเข้ากับ เวิร์กโฟลว์ API แบบ Git-native ดู use case เพิ่มเติมได้ที่ กรณีการใช้งานการจำลอง API

วิธีเร่งรัด: จาก Spec สู่ Mock URL

ขั้นตอนใช้งานแบบสั้น:

  1. นำเข้า OpenAPI spec

    ใช้ไฟล์ OpenAPI/Swagger หรือชี้ไปยัง URL ของ spec endpoint

  2. เปิด endpoint ที่ต้องการ mock

    endpoint ที่ import เข้ามาจะมี schema ของตัวเองอยู่แล้ว

  3. คัดลอก Mock URL

    Apidog สร้าง mock endpoint ให้ใช้งานได้โดยไม่ต้อง deploy server เพิ่ม

  4. ส่ง request ไปยัง Mock URL

    ตัวอย่าง:

   curl https://mock-url.example.com/users
Enter fullscreen mode Exit fullscreen mode

คุณจะได้ JSON ที่สร้างตาม schema กลับมา

  1. ปรับ response เมื่อจำเป็น เพิ่ม rule สำหรับ status code หรือ scenario เฉพาะ เช่น 429, 500, empty result หรือ malformed payload

จากนั้นชี้ frontend, mobile app หรือ test suite ไปยัง Mock URL เพื่อเริ่มพัฒนาได้ทันที แม้ backend ยังไม่เสร็จ

เมื่อวิธีแก้เฉพาะหน้าก็เพียงพอแล้ว

คุณอาจไม่จำเป็นต้องใช้ spec-driven mock เสมอไป ใช้ Bruno ร่วมกับ mock tool ภายนอกได้ถ้า:

  • ต้อง mock แค่ 1–2 endpoint เพื่อทดสอบเร็ว ๆ
  • ทีมพอใจกับ collection แบบไฟล์ของ Bruno และไม่ต้องการเปลี่ยน workflow
  • static stub เพียงพอ และไม่ได้ทดสอบข้อมูลหลากหลายหรือ error path จำนวนมาก
  • ทีมใช้งาน Mockoon, WireMock หรือ Prism อยู่แล้ว และการดูแล mock definition แยกไม่ได้เป็นภาระ

สรุป trade-off:

  • Bruno + mock tool ภายนอก: เบาและยืดหยุ่น แต่ต้องดูแล mock แยก
  • Spec-driven mock: ลด drift และใช้ contract เดียวกัน แต่ต้องนำแพลตฟอร์มที่กว้างขึ้นมาใช้

เลือกตามขนาด API และจำนวนทีมที่ต้องพึ่ง contract เดียวกัน

คำถามที่พบบ่อย

Bruno มีเซิร์ฟเวอร์จำลองในตัวหรือไม่?

ไม่มี Bruno เป็น API client สำหรับส่ง request และรัน test/assertion หากต้องการ mock endpoint คุณต้องใช้เครื่องมือภายนอกหรือเขียน stub server เอง แล้วชี้ Bruno ไปยัง URL นั้น

วิธีที่ง่ายที่สุดในการเพิ่ม mock ลงใน workflow สไตล์ Bruno คืออะไร?

สร้าง mock จาก OpenAPI spec แทนการกำหนด response แยกต่างหาก เครื่องมือเช่น Apidog อ่าน spec และสร้าง Mock URL ที่พร้อมใช้งาน ทำให้ design, mock, test และ documentation ใช้แหล่งข้อมูลความจริงเดียวกัน

ฉันสามารถใช้ Bruno ต่อไปและเพิ่ม mock server ควบคู่กันได้หรือไม่?

ได้ คุณสามารถรัน Mockoon, WireMock, Prism หรือ stub server ของคุณเอง แล้วให้ Bruno ส่ง request ไปยัง URL นั้น วิธีนี้ทำงานได้ แต่ spec, request และ mock data จะอยู่คนละที่และอาจเกิด drift ได้

หากการดูแล mock layer แยกเริ่มมีต้นทุนมากกว่าประโยชน์ ลองใช้การ mock ที่ขับเคลื่อนด้วย spec นำเข้า OpenAPI ของคุณลงใน Apidog แล้วสร้าง Mock URL ที่ใช้งานได้โดยไม่ต้องโฮสต์เซิร์ฟเวอร์เพิ่ม

Top comments (0)