คุณต้องการ API จำลองเพื่อใช้ในการพัฒนา และคุณต้องการมันภายในสามสิบวินาที ไม่ใช่บริการโฮสต์ ไม่ใช่ Docker Compose stack ไม่ใช่ GUI ให้คลิกใช้งาน เพียงแค่คำสั่งเดียวที่อ่านไฟล์และเริ่มให้บริการตอบกลับบน localhost
นั่นคือสิ่งที่ lightweight mock server ทำ คุณชี้ไปที่ OpenAPI spec หรือไฟล์ข้อมูลขนาดเล็ก รันคำสั่งเดียว และรับ endpoints ที่สมจริงที่ frontend หรือการทดสอบของคุณสามารถเรียกใช้งานได้ ในขณะที่ backend จริงยังคงอยู่ระหว่างการพัฒนา เครื่องมือที่ดีที่สุดจะมาในรูปแบบไบนารีเดียว หรือแพ็คเกจที่สามารถ npx ได้ เริ่มทำงานภายในไม่ถึงหนึ่งวินาที และแทบไม่ต้องการการกำหนดค่าใดๆ ตัวเลือกที่ซับซ้อนกว่าบางตัวในที่นี้ทำงานบน JVM และทำได้มากกว่านั้นมาก ซึ่งเป็นสิ่งที่จำเป็นเมื่อคุณต้องการการจับคู่คำขอขั้นสูงหรือพฤติกรรมที่มีสถานะ (stateful behavior)
คู่มือนี้จัดอันดับ CLI mockers หกตัวตามความง่ายในการใช้งาน โดยเริ่มจากเครื่องมือที่คุณสามารถรันได้โดยไม่ต้องติดตั้งอะไรเลย จากนั้นจะครอบคลุมเซิร์ฟเวอร์ JVM แบบสแตนด์อโลน และปิดท้ายด้วยเส้นทางแบบบูรณาการผ่าน Apidog CLI คำสั่งติดตั้งและคำสั่ง mock ทุกคำสั่งด้านล่างได้รับการตรวจสอบกับเอกสารทางการของแต่ละเครื่องมือแล้ว หากคุณต้องการขอบเขตที่กว้างขึ้นนอกเหนือจาก command line การรวบรวม เครื่องมือ API mock ที่ดีที่สุด ครอบคลุมถึงตัวเลือก GUI และแบบโฮสต์ด้วย
button
อะไรทำให้เครื่องมือ CLI mock เป็น “lightweight”
Lightweight หมายถึงรอยเท้า (footprint) และแรงเสียดทาน (friction) ไม่ใช่จำนวนฟีเจอร์ เมื่อคุณเปรียบเทียบเครื่องมือเหล่านี้ ให้พิจารณาสี่สิ่ง:
- ขนาดการติดตั้งและรันไทม์ แพ็คเกจ Node บริสุทธิ์ที่คุณสามารถ
npxได้มีขนาดไม่กี่เมกะไบต์ เซิร์ฟเวอร์ JVM แบบสแตนด์อโลนเป็นไฟล์ jar ขนาด 20MB+ ที่ต้องใช้ Java runtime ทั้งสองอย่างใช้ได้จริง แต่เป็นคนละปลายด้านของรายการนี้ - ความเร็วในการเริ่มต้น Mock server ที่ดีจะทำงานก่อนที่คุณจะสลับกลับไปที่ editor ของคุณ เครื่องมือที่ใช้ Node จะ cold-start ได้ในเวลาไม่ถึงหนึ่งวินาที
- การตั้งค่าจนถึงการตอบกลับครั้งแรก คุณสามารถเปลี่ยนจากศูนย์ไปสู่ endpoint ที่ใช้งานได้ด้วยไฟล์เดียวและคำสั่งเดียวหรือไม่ เครื่องมือที่เบาที่สุดตอบว่าใช่
- Terminal-first ไม่มีบัญชี ไม่มีแดชบอร์ด ไม่มีขั้นตอน GUI ในกระบวนการ เครื่องมือจะอ่านไฟล์และให้บริการ และสามารถรวมอยู่ใน shell script หรือ CI job ได้
เครื่องมือต่างๆ เรียงลำดับจากขนาดเล็กที่สุดและเร็วที่สุดก่อน Prism, Mockoon CLI และ json-server เป็นเครื่องมือที่คุณสามารถรันได้ด้วย npx โดยไม่ต้องติดตั้งแบบ global
Prism (Stoplight)
Prism เปลี่ยนไฟล์ OpenAPI ให้เป็น live mock server ด้วยคำสั่งเดียว หากคุณมี spec อยู่แล้ว นี่คือ mock ที่ใช้ความพยายามน้อยที่สุดในรายการ มันจะอ่าน paths, examples และ schemas ของคุณ และให้บริการตอบกลับที่ตรงกัน
npx @stoplight/prism-cli mock ./openapi.yaml
นั่นจะเริ่มเซิร์ฟเวอร์บน http://127.0.0.1:4010 โดยมีทุก operation ใน spec ของคุณเชื่อมต่ออยู่ Prism จะส่งคืน example ที่คุณกำหนดไว้สำหรับการตอบกลับ หรือสร้างแบบสุ่มที่ถูกต้องจาก schema หากคุณไม่ได้กำหนดไว้ นอกจากนี้ยังตรวจสอบคำขอที่เข้ามากับ spec ดังนั้นการเรียกที่ผิดรูปแบบจะได้รับ 422 ที่เหมาะสมแทนที่จะผ่านไปอย่างเงียบๆ สำหรับการติดตั้งแบบ global ให้ใช้ npm install -g @stoplight/prism-cli และไม่ต้องใช้ npx
ดีที่สุดสำหรับ: ทีมที่เน้น spec-first ที่ต้องการให้ mock ตรงตามสัญญา Prism ได้รับอนุญาตแบบ Apache-2.0 และรองรับ OpenAPI 3.1, 3.0, 2.0 และ Postman collections
ข้อจำกัดที่แท้จริง: Prism เป็น stateless การ POST ไม่ได้คงสถานะใดๆ ดังนั้นจึงไม่สามารถจำลอง create-then-read flow ได้ Mock ของมันจะดีเท่ากับ spec ของคุณเท่านั้น ตัวอย่างที่บางหมายถึงการตอบกลับที่บาง สำหรับการ mocking ที่แม่นยำตามสัญญา นั่นคือประเด็นสำคัญ และเข้ากันได้ดีกับเวิร์กโฟลว์ของ เครื่องมือ REST API mocking
Mockoon CLI
Mockoon CLI รัน mock API จากไฟล์ข้อมูล ไม่ว่าจะเป็นไฟล์ที่คุณส่งออกจากการใช้งาน Mockoon desktop app ฟรี หรือ OpenAPI spec แบบปกติ desktop app ช่วยให้คุณสร้างเส้นทางต่างๆ ได้ด้วยภาพ; CLI จะรันสภาพแวดล้อมเดียวกันนั้นแบบ headless ใน CI หรือบนเซิร์ฟเวอร์
npx @mockoon/cli start --data ./mockoon-env.json --port 3000
ชี้ --data ไปที่ไฟล์สภาพแวดล้อม Mockoon หรือไฟล์ OpenAPI JSON/YAML และมันจะให้บริการทันที หากไฟล์ข้อมูลมาจาก Mockoon เวอร์ชันเก่ากว่า CLI จะทำการ migrate ในหน่วยความจำโดยไม่แก้ไขไฟล์ต้นฉบับ ติดตั้งแบบ global ด้วย npm install -g @mockoon/cli หากคุณต้องการให้มีคำสั่ง mockoon-cli ถาวร
ดีที่สุดสำหรับ: ทีมที่ต้องการออกแบบ mocks ใน GUI แต่รันแบบ headless มันได้รับอนุญาตแบบ MIT และมี Docker image อย่างเป็นทางการสำหรับการ deploy
ข้อจำกัดที่แท้จริง: เส้นทางที่ซับซ้อนที่สุดถูกสร้างขึ้นใน desktop app ดังนั้นการแก้ไขไฟล์ JSON environment ด้วยมือจึงยุ่งยาก หากคุณไม่ต้องการ companion app เลย Prism หรือ json-server จะเก็บทุกอย่างไว้ในไฟล์เดียวที่คุณเขียนด้วยมือ
json-server
json-server เป็นวิธีที่เร็วที่สุดในการจำลอง REST API เมื่อคุณยังไม่มี spec คุณเขียนไฟล์ JSON ธรรมดาที่อธิบายข้อมูลของคุณ และมันจะสร้าง REST API แบบเต็มรูปแบบรอบๆ ข้อมูลนั้น โดยมี GET, POST, PUT, PATCH และ DELETE ครบถ้วน
echo '{ "posts": [{ "id": 1, "title": "hello" }] }' > db.json
npx json-server db.json
นั่นจะให้บริการ http://localhost:3000/posts ด้วย CRUD จริงๆ การ POST ไปที่ /posts จะเพิ่ม record จริงๆ และเขียนกลับไปยัง db.json ดังนั้นคุณจะได้รับพฤติกรรมแบบ stateful โดยไม่ต้องทำอะไรเลย ซึ่ง Prism และ WireMock จะไม่ให้คุณใช้งานได้ทันที นอกจากนี้คุณยังสามารถทำการ filtering, sorting และ pagination ผ่าน query params ได้ด้วย เวอร์ชัน 1.x ปัจจุบันจะเฝ้าดูไฟล์และโหลดซ้ำเมื่อมีการเปลี่ยนแปลงตามค่าเริ่มต้น ติดตั้งแบบ global ด้วย npm install -g json-server หากคุณต้องการให้มีอยู่ใน PATH ของคุณเสมอ
ดีที่สุดสำหรับ: นักพัฒนา frontend ที่ต้องการ REST backend ที่ใช้งานได้ภายในหนึ่งนาที ก่อนที่ API จริงจะเกิดขึ้น มันได้รับอนุญาตแบบ MIT และเป็นหนึ่งใน ตัวเลือก lightweight mock server สำหรับ RESTful API ที่ไม่ต้องการ spec ใดๆ
ข้อจำกัดที่แท้จริง: มันจะถือว่ามีรูปแบบ REST แบบ resource-style เส้นทางที่กำหนดเองอย่างลึกซึ้ง, endpoints ที่ไม่ใช่ REST หรือการจับคู่ header ที่เข้มงวดอยู่นอกเหนือจากสิ่งที่มันทำได้อย่างสะอาดตา มันเป็นเครื่องมือสร้างต้นแบบ ไม่ใช่ตัวตรวจสอบสัญญา
MockServer
MockServer เป็นเครื่องมือที่ซับซ้อนกว่าสำหรับการจับคู่คำขอที่แม่นยำ ในขณะที่เครื่องมือข้างต้นให้บริการ spec หรือไฟล์ข้อมูล MockServer ช่วยให้คุณกำหนด expectations: จับคู่คำขอด้วย method, path, header, query หรือ body จากนั้นส่งคืนการตอบกลับที่คุณต้องการ รวมถึงความล่าช้าและความล้มเหลวสำหรับการทดสอบ timeout และการจัดการข้อผิดพลาด
java -jar mockserver-netty-5.15.0-no-dependencies.jar -p 1080
นั่นจะเริ่ม MockServer บนพอร์ต 1080 จากนั้นคุณสามารถส่ง expectations ไปยัง REST API ของมันเพื่อกำหนดค่าพฤติกรรม หรือควบคุมด้วยโปรแกรมได้ ผู้ใช้ Node สามารถข้ามไฟล์ jar ดิบและใช้ wrapper อย่างเป็นทางการ:
npm install mockserver-node
const mockserver = require('mockserver-node');
mockserver.start_mockserver({ serverPort: 1080 });
ดีที่สุดสำหรับ: การทดสอบแบบบูรณาการที่ต้องการการควบคุมอย่างละเอียดว่าคำขอต้องมีลักษณะอย่างไร และ mock จะตอบสนองอย่างไร มันได้รับอนุญาตแบบ Apache-2.0 และรองรับ HTTP, HTTPS และอื่นๆ บนพอร์ตเดียว
ข้อจำกัดที่แท้จริง: มันเป็นเซิร์ฟเวอร์ JVM ดังนั้นจึงหนักและเริ่มทำงานช้ากว่าเครื่องมือ Node และการตั้งค่า expectation ก็ซับซ้อนกว่าการชี้ไปที่ spec หากคุณเพียงแค่ต้องการให้ spec ทำงาน นั่นเป็นเรื่องเกินความจำเป็น; หากคุณใช้งานจนเกินขีดความสามารถ การเปรียบเทียบ ทางเลือก MockServer จะอธิบายข้อดีข้อเสีย
WireMock (standalone)
WireMock เป็นอีกหนึ่ง JVM mock server ที่เป็นที่ยอมรับ และได้รับความนิยมในโลกของการทดสอบ Java และ JVM ไฟล์ jar แบบสแตนด์อโลนของมันรันเอนจินเดียวกับที่คุณจะฝังใน JUnit test ดังนั้น mock ที่คุณสร้างขึ้นในการพัฒนาในเครื่องสามารถนำไปใช้ใน test suite ของคุณได้ทันที
java -jar wiremock-standalone.jar --port 8080
นั่นจะให้บริการบนพอร์ต 8080 WireMock อ่าน stub mappings จากไดเรกทอรี mappings/ หรือ JSON API ของมัน และยังสามารถบันทึกการรับส่งข้อมูลจริงและ replay เป็น stubs ได้ ซึ่งเป็นประโยชน์เมื่อคุณกำลัง mocking API ของบุคคลที่สามที่คุณไม่ได้ควบคุม มี Docker image wiremock/wiremock อย่างเป็นทางการสำหรับ CI
ดีที่สุดสำหรับ: ทีม JVM ที่ต้องการ mocking engine เดียวกันที่ใช้ร่วมกันระหว่างการพัฒนาในเครื่องและ test suite รวมถึงคุณสมบัติ record-and-replay มันได้รับอนุญาตแบบ Apache-2.0
ข้อจำกัดที่แท้จริง: เช่นเดียวกับ MockServer มันต้องใช้ Java runtime และเริ่มทำงานช้ากว่าตัวเลือก Node ไฟล์ JSON สำหรับ stub-mapping ของมันมีประสิทธิภาพแต่ต้องเรียนรู้มากกว่าการจำลองข้อมูลจากไฟล์เดียว หากคุณมาจากฝั่ง JavaScript การเปรียบเทียบ Mock Service Worker (MSW) alternative ครอบคลุมว่า WireMock เหมาะสมกับ mocking ที่เน้นเบราว์เซอร์เป็นหลักอย่างไร
Apidog CLI
เครื่องมือข้างต้นแต่ละตัวแก้ไขปัญหาการ mocking เพียงส่วนหนึ่ง Apidog ใช้เส้นทางแบบบูรณาการ: การออกแบบ API, mock, การทดสอบ และเอกสารประกอบของคุณอยู่ในโปรเจกต์เดียวกัน และ Apidog CLI จะขับเคลื่อนโปรเจกต์นั้นจาก terminal Apidog ไม่ใช่ open source; เป็นผลิตภัณฑ์เชิงพาณิชย์ที่มี free tier แต่ free tier พร้อม CLI ช่วยให้คุณมีทางเลือกในการรวม mock server, test runner และ spec tool ที่แยกกันเข้าด้วยกัน
Apidog สร้าง smart mock โดยอัตโนมัติจากทุก endpoint ที่คุณกำหนด โดยมีการตอบกลับที่ตรงตาม field types และการตั้งชื่อของ schema ของคุณ ดังนั้นฟิลด์ phone จะส่งคืนหมายเลขโทรศัพท์ที่น่าเชื่อถือแทนที่จะเป็นสตริงสุ่ม เมื่อคุณต้องการการตอบกลับที่เฉพาะเจาะจงสำหรับคำขอที่เฉพาะเจาะจง คุณสามารถเพิ่ม mock expectation ได้ CLI จะจัดการ mock resources เหล่านั้นเป็นส่วนหนึ่งของโปรเจกต์:
npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog mock --help
กลุ่มคำสั่ง mock ทำงานร่วมกับ mock expectations ของโปรเจกต์ของคุณจากสคริปต์และ CI ควบคู่ไปกับกลุ่มคำสั่งสำหรับ endpoints, schemas, environments และ test runs ผลลัพธ์เป็น JSON ที่มีโครงสร้างพร้อมฟิลด์ agentHints.nextSteps ซึ่งทำให้ AI agents และมนุษย์สามารถใช้งานได้ คำสั่งทั้งหมดครอบคลุมอยู่ใน คู่มือ Apidog CLI ฉบับสมบูรณ์
ดีที่สุดสำหรับ: ทีมที่ต้องการเก็บ mock, spec และการทดสอบไว้ในที่เดียว แทนที่จะรันเครื่องมือสามตัวแยกกัน ดาวน์โหลด Apidog เพื่อลองใช้ mock server ในตัวและ CLI บนโปรเจกต์ของคุณเอง
ข้อจำกัดที่แท้จริง: มันเป็นแพลตฟอร์ม ไม่ใช่ไบนารีวัตถุประสงค์เดียว ดังนั้นจึงต้องการโปรเจกต์และการเข้าสู่ระบบ ในขณะที่ json-server ไม่ต้องการอะไรเลย หากสิ่งที่คุณต้องการคือ mock ชั่วคราวจากไฟล์เดียว เครื่องมือที่เบากว่าก็ชนะไป; หากคุณกำลังออกแบบ API ของคุณใน Apidog อยู่แล้ว mock ก็มีอยู่แล้ว
วิธีการเลือก
จับคู่เครื่องมือกับสิ่งที่คุณมีอยู่แล้ว หากคุณมี OpenAPI spec, Prism หรือ Mockoon CLI จะให้บริการโดยตรง หากคุณยังไม่มีอะไรเลย json-server จะสร้าง API จากไฟล์ JSON หากคุณต้องการการจับคู่คำขอที่แม่นยำ ให้ใช้ MockServer หรือ WireMock หากคุณต้องการให้ mock อยู่ข้างๆ การออกแบบและการทดสอบของคุณ ให้ใช้ 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 | การจับคู่คำขอที่แม่นยำ | java -jar mockserver-netty-*.jar |
ใช่ (Apache-2.0) | JVM, มี npm wrapper, พอร์ต 1080 |
| WireMock | การพัฒนา JVM + การทดสอบใช้เอนจินเดียวกัน | java -jar wiremock-standalone.jar |
ใช่ (Apache-2.0) | Record-and-replay, Docker image, พอร์ต 8080 |
| Apidog CLI | Mock, spec และการทดสอบในโปรเจกต์เดียว | npm install -g apidog-cli |
ไม่ (ฟรีเทียร์) | Smart mock อัตโนมัติ + managed expectations |
กฎคร่าวๆ: เครื่องมือ npx เพื่อความเร็ว, เซิร์ฟเวอร์ JVM สำหรับความลึกในการจับคู่, Apidog เมื่อคุณต้องการเวิร์กโฟลว์เดียวแทนที่จะเป็นหลายๆ อย่าง หากคุณยังตัดสินใจอยู่ว่าจะ mock เลยหรือไม่ บทความเกี่ยวกับการใช้งาน API mocking use cases จะครอบคลุมถึงกรณีที่มันคุ้มค่า
สรุป
การ mocking แบบ lightweight ขึ้นอยู่กับคำถามเดียว: คุณมีอะไรที่จะป้อนให้เครื่องมือแล้วบ้าง? Spec ไปที่ Prism หรือ Mockoon CLI สิ่งที่ไม่มีอะไรเลยไปที่ json-server การจับคู่ที่เข้มงวดไปที่ MockServer หรือ WireMock และหากคุณไม่อยากรันและเชื่อมต่อเครื่องมือหลายๆ ตัว Apidog จะเก็บ mock ไว้ข้างๆ การออกแบบและการทดสอบ ขับเคลื่อนจาก CLI เดียวกันที่คุณจะใช้สคริปต์อยู่แล้ว
ทั้งหกตัวนี้สามารถรันได้จาก terminal, เหมาะกับ CI job และให้คุณได้ API จำลองภายในไม่กี่วินาทีแทนที่จะเป็นชั่วโมง เลือกตัวที่เล็กที่สุดที่ครอบคลุมกรณีของคุณ และเพิ่มความซับซ้อนเมื่อคุณต้องการจริงๆ เท่านั้น หากต้องการดูเวอร์ชันรวม ดาวน์โหลด Apidog และสร้าง mock server จากการออกแบบ API ของคุณได้ในขั้นตอนเดียว
