คุณต้องการ API ปลอมเพื่อใช้ในการพัฒนา แบ็คเอนด์ยังไม่พร้อม หรือบริการของบุคคลที่สามมีการจำกัดอัตราการเรียกใช้ (rate-limited) หรือคุณแค่ต้องการให้การทดสอบของคุณทำงานโดยไม่ต้องเชื่อมต่อกับเซิร์ฟเวอร์จริง คำตอบทั่วไปคือ mock คำถามคือคุณจะตั้งค่ามันอย่างไร
คุณสามารถคลิกผ่าน GUI เพื่อกำหนดเส้นทางและคำตอบสำเร็จรูป (canned responses) ได้ นั่นก็ใช้ได้ครั้งเดียว แต่ mock ที่คุณสร้างด้วยมือในแอปเดสก์ท็อปนั้นยากต่อการทำซ้ำ ยากต่อการจัดเวอร์ชัน และเป็นไปไม่ได้ที่ CI หรือ AI coding agent จะสร้างขึ้นมาใหม่ได้เอง mock ที่คุณกำหนดจากบรรทัดคำสั่งนั้นแตกต่างออกไป มันคือคำสั่งในสคริปต์ ขั้นตอนในไปป์ไลน์ บรรทัดที่ agent สามารถรันได้ สิ่งที่คุณพิมพ์ เครื่องจักรก็สามารถพิมพ์ได้เช่นกัน
คู่มือนี้ครอบคลุมสองแนวทาง อย่างแรกคือแนวทางโอเพนซอร์สทั่วไป: เซิร์ฟเวอร์ mock แบบไบนารีเดี่ยวที่คุณสามารถรันได้โดยตรงจากไฟล์ ทำให้สเปกหรือไฟล์ JSON กลายเป็นเอนด์พอยต์จริงได้ด้วยคำสั่งเดียว ถัดมาคือแนวทาง CLI ของ Apidog ซึ่งทำงานแตกต่างกันและคุ้มค่าที่จะทำความเข้าใจในลักษณะของมันเอง หากคุณต้องการภาพรวมของตัวเลือกทั้งหมดก่อน การรวบรวม เครื่องมือ mock API ที่ดีที่สุด และคู่มือ เครื่องมือ mocking REST API ของเราจะช่วยให้คุณเห็นภาพที่กว้างขึ้น
แนวทางทั่วไป: รันเซิร์ฟเวอร์ mock จากไฟล์
mock CLI แบบคลาสสิกคือไบนารีขนาดเล็กที่คุณชี้ไปยังไฟล์ ให้สเปกหรือไฟล์ข้อมูลกับมัน แล้วมันจะทำหน้าที่เป็นเอนด์พอยต์ HTTP จริงบนพอร์ตโลคัล ไม่มีโปรเจกต์ ไม่มีการเข้าสู่ระบบ ไม่มีบัญชี เครื่องมือเหล่านี้ทำสิ่งเดียว: เปลี่ยนไฟล์ให้เป็น API ปลอมที่คุณสามารถเรียกใช้ได้ มีสามตัวที่ครอบคลุมเกือบทุกกรณี
Prism: ให้บริการ OpenAPI spec
หากคุณมีไฟล์ OpenAPI อยู่แล้ว Prism จาก Stoplight เป็น mock ที่ใช้ความพยายามน้อยที่สุดที่คุณสามารถรันได้ มันจะอ่าน paths, ตัวอย่าง (examples) และ schemas ของคุณ จากนั้นก็ให้บริการการตอบสนองที่ตรงตามสัญญา
npx @stoplight/prism-cli mock ./openapi.yaml
นั่นจะเริ่มเซิร์ฟเวอร์ที่ http://127.0.0.1:4010 โดยมีการเชื่อมโยงการทำงานทุกอย่างในสเปกของคุณ Prism จะคืนค่า example ที่คุณกำหนดไว้สำหรับการตอบกลับ หรือสร้างตัวอย่างสุ่มที่ถูกต้องจาก schema หากคุณไม่ได้ระบุไว้ นอกจากนี้ยังตรวจสอบความถูกต้องของคำขอที่เข้ามาเทียบกับสเปก ดังนั้นการเรียกใช้ที่ไม่ถูกต้องจะได้รับรหัส 422 ที่เหมาะสม แทนที่จะผ่านไปอย่างเงียบๆ ลองเรียกใช้เพื่อตรวจสอบว่ามันทำงานอยู่หรือไม่:
curl http://127.0.0.1:4010/orders/123
Prism เป็นแบบ stateless ดังนั้นการ POST จะไม่เก็บข้อมูลใดๆ นั่นคือจุดที่คุณต้องการให้ mock ตรงตามสัญญา สำหรับการติดตั้งแบบ global ให้รัน npm install -g @stoplight/prism-cli และไม่ต้องใช้ npx
Mockoon CLI: รันไฟล์ข้อมูลแบบ headless
Mockoon CLI รัน mock จากไฟล์ข้อมูล ไม่ว่าจะเป็นไฟล์ที่คุณส่งออก (exported) จากแอปเดสก์ท็อป Mockoon ฟรี หรือเป็น OpenAPI spec ธรรมดา แอปเดสก์ท็อปช่วยให้คุณสร้างเส้นทาง (routes) ได้ด้วยภาพ ส่วน CLI จะรันสภาพแวดล้อมเดียวกันนั้นแบบ headless ใน CI หรือบนเซิร์ฟเวอร์
npx @mockoon/cli start --data ./env.json
ชี้ --data ไปยังไฟล์สภาพแวดล้อมของ Mockoon หรือไฟล์ OpenAPI JSON/YAML แล้วมันจะให้บริการทันที โดยค่าเริ่มต้นจะใช้พอร์ต 3000 เพิ่ม --port เพื่อเปลี่ยนพอร์ต หากไฟล์ข้อมูลมาจาก Mockoon เวอร์ชันเก่า CLI จะทำการย้ายข้อมูลในหน่วยความจำโดยไม่แตะต้องไฟล์ต้นฉบับ ติดตั้งแบบ global ด้วย npm install -g @mockoon/cli เพื่อให้มีคำสั่ง mockoon-cli ใช้ได้ถาวร นี่เป็นทางเลือกที่ดีเมื่อคุณต้องการเส้นทาง (routes) ที่ละเอียดและปรับแต่งด้วยมือมากกว่าที่สเปกเปล่าๆ จะให้ได้ และยังคงต้องการให้มันรันได้โดยไม่มี GUI เซิร์ฟเวอร์ mock น้ำหนักเบาสำหรับ RESTful API มักจะเลือกใช้วิธีนี้
json-server: สร้าง REST API ปลอมจาก JSON
เมื่อคุณยังไม่มีสเปก json-server เป็นเส้นทางที่เร็วที่สุด คุณเขียนไฟล์ JSON ธรรมดาที่อธิบายข้อมูลของคุณ แล้วมันจะสร้าง REST API ที่สมบูรณ์แบบขึ้นมา
npx json-server db.json
เมื่อมี db.json ที่มีอาร์เรย์ posts มันจะให้บริการ http://localhost:3000/posts พร้อมการทำงานจริงของ GET, POST, PUT, PATCH และ DELETE การ POST จะเพิ่มเรคคอร์ดจริงและเขียนกลับไปยังไฟล์ ทำให้คุณได้พฤติกรรมแบบ stateful โดยไม่ต้องทำอะไร ซึ่ง Prism จะไม่ให้คุณ คุณยังได้การกรอง (filtering), การจัดเรียง (sorting) และการแบ่งหน้า (pagination) ผ่านพารามิเตอร์ของคิวรีอีกด้วย ติดตั้งแบบ global ด้วย npm install -g json-server หากคุณต้องการให้มันอยู่ใน PATH ของคุณตลอดเวลา
นั่นคือแนวทางโอเพนซอร์ส แต่ละเครื่องมือเป็นไบนารีเดี่ยว รันจากไฟล์เดียว และไม่ต้องการสิ่งอื่นใด ข้อเสียคือแต่ละตัวเป็นเหมือนเกาะที่แยกจากกัน mock จะอยู่แยกจากดีไซน์จริง การทดสอบ และเอกสารของคุณ และคุณต้องดูแลไฟล์และกระบวนการที่รันอยู่ให้สอดคล้องกันด้วยตัวคุณเอง หากคุณต้องการการจับคู่คำขอที่แม่นยำ (exact request matching) หรือการเล่นซ้ำ (replay) MockServer และ WireMock จะมีความสามารถที่ลึกซึ้งกว่า แต่ต้องแลกมาด้วยการใช้ Java runtime
แนวทาง Apidog CLI: นำเข้าสเปก สคริปต์ความคาดหวัง
Apidog ใช้การ mock ที่แตกต่างออกไป และการทำความเข้าใจสิ่งนี้อย่างถูกต้องจะช่วยให้คุณไม่สับสน CLI ของ apidog ไม่ได้เริ่มเซิร์ฟเวอร์ mock ในเครื่องจากไฟล์ ไม่มีคำสั่ง apidog mock ./openapi.yaml แต่ Apidog จะโฮสต์ mock ให้คุณ และ CLI คือวิธีที่คุณจะป้อนสเปกและสคริปต์การตอบกลับที่กำหนดเองเข้าไป
ข้อสังเกตที่ตรงไปตรงมาประการแรก Apidog ไม่ใช่โอเพนซอร์ส; เป็นผลิตภัณฑ์เชิงพาณิชย์ที่มีเวอร์ชันฟรี สิ่งที่คุณได้รับจากเวอร์ชันฟรีพร้อมกับ CLI คือโปรเจกต์แบบรวม (integrated project) ทำให้ mock, การออกแบบ และการทดสอบ ใช้แหล่งความจริงเดียวกัน แทนที่จะเป็นสามไฟล์แยกกันและสามกระบวนการที่แยกกัน หากคุณต้องการเพียง mock ชั่วคราวจากไฟล์เดียว เครื่องมือที่เบากว่าอาจจะดีกว่า หาก mock ของคุณควรสอดคล้องกับ API จริงของคุณเมื่อมีการเปลี่ยนแปลง โปรดอ่านต่อไป
ติดตั้งและยืนยันตัวตนก่อน ( คู่มือการติดตั้ง Apidog CLI ครอบคลุมการตั้งค่าโทเค็น):
npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
นำเข้าสเปกเพื่อรับ smart mocks ที่โฮสต์
ขั้นตอนแรกคือการนำ API ของคุณเข้าสู่โปรเจกต์ นำเข้าไฟล์ OpenAPI และ Apidog จะสร้าง URL mock สำหรับทุกเอนด์พอยต์โดยอัตโนมัติ
apidog import --project <PROJECT_ID> --format openapi --file ./openapi.json
นี่คือจุดที่ Apidog แตกต่างจาก Prism และ json-server คุณไม่ต้องรันเซิร์ฟเวอร์; การนำเข้าจะให้ smart mock ที่โฮสต์ไว้สำหรับแต่ละการทำงาน Smart mock จะอ่านประเภทฟิลด์และชื่อของ schema ของคุณ ดังนั้นฟิลด์ email จะคืนค่าอีเมลที่ดูสมเหตุสมผล และ createdAt จะคืนค่า timestamp ที่ดูเหมือนจริง ไม่ใช่สตริงสุ่ม apidog import ยังรองรับรูปแบบ Swagger 2.0, Postman และ Apidog ดังนั้นคำจำกัดความที่มีอยู่จะกลายเป็น live mocks ได้ด้วยคำสั่งเดียว
สคริปต์การตอบกลับที่กำหนดเองด้วย apidog mock
mock ที่สร้างขึ้นอัตโนมัติครอบคลุมกรณีทั่วไป เมื่อคุณต้องการการตอบกลับเฉพาะสำหรับคำขอเฉพาะ เช่น 200 สำหรับ user ID หนึ่งและ 404 สำหรับอีก user ID หนึ่ง คุณจะเพิ่ม mock expectation นี่คือสิ่งที่กลุ่มคำสั่ง apidog mock จัดการ และเป็นการดำเนินการแบบ CRUD กับความคาดหวังเหล่านั้น ไม่ใช่เซิร์ฟเวอร์ที่คุณเริ่มต้น
apidog mock --help
apidog mock list --project <PROJECT_ID>
apidog mock list --project <PROJECT_ID> --http-api-id <ENDPOINT_ID>
การลิสต์จะคืนค่าเป็น JSON ที่มีโครงสร้าง ดังนั้นคุณสามารถส่งผ่านไปยัง jq เพื่อค้นหา ID ของความคาดหวังและป้อนให้คำสั่งถัดไป หากต้องการอ่าน เปลี่ยนแปลง หรือลบ:
apidog mock get --project <PROJECT_ID>
apidog mock update --project <PROJECT_ID> --file ./mock.json
apidog mock delete --project <PROJECT_ID>
คำสั่งย่อย create และ update จะรับค่า --file ที่อธิบายความคาดหวัง ตรวจสอบให้แน่ใจว่ารูปแบบถูกต้องก่อนที่คุณจะเขียน ซึ่งจะกล่าวถึงต่อไป
ตรวจสอบความถูกต้องของไฟล์ความคาดหวังก่อนที่คุณจะเขียน
อย่าเดา JSON ด้วยมือเปล่า CLI มี schema สำหรับทุกการเขียน ดังนั้นคุณควรดึงรูปแบบ กรอกข้อมูล และตรวจสอบความถูกต้องก่อนการเขียนจริง ความคาดหวังที่ผิดรูปแบบจะล้มเหลวทันทีแทนที่จะผ่านไปอย่างเงียบๆ
apidog cli-schema get mock-create
apidog cli-schema validate mock-create --file ./mock.json
apidog mock create --project <PROJECT_ID> --file ./mock.json
ดึง schema, เขียนไฟล์ mock.json ของคุณให้ตรงตาม, ตรวจสอบความถูกต้อง, แล้วจึงสร้าง หากการตรวจสอบความถูกต้องคืนค่า exit code ที่ไม่ใช่ศูนย์ ไปป์ไลน์จะหยุดทำงานก่อนที่ไฟล์ที่ไม่ดีจะไปถึงโปรเจกต์ของคุณ รันสามขั้นตอนเดียวกันนี้สำหรับการอัปเดตโดยใช้คีย์ schema mock-update ทุกคำสั่งจะคืนค่าเป็น JSON พร้อมบล็อก agentHints.nextSteps ที่จะบอกคุณ หรือ agent ว่าจะรันอะไรต่อไป ซึ่งเป็นสิ่งที่ทำให้กระบวนการนี้สามารถใช้งานได้โดยเครื่องมือ AI coding และไม่ใช่แค่มนุษย์ คู่มือ Apidog CLI ฉบับสมบูรณ์ จะอธิบายกลุ่มคำสั่งที่เหลือ
การเชื่อมต่อเข้ากับ CI
ทั้งสองแนวทางเหมาะสมกับไปป์ไลน์เพราะทุกคำสั่งมี exit code และข้อความเอาต์พุต mock ที่ทำงานบนเซิร์ฟเวอร์และการทดสอบการรวมระบบ (integration test) ในงานเดียวกันอาจมีลักษณะดังนี้:
# start Prism in the background, then run tests against it
npx @stoplight/prism-cli mock ./openapi.yaml &
PRISM_PID=$!
npm test
kill $PRISM_PID
กระบวนการของ Apidog มีรูปร่างที่แตกต่างกัน: ไม่มีกระบวนการในเครื่องที่จะเริ่มต้นและหยุด เพราะ mock ถูกโฮสต์ไว้ คุณตรวจสอบและใช้ความคาดหวังเป็นขั้นตอนการตั้งค่า และการทดสอบของคุณจะเรียกใช้ URL mock ที่โฮสต์ไว้โดยตรง
# ensure the expectation is well-formed, then apply it
apidog cli-schema validate mock-create --file ./mock.json
apidog mock create --project <PROJECT_ID> --file ./mock.json
ไม่ว่าด้วยวิธีใด ไม่มีใครต้องคลิกปุ่ม นั่นคือเหตุผลทั้งหมดของการ mock จาก CLI: ทีมที่เน้นสเปกเป็นอันดับแรก งาน CI และ AI agent ล้วนสามารถตั้งค่า API ปลอมเดียวกันได้จากคำสั่งชุดเดียวกัน
ปัญหาที่พบบ่อย
คาดหวังว่า apidog mock จะเริ่มเซิร์ฟเวอร์ มันจะไม่เป็นเช่นนั้น ไม่มีคำสั่ง apidog mock start, apidog mock serve, หรือ apidog mock ./file.yaml คุณใช้ apidog import เพื่อนำเข้าสเปกเพื่อรับ hosted mocks และ apidog mock จะจัดการความคาดหวังที่กำหนดเองเพิ่มเติมจากนั้น หากคุณต้องการกระบวนการในเครื่องที่คุณเปิดใช้จากไฟล์ นั่นคือ Prism, Mockoon CLI, หรือ json-server
การข้ามขั้นตอน schema ในการเขียน คำสั่ง apidog mock create และ update จะรับค่า --file และหากรูปแบบไม่ถูกต้องก็จะล้มเหลวหรือเขียนบางสิ่งที่คุณไม่ได้ตั้งใจ ควรจะรัน cli-schema get และ cli-schema validate ก่อนเสมอ มันเป็นสองคำสั่งเพิ่มเติมที่จะช่วยคุณประหยัดเวลาในการดีบัก
Prism ดูว่างเปล่าเพราะสเปกของคุณไม่สมบูรณ์ mock ของ Prism จะดีได้เท่ากับตัวอย่างของคุณเท่านั้น หากการตอบกลับไม่มี example และ schema ที่คลุมเครือ คุณก็จะได้ข้อมูลที่คลุมเครือ เพิ่มตัวอย่างลงในสเปกแล้ว mock จะมีความชัดเจนมากขึ้น
ความคาดหวังแบบ stateful จากเครื่องมือ stateless mock แบบ contract ของ Prism และ Apidog ไม่เก็บข้อมูลการเขียน หากคุณต้องการ POST แล้ว GET เพื่อคืนค่าเรคคอร์ดใหม่ ให้ใช้ json-server หรือ Apidog expectation ที่คืนค่าในรูปแบบที่คุณต้องการ
สรุป
การ mock จาก CLI เปลี่ยนงานที่ต้องคลิกมากมายให้กลายเป็นคำสั่งที่คุณสามารถสคริปต์ ตรวจสอบ และส่งต่อให้ CI หรือ agent ได้ แนวทางโอเพนซอร์สให้เซิร์ฟเวอร์ไบนารีเดี่ยวที่คุณรันจากไฟล์: Prism สำหรับ OpenAPI spec, Mockoon CLI สำหรับไฟล์ข้อมูลแบบ headless, json-server สำหรับ REST API ทันทีจาก JSON แนวทางของ Apidog ทำงานในทางตรงกันข้าม; คุณนำเข้าสเปกเพียงครั้งเดียวเพื่อรับ hosted smart mocks จากนั้นสคริปต์การตอบกลับที่กำหนดเองด้วย apidog mock และการตรวจสอบความถูกต้องของ cli-schema
เลือกตามสิ่งที่คุณมีอยู่แล้วและที่ที่ mock จำเป็นต้องอยู่ หากคุณต้องการเซิร์ฟเวอร์ชั่วคราวจากไฟล์เดียว เครื่องมือโอเพนซอร์สก็เหมาะสมที่สุด หากคุณต้องการให้ mock สอดคล้องกับการออกแบบและการทดสอบของคุณในโปรเจกต์เดียว ดาวน์โหลด Apidog ติดตั้ง CLI และตั้งค่า mocks ของคุณโดยไม่ต้องใช้เมาส์เลย
