DEV Community

Cover image for เครื่องมือ CLI น้ำหนักเบาที่ดีที่สุดสำหรับการ Mock API
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

เครื่องมือ CLI น้ำหนักเบาที่ดีที่สุดสำหรับการ Mock API

คุณต้องการ API จำลองสำหรับพัฒนาและต้องการให้พร้อมใช้งานภายใน 30 วินาที ไม่ใช่บริการโฮสต์, Docker Compose stack หรือ GUI ที่ต้องคลิกหลายขั้นตอน แต่เป็นคำสั่งเดียวที่อ่านไฟล์และเริ่มตอบกลับบน localhost ได้ทันที

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

Lightweight mock server ทำงานตามแนวคิดนี้: ชี้เครื่องมือไปที่ OpenAPI spec หรือไฟล์ข้อมูลขนาดเล็ก รันคำสั่งเดียว แล้วให้ frontend หรือ test suite เรียก endpoint จำลองได้ระหว่างที่ backend จริงยังพัฒนาอยู่ เครื่องมือที่เบาที่สุดมักเป็นแพ็กเกจที่รันด้วย npx ได้ทันที ส่วนตัวเลือก JVM เหมาะเมื่อคุณต้องการ request matching ที่ละเอียดหรือพฤติกรรมแบบมีสถานะ

บทความนี้เปรียบเทียบ CLI mock server 6 ตัว โดยเรียงจากเครื่องมือที่เริ่มใช้งานได้เร็วที่สุด ไปจนถึงแนวทางแบบรวมศูนย์ผ่าน Apidog CLI คำสั่งติดตั้งและคำสั่ง mock ด้านล่างอ้างอิงเอกสารทางการของแต่ละเครื่องมือ หากต้องการดูตัวเลือกที่มี GUI หรือแบบโฮสต์เพิ่มเติม ดูได้ที่ เครื่องมือ API mock ที่ดีที่สุด

อะไรทำให้เครื่องมือ CLI mock เป็น “lightweight”

Lightweight หมายถึงรอยเท้า (footprint) และแรงเสียดทาน (friction) ไม่ใช่จำนวนฟีเจอร์ ใช้เกณฑ์ต่อไปนี้เมื่อเลือกเครื่องมือ:

  • ขนาดการติดตั้งและรันไทม์ — แพ็กเกจ Node ที่รันผ่าน npx ได้มักมีขนาดเล็ก ขณะที่ JVM server เป็นไฟล์ JAR ที่ต้องใช้ Java runtime
  • ความเร็วในการเริ่มต้น — mock server ควรพร้อมก่อนที่คุณจะสลับกลับไปที่ editor เครื่องมือ Node หลายตัว cold-start ได้ภายในไม่ถึงหนึ่งวินาที
  • เวลาจากศูนย์สู่ response แรก — เครื่องมือที่เบาที่สุดควรเริ่ม endpoint ได้จากไฟล์เดียวและคำสั่งเดียว
  • Terminal-first — ไม่ต้องมีบัญชี, dashboard หรือขั้นตอน GUI และควรนำไปใช้ใน shell script หรือ CI ได้โดยตรง

หากต้องการเริ่มเร็วที่สุด ให้เลือก Prism, Mockoon CLI หรือ json-server ซึ่งรันด้วย npx โดยไม่ต้องติดตั้งแบบ global

Prism (Stoplight)

Prism เปลี่ยน OpenAPI spec ให้เป็น live mock server ได้ด้วยคำสั่งเดียว เหมาะเมื่อทีมมี spec อยู่แล้วและต้องการ mock ที่ยึดตาม contract

npx @stoplight/prism-cli mock ./openapi.yaml
Enter fullscreen mode Exit fullscreen mode

คำสั่งนี้จะเริ่ม server ที่ http://127.0.0.1:4010 และเปิดทุก operation ที่อยู่ใน spec ของคุณ

วิธีใช้งาน

  1. เตรียมไฟล์ OpenAPI เช่น openapi.yaml
  2. รันคำสั่ง Prism
  3. เรียก endpoint ตาม path ที่กำหนดใน spec

Prism จะใช้ examples ที่ระบุไว้ใน response ก่อน หากไม่มี จะสร้างข้อมูลตัวอย่างที่สอดคล้องกับ schema นอกจากนี้ยังตรวจสอบ request ที่เข้ามากับ spec ดังนั้น request ที่ไม่ตรงรูปแบบจะได้รับ 422 แทนที่จะผ่านไปเงียบ ๆ

หากต้องการติดตั้งแบบ global:

npm install -g @stoplight/prism-cli
prism mock ./openapi.yaml
Enter fullscreen mode Exit fullscreen mode

ดีที่สุดสำหรับ: ทีมที่ทำงานแบบ spec-first และต้องการ mock ที่ตรงตามสัญญา รองรับ OpenAPI 3.1, 3.0, 2.0 และ Postman collections พร้อมลิขสิทธิ์ Apache-2.0

ข้อจำกัดที่แท้จริง: Prism เป็น stateless ดังนั้น POST จะไม่คงข้อมูลไว้สำหรับ create-then-read flow คุณภาพของ response จึงขึ้นกับคุณภาพของ spec และ examples ของคุณโดยตรง แนวทางนี้เหมาะกับการ mock ตาม contract และใช้ร่วมกับ เครื่องมือ REST API mocking ได้ดี

Mockoon CLI

Mockoon CLI รัน mock API จากไฟล์ environment ของ Mockoon หรือจาก OpenAPI JSON/YAML ได้โดยตรง เหมาะกับทีมที่ออกแบบ route ด้วย Mockoon desktop app แต่ต้องการรัน mock แบบ headless ใน CI หรือบน server

npx @mockoon/cli start --data ./mockoon-env.json --port 3000
Enter fullscreen mode Exit fullscreen mode

วิธีใช้งาน

  1. สร้างหรือ export ไฟล์ environment จาก Mockoon desktop app
  2. บันทึกเป็น mockoon-env.json
  3. รัน CLI พร้อมระบุไฟล์และพอร์ต
npx @mockoon/cli start --data ./mockoon-env.json --port 3000
Enter fullscreen mode Exit fullscreen mode

ค่า --data รองรับทั้งไฟล์ environment ของ Mockoon และ OpenAPI JSON/YAML หากไฟล์ environment มาจาก Mockoon เวอร์ชันเก่า CLI จะ migrate ข้อมูลในหน่วยความจำโดยไม่แก้ไขไฟล์ต้นฉบับ

หากต้องการติดตั้งแบบ global:

npm install -g @mockoon/cli
Enter fullscreen mode Exit fullscreen mode

ดีที่สุดสำหรับ: ทีมที่ต้องการออกแบบ mock ผ่าน GUI แล้วนำ environment เดียวกันไปรันแบบ headless ได้ รองรับ Docker image อย่างเป็นทางการและใช้ลิขสิทธิ์ MIT

ข้อจำกัดที่แท้จริง: route ที่ซับซ้อนมักสร้างจาก desktop app ทำให้การแก้ไขไฟล์ JSON environment ด้วยมือค่อนข้างยุ่งยาก หากต้องการ workflow ที่เขียนทุกอย่างในไฟล์เดียวด้วยตัวเอง Prism หรือ json-server อาจเหมาะกว่า

json-server

json-server เป็นทางเลือกที่เร็วมากสำหรับการสร้าง REST API เมื่อคุณยังไม่มี OpenAPI spec เพียงเขียน JSON ที่อธิบายข้อมูล แล้ว json-server จะสร้าง REST API ที่มี GET, POST, PUT, PATCH และ DELETE ให้ทันที

echo '{ "posts": [{ "id": 1, "title": "hello" }] }' > db.json
npx json-server db.json
Enter fullscreen mode Exit fullscreen mode

หลังจากรันแล้ว คุณสามารถเรียก:

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

ผลลัพธ์จะเป็นข้อมูลใน db.json:

[
  {
    "id": 1,
    "title": "hello"
  }
]
Enter fullscreen mode Exit fullscreen mode

ทดลอง CRUD แบบ stateful

เพิ่มข้อมูลใหม่ด้วย POST:

curl -X POST http://localhost:3000/posts \
  -H "Content-Type: application/json" \
  -d '{ "title": "new post" }'
Enter fullscreen mode Exit fullscreen mode

json-server จะเพิ่ม record และเขียนกลับไปยัง db.json ทำให้คุณได้พฤติกรรมแบบ stateful โดยไม่ต้องสร้าง database หรือเขียน backend เพิ่มเอง นอกจากนี้ยังรองรับ filtering, sorting และ pagination ผ่าน query parameters

เวอร์ชัน 1.x จะเฝ้าดูไฟล์และ reload เมื่อข้อมูลเปลี่ยนตามค่าเริ่มต้น หากต้องการติดตั้งแบบ global:

npm install -g json-server
Enter fullscreen mode Exit fullscreen mode

ดีที่สุดสำหรับ: นักพัฒนา frontend ที่ต้องการ REST backend ที่ใช้งานได้ภายในไม่กี่นาที แม้ยังไม่มี API spec ใช้ลิขสิทธิ์ MIT และเป็นหนึ่งใน ตัวเลือก lightweight mock server สำหรับ RESTful API ที่เริ่มจาก JSON ได้ทันที

ข้อจำกัดที่แท้จริง: json-server ออกแบบมาสำหรับ resource-style REST API ไม่เหมาะกับ custom route ที่ซับซ้อน, endpoint ที่ไม่ใช่ REST หรือการตรวจสอบ header และ request body แบบเข้มงวด มันเป็นเครื่องมือสำหรับ prototype มากกว่าตัวตรวจสอบ API contract

MockServer

MockServer เหมาะกับกรณีที่ต้องการ request matching ที่แม่นยำ แทนที่จะให้บริการตาม spec หรือข้อมูลเพียงอย่างเดียว คุณสามารถกำหนด expectation ตาม method, path, header, query และ body แล้วระบุ response, delay หรือ failure ที่ต้องการได้

เริ่ม MockServer ด้วย JAR:

java -jar mockserver-netty-5.15.0-no-dependencies.jar -p 1080
Enter fullscreen mode Exit fullscreen mode

คำสั่งนี้จะเริ่ม server บนพอร์ต 1080 จากนั้นส่ง expectations ผ่าน REST API ของ MockServer หรือควบคุมผ่านโค้ดได้

สำหรับผู้ใช้ Node.js สามารถใช้ official wrapper:

npm install mockserver-node
Enter fullscreen mode Exit fullscreen mode
const mockserver = require('mockserver-node');

mockserver.start_mockserver({
  serverPort: 1080,
});
Enter fullscreen mode Exit fullscreen mode

ใช้เมื่อใด

เลือก MockServer เมื่อ test ของคุณต้องยืนยันรายละเอียด request เช่น:

  • ต้องเป็น POST /payments
  • ต้องมี header เฉพาะ
  • ต้องมี query parameter ที่กำหนด
  • body ต้องตรงกับเงื่อนไข
  • ต้องตอบช้าหรือจำลอง error เพื่อทดสอบ timeout และ error handling

ดีที่สุดสำหรับ: integration test ที่ต้องการควบคุม request และ response อย่างละเอียด รองรับ HTTP, HTTPS และอื่น ๆ บนพอร์ตเดียว พร้อมลิขสิทธิ์ Apache-2.0

ข้อจำกัดที่แท้จริง: เป็น JVM server จึงหนักและเริ่มช้ากว่าตัวเลือก Node การกำหนด expectation ซับซ้อนกว่าการชี้ไปยัง OpenAPI spec โดยตรง หากต้องการเพียง mock จาก spec อาจเกินความจำเป็น ดูการเปรียบเทียบ ทางเลือก MockServer หากต้องการพิจารณาตัวเลือกอื่น

WireMock (standalone)

WireMock เป็น JVM mock server ที่นิยมในโลก Java และ JVM จุดเด่นคือ JAR แบบ standalone ใช้ engine เดียวกับที่ฝังใน JUnit test ได้ ดังนั้น stub ที่ใช้พัฒนาในเครื่องสามารถนำไปใช้กับ test suite ได้โดยตรง

java -jar wiremock-standalone.jar --port 8080
Enter fullscreen mode Exit fullscreen mode

คำสั่งนี้จะเริ่ม server บนพอร์ต 8080

WireMock อ่าน stub mappings จากไดเรกทอรี mappings/ หรือกำหนดผ่าน JSON API ได้ นอกจากนี้ยังสามารถบันทึก traffic จริงและ replay กลับมาเป็น stubs ซึ่งมีประโยชน์เมื่อต้อง mock third-party API ที่คุณควบคุมไม่ได้

มี Docker image อย่างเป็นทางการ:

wiremock/wiremock
Enter fullscreen mode Exit fullscreen mode

ดีที่สุดสำหรับ: ทีม JVM ที่ต้องการใช้ mocking engine เดียวกันทั้งในการพัฒนา local และ test suite รวมถึงทีมที่ต้องการ record-and-replay ใช้ลิขสิทธิ์ Apache-2.0

ข้อจำกัดที่แท้จริง: ต้องใช้ Java runtime และเริ่มช้ากว่าเครื่องมือ Node ไฟล์ JSON สำหรับ stub mapping มีความสามารถสูง แต่ต้องใช้เวลาเรียนรู้มากกว่าการเริ่มจากไฟล์ข้อมูลเดียว หากทำงานกับ browser mocking เป็นหลัก ดูการเปรียบเทียบ Mock Service Worker (MSW) alternative เพื่อดูว่า WireMock เหมาะกับ workflow ของคุณหรือไม่

Apidog CLI

เครื่องมือด้านบนแก้ปัญหา mocking คนละส่วน แต่ Apidog ใช้แนวทางแบบรวมศูนย์: การออกแบบ API, mock, test และเอกสารอยู่ในโปรเจกต์เดียวกัน และ Apidog CLI ใช้งานโปรเจกต์นั้นจาก terminal

Apidog ไม่ใช่ open source แต่เป็นผลิตภัณฑ์เชิงพาณิชย์ที่มี free tier โดย CLI ช่วยรวม workflow ที่ปกติต้องใช้ mock server, test runner และ spec tool แยกกัน

Apidog สามารถสร้าง smart mock จาก endpoint ที่กำหนด โดยสร้าง response ให้สอดคล้องกับ field types และชื่อ field ใน schema ตัวอย่างเช่น field phone จะส่งคืนหมายเลขโทรศัพท์ที่ดูสมจริงแทนสตริงสุ่ม เมื่อจำเป็นต้องกำหนด response เฉพาะสำหรับ request เฉพาะ คุณสามารถเพิ่ม mock expectation ในโปรเจกต์ได้

เริ่มต้นใช้งาน CLI:

npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog mock --help
Enter fullscreen mode Exit fullscreen mode

กลุ่มคำสั่ง mock ใช้จัดการ mock expectations ของโปรเจกต์จาก script และ CI ควบคู่กับคำสั่งสำหรับ endpoints, schemas, environments และ test runs ผลลัพธ์อยู่ในรูป JSON ที่มีโครงสร้างและมีฟิลด์ agentHints.nextSteps ซึ่งช่วยให้ทั้งมนุษย์และ AI agents ใช้งานต่อได้

ดูคำสั่งทั้งหมดได้ใน คู่มือ Apidog CLI ฉบับสมบูรณ์

ดีที่สุดสำหรับ: ทีมที่ต้องการเก็บ mock, spec และ test ไว้ใน workflow เดียว แทนที่จะดูแลหลายเครื่องมือแยกกัน ดาวน์โหลด Apidog เพื่อลองใช้ mock server และ CLI กับโปรเจกต์ของคุณ

ข้อจำกัดที่แท้จริง: Apidog เป็นแพลตฟอร์ม ไม่ใช่ไบนารีสำหรับงานเดียว จึงต้องมีโปรเจกต์และการเข้าสู่ระบบ ขณะที่ json-server เริ่มจากไฟล์เดียวได้ทันที หากต้องการ mock ชั่วคราวจากไฟล์เดียว เครื่องมือที่เบากว่าจะเหมาะกว่า แต่หากคุณออกแบบ API ใน Apidog อยู่แล้ว mock จะอยู่ใน workflow เดียวกัน

วิธีการเลือก

เลือกตามสิ่งที่คุณมีอยู่แล้ว:

  • มี OpenAPI spec → ใช้ Prism หรือ Mockoon CLI
  • มีเพียง ข้อมูล JSON → ใช้ json-server
  • ต้องการ จับคู่ request อย่างละเอียด → ใช้ MockServer หรือ WireMock
  • ต้องการรวม mock, spec และ test ไว้ในโปรเจกต์เดียว → ใช้ Apidog
เครื่องมือ ดีที่สุดสำหรับ การติดตั้ง โอเพนซอร์ส? หมายเหตุ
Prism ให้บริการ OpenAPI spec เป็น mock npx @stoplight/prism-cli ใช่ (Apache-2.0) แม่นยำตามสัญญา, stateless, พอร์ต 4010
Mockoon CLI mock ที่สร้างด้วย GUI รันแบบ headless npx @mockoon/cli ใช่ (MIT) อ่านไฟล์ env หรือ OpenAPI, มี Docker image
json-server REST API ทันทีจาก JSON npx json-server ใช่ (MIT) Stateful CRUD, ไม่ต้องใช้ spec, พอร์ต 3000
MockServer การจับคู่ request ที่แม่นยำ java -jar mockserver-netty-*.jar ใช่ (Apache-2.0) JVM, มี npm wrapper, พอร์ต 1080
WireMock การพัฒนา JVM และ test ใช้ engine เดียวกัน java -jar wiremock-standalone.jar ใช่ (Apache-2.0) Record-and-replay, Docker image, พอร์ต 8080
Apidog CLI Mock, spec และ test ในโปรเจกต์เดียว npm install -g apidog-cli ไม่ (ฟรีเทียร์) Smart mock อัตโนมัติและ managed expectations

กฎคร่าว ๆ คือ ใช้เครื่องมือ npx เมื่อเน้นความเร็ว, ใช้ JVM server เมื่อเน้นความลึกของ request matching และใช้ Apidog เมื่อต้องการ workflow เดียวแทนหลายเครื่องมือ หากยังไม่แน่ใจว่าควรใช้ mock หรือไม่ ดูตัวอย่าง API mocking use cases เพื่อประเมินว่ากรณีใดคุ้มค่า

สรุป

การเลือก lightweight mock server เริ่มจากคำถามเดียว: คุณมีอะไรอยู่แล้ว?

  • มี spec → Prism หรือ Mockoon CLI
  • ยังไม่มีอะไรนอกจากข้อมูล → json-server
  • ต้องการ matching ที่เข้มงวด → MockServer หรือ WireMock
  • ต้องการไม่ต้องเชื่อมต่อหลายเครื่องมือเอง → Apidog

ทั้ง 6 ตัวรันจาก terminal ได้, ใช้ใน CI ได้ และช่วยให้คุณมี API จำลองภายในไม่กี่วินาที เลือกเครื่องมือที่เล็กที่สุดซึ่งครอบคลุม use case ของคุณ แล้วเพิ่มความซับซ้อนเมื่อจำเป็นเท่านั้น

หากต้องการ workflow แบบรวมศูนย์ ดาวน์โหลด Apidog และสร้าง mock server จากการออกแบบ API ของคุณได้ในขั้นตอนเดียว

Top comments (0)