عندما تحاكي واجهة برمجة تطبيقات (API) من سطر الأوامر، تكون الرخصة مهمة بقدر قائمة الميزات. خادم المحاكاة الذي يمكنك قراءة مصدره، واستضافته ذاتيًا، وتشغيله في CI بدون احتساب عدد المستخدمين، يختلف تمامًا عن محاكاة SaaS مستضافة خلف تسجيل دخول. يغطي هذا الدليل الجانب مفتوح المصدر: الأدوات التي يمكنك استنساخها وفحصها وتشغيلها مجانًا.
كل أداة هنا متاحة المصدر بموجب ترخيص متساهل (MIT أو Apache-2.0)، وموجودة على مستودع GitHub عام، ويمكن استضافتها ذاتيًا بدون حساب. هذا هو المعيار. إذا كنت تريد الخيارات الأصغر ذات الملف التنفيذي الواحد والمصنفة حسب سرعة التشغيل وحجم التثبيت، فاقرأ بدلاً من ذلك خيارات خادم المحاكاة خفيف الوزن المصاحبة؛ هذه القائمة تدور حول المصدر والاستضافة الذاتية، لذا يمكن لمنصة أثقل قابلة للاستضافة الذاتية أن تحتل مكانًا.
لكل أداة تحصل على الرخصة، أمر التثبيت والتشغيل الوحيد الذي يثبت أنها تعمل، ما هي الأفضل فيه، وأين تقصر. إذا كنت تريد المجال الأوسع بما في ذلك الخيارات التجارية، فإن أفضل أدوات محاكاة API و نظرة عامة على أدوات محاكاة REST API تغطي نطاقًا أوسع.
ملاحظة سريعة وصادقة قبل القائمة. Apidog ليس مفتوح المصدر؛ إنه منصة تجارية مجانية مع خيارات مدفوعة (freemium). يظهر مرة واحدة في النهاية كبديل متكامل لهذه الأدوات، ومصنف بوضوح، وليس كإدخال مفتوح المصدر. كل شيء في الأقسام المرقمة أدناه هو مفتوح المصدر حقًا.
ما الذي يجعل أداة محاكاة سطر الأوامر (CLI) مفتوحة المصدر
ثلاثة أمور تحدد ما إذا كانت الأداة تنتمي إلى هذه القائمة.
الرخصة. يجب أن يكون المصدر عامًا بموجب ترخيص متساهل. كل خيار هنا هو MIT أو Apache-2.0، لذا يمكنك قراءته، ونسخه (fork)، وشحنه داخل منتجك الخاص دون رسوم ترخيص أو احتساب عدد المستخدمين.
قابلة للاستضافة الذاتية. يمكنك تشغيلها على جهاز الكمبيوتر المحمول الخاص بك، أو في حاوية (container)، أو على خادمك الخاص. لا توجد لوحة تحكم مستضافة، ولا اتصال بالخارج، ولا بوابات حسابات. هذا ما يجعل المحاكاة قابلة للاستخدام في بيئة CI معزولة (air-gapped).
صيانة مفتوحة. مستودع GitHub عام بتاريخ التزامات حقيقي، ومشاكل، وإصدارات. النجوم (Stars) هي إشارة تقريبية؛ الالتزامات الحديثة والإصدارات الموسومة هي الأفضل.
لاحظ ما ليس موجودًا في القائمة: السرعة الخام أو حجم التثبيت. هذه هي الزاوية خفيفة الوزن. هنا، منصة كبيرة تعتمد على الحاويات وقابلة للاستضافة الذاتية هي خيار مقبول طالما أن المصدر مفتوح والترخيص مجاني.
بريزم (Prism) (Stoplight)
يحول بريزم (Prism) ملف OpenAPI أو Postman إلى خادم محاكاة حي. وجّهه إلى مواصفة وسيقدم استجابات أمثلة، ويتحقق من الطلبات الواردة مقابل المخطط، ويمكن أن يعمل كوكيل تحقق أمام واجهة برمجة تطبيقات حقيقية. الترخيص: Apache-2.0. المستودع: stoplightio/prism.
npm install -g @stoplight/prism-cli
prism mock https://raw.githubusercontent.com/stoplightio/prism/master/examples/petstore.oas2.yaml
يشغل هذا الأمر محاكاة على http://127.0.0.1:4010 مدفوعة بالكامل بالمواصفة. GET /pets يعيد المثال من مستند OpenAPI الخاص بك؛ أرسل حمولة غير صحيحة وسيخبرك بريزم (Prism) بأي جزء من المخطط قمت بانتهاكه.
الأفضل في: محاكاة العقود الموجهة بالمواصفات حيث يكون ملف OpenAPI هو مصدر الحقيقة. وضع وكيل التحقق هو الميزة البارزة؛ فهو يكتشف الانحراف بين مواصفاتك وواجهة برمجة التطبيقات الحقيقية الخاصة بك.
القيود: تأتي الاستجابات من أمثلتك ومخططك، لذا فإن المحاكاة غنية بقدر غنى المواصفات فقط. لا يوجد سلوك حالي مدمج (لا يوجد "إنشاء ثم قراءته مرة أخرى"). إنها أداة Node، لذا تحتاج إلى بيئة تشغيل Node.
Mockoon CLI
يشتهر Mockoon بتطبيقه المكتبي، لكن سطر الأوامر (CLI) يأتي بنفس المحرك بدون واجهة رسومية، وهو مصمم لبيئات التكامل المستمر (CI) والاستضافة الذاتية. يمكنك تصميم بيئة (في التطبيق أو يدويًا) أو إعطائه ملف OpenAPI، وسيقوم بتقديم تلك المحاكاة. الترخيص: MIT. المستودع: mockoon/mockoon.
npm install -g @mockoon/cli
mockoon-cli start --data ./environment.json --port 3000
يمكنك أيضًا البدء مباشرة من ملف OpenAPI باستخدام --data ./openapi.yaml. أضف --watch لإعادة التحميل عند تغيير الملفات و --log-transaction لطباعة سجلات الطلبات/الاستجابات الكاملة.
الأفضل في: الاستجابات الغنية والقائمة على القواعد دون كتابة تعليمات برمجية. يدعم Mockoon قوالب الاستجابة، والقواعد الشرطية، ووضع الوكيل، بحيث يمكن لنقطة نهاية واحدة إرجاع نصوص مختلفة بناءً على الطلب. التصميم المرئي في التطبيق والتشغيل بدون واجهة رسومية عبر سطر الأوامر (CLI) هو تقسيم واضح.
القيود: أفضل مسار للتأليف هو تطبيق سطح المكتب، لذا فإن التعديل اليدوي لملف JSON الخاص بالبيئة أمر معقد. يحتوي بناء الجملة الخاص بقوالب البيانات الديناميكية على منحنى تعلم خاص به.
json-server
json-server هو أسرع طريقة لمحاكاة REST API. أعطه ملف JSON وسيولد مسارات CRUD كاملة (GET, POST, PUT, PATCH, DELETE) مع استمرارية حقيقية تعود إلى ذلك الملف. الترخيص: MIT. المستودع: typicode/json-server.
npx json-server db.json
مع ملف db.json الذي يحتوي على مصفوفة "posts" على المستوى الأعلى، تحصل على الفور على GET /posts، GET /posts/1، POST /posts، والباقي، بالإضافة إلى التصفية، والفرز، والترقيم عبر معلمات الاستعلام. انشر سجلًا جديدًا وسيكتب إلى الملف؛ اقرأه مرة أخرى وستجده هناك.
الأفضل في: تطوير الواجهة الأمامية قبل وجود الواجهة الخلفية. إنه حالي (stateful) وجاهز للاستخدام، وهو ما لا يتوفر في Prism ومعظم المحاكيات الموجهة بالمواصفات. تكوين صفري، و npx يعني أنك لا تحتاج حتى إلى تثبيته.
القيود: إنه ذو رأي حاسم بشأن شكل REST، لذا لن يتطابق مع واجهة برمجة تطبيقات مخصصة عشوائية. لا يوجد استيراد لـ OpenAPI؛ ملف JSON هو العقد. ليس مخصصًا لاختبار التحميل أو السلوك الشبيه بالإنتاج.
WireMock
WireMock هو الرائد في مجال محاكاة HTTP مفتوحة المصدر، مع ملايين التنزيلات شهريًا. يعمل كعملية مستقلة يتم تكوينها عبر واجهة برمجة تطبيقات JSON إدارية أو من ملفات JSON المؤقتة (stub files)، ويتعامل مع مطابقة الطلبات، وقوالب الاستجابات، والسيناريوهات الحالية، وحقن الأخطاء، والتسجيل وإعادة التشغيل. الترخيص: Apache-2.0. المستودع: wiremock/wiremock.
docker run -it --rm -p 8080:8080 wiremock/wiremock:latest
curl -X POST http://localhost:8080/__admin/mappings \
-H 'Content-Type: application/json' \
-d '{"request":{"method":"GET","url":"/hello"},"response":{"status":200,"body":"world"}}'
يبدأ السطر الأول WireMock؛ والثاني يسجل محاكاة (stub) عبر واجهة برمجة تطبيقات الإدارة الخاصة به. الآن curl http://localhost:8080/hello يعيد world. يمكنك أيضًا إسقاط ملفات المحاكاة (stub files) في دليل mappings/ وتركيبها في الحاوية.
الأفضل في: سيناريوهات الاختبار المعقدة. السلوك الحالي، التأخيرات والأخطاء لمحاكاة طرف ثالث غير مستقر، ووكيل مع تسجيل لالتقاط واجهة برمجة تطبيقات حقيقية وإعادة تشغيلها لاحقًا. هذه هي الأداة عندما تحتاج محاكاتك إلى أن تتصرف مثل الشيء الحقيقي قيد الاختبار.
القيود: إنها أداة تعتمد على JVM، لذا فإن الحاوية أو بيئة تشغيل Java هي الثمن المطلوب. سطح التكوين كبير؛ المحاكيات البسيطة تبدو مبالغًا فيها. لا يوجد أمر واحد "اقرأ المواصفات وانطلق" بالطريقة التي لدى Prism.
MockServer
MockServer هو محاكي ووكيل HTTP(S) على منفذ واحد، يستهدف بشكل مباشر اختبار التكامل. يحاكي واجهات برمجة التطبيقات، ويمكنه توجيه وتسجيل حركة المرور الحية، ويسمح لك بحقن الأخطاء لاختبار كيفية تعامل عميلك معها. تضيف الإصدارات الحديثة دعم HTTP/2 و gRPC و WebSocket. الترخيص: Apache-2.0. المستودع: mock-server/mockserver.
docker run -d --rm -p 1080:1080 mockserver/mockserver
curl -X PUT 'http://localhost:1080/mockserver/expectation' \
-H 'Content-Type: application/json' \
-d '{"httpRequest":{"path":"/order"},"httpResponse":{"body":"{\"status\":\"ok\"}"}}'
يسجل PUT "توقعًا"؛ بعد ذلك، curl http://localhost:1080/order يعيد JSON الخاص بك. تتيح لك عملاء MockServer (Java، JavaScript، Ruby، وغيرها) تعيين نفس التوقعات من داخل كود الاختبار الخاص بك بدلاً من استخدام curl.
الأفضل في: المحاكاة والوكالة في نفس المكان، بالإضافة إلى حقن الأخطاء. إذا كنت بحاجة إلى التحقق من أن طلبًا معينًا قد تم تقديمه عددًا معينًا من المرات، فإن واجهة برمجة تطبيقات التحقق في MockServer مصممة لذلك. مناسب بشكل جيد للحزم التي تعتمد بشكل كبير على JVM. راجع مقالنا عن بدائل MockServer إذا لم يكن شكله مناسبًا تمامًا.
القيود: مثل WireMock، يعتمد على JVM وملف JSON الخاص بالتوقع مطوّل. التداخل مع WireMock حقيقي؛ اختر أحدهما بناءً على مكتبة العميل التي تناسب حزمة الاختبار الخاصة بك.
Microcks
Microcks هو الخيار كمنصة، وهو مشروع حاضن لمؤسسة Cloud Native Computing Foundation. يحول ملفات OpenAPI، AsyncAPI، gRPC، GraphQL، مجموعات Postman، ومشاريع SoapUI إلى محاكاة حية، ويعيد استخدام نفس العقود لتشغيل اختبارات المطابقة ضد تطبيقك الحقيقي. يغطي البروتوكولات المعتمدة على الأحداث وغير المتزامنة، وليس فقط HTTP. الترخيص: Apache-2.0. المستودع: microcks/microcks.
docker run -d --name microcks -p 8585:8080 quay.io/microcks/microcks-uber:latest
يشغل ذلك الصورة المتكاملة؛ افتح http://localhost:8585 واستورد مواصفة للحصول على نقاط نهاية المحاكاة. تتحكم أداة microcks-cli المصاحبة في تشغيل الخادم من بيئة CI:
microcks-cli import 'petstore.yaml:true' \
--microcksURL=http://localhost:8585/api \
--keycloakClientId=... --keycloakClientSecret=...
الأفضل في: الفرق التي تريد كتالوجًا واحدًا مُدارًا للمحاكاة عبر العديد من واجهات برمجة التطبيقات والبروتوكولات، مع اختبار العقود المدمج. المحاكاة غير المتزامنة/المعتمدة على الأحداث (Kafka، MQTT، وما شابه) نادرة في هذا المجال.
القيود: هذا خادم، وليس ملفًا تنفيذيًا واحدًا (binary). تحذير هام: تقوم microcks-cli بتشغيل الاختبارات واستيراد العناصر مقابل مثيل Microcks قيد التشغيل؛ ولا يقدم المحاكاة بمفرده. لذا فإن سطر الأوامر (CLI) هو عميل، وما زلت تشغل المنصة. بالنسبة لمحاكاة محلية لمرة واحدة، هذا أثقل من Prism أو json-server.
ملاحظة صادقة جانبية: Apidog
Apidog ليس مفتوح المصدر، لذا لا يحصل على مكان مرقم هنا. ولكن إذا لاحظت أن الأدوات المذكورة أعلاه تحل أجزاء مختلفة (محاكاة موجهة بالمواصفات، CRUD حالي، اختبار العقود) وتفضل عدم ربطها ببعضها البعض، فمن الجدير ذكرها. Apidog هي منصة freemium تتضمن طبقتها المجانية المحاكاة، و apidog mock في apidog-cli يتيح لك إدارة توقعات المحاكاة من الطرفية جنبًا إلى جنب مع التصميم والاختبار والوثائق في مشروع واحد. تولد المحاكاة الذكية قيم حقول واقعية من مخططك تلقائيًا، لذا لست بحاجة إلى كتابة نصوص أمثلة يدويًا.
المقايضة واضحة: تحصل على سير عمل متكامل وطبقة مجانية بدلاً من المصدر المفتوح والاستضافة الذاتية. إذا كانت الاستضافة الذاتية مفتوحة المصدر أو المعزولة (air-gapped) مطلبًا صارمًا، فإن إحدى الأدوات الست المذكورة أعلاه هي إجابتك. إذا كانت حلقة التصميم إلى المحاكاة المتكاملة تهمك أكثر، فإن Apidog هو البديل لربط أدوات متعددة معًا.
كيف تختار
| الأداة | الأفضل لـ | التثبيت | الترخيص | ملاحظات |
|---|---|---|---|---|
| Prism | محاكاة موجهة بالمواصفات + وكيل تحقق | npm i -g @stoplight/prism-cli |
Apache-2.0 | OpenAPI/Postman للداخل، محاكاة للخارج؛ عديم الحالة |
| Mockoon CLI | استجابات قائمة على القواعد، بدون كود | npm i -g @mockoon/cli |
MIT | صمم في التطبيق، شغل بدون واجهة رسومية |
| json-server | واجهة REST مزيفة حالية للواجهة الأمامية | npx json-server db.json |
MIT | عمليات CRUD كاملة مع استمرارية، تكوين صفري |
| WireMock | سيناريوهات اختبار معقدة، أخطاء | docker run wiremock/wiremock |
Apache-2.0 | JVM؛ تسجيل وإعادة تشغيل؛ حالي |
| MockServer | محاكاة + وكيل + تحقق | docker run mockserver/mockserver |
Apache-2.0 | JVM؛ HTTP/2, gRPC, WebSocket |
| Microcks | كتالوج مُدار للعديد من واجهات برمجة التطبيقات/البروتوكولات | docker run microcks-uber |
Apache-2.0 | منصة CNCF؛ سطر الأوامر (CLI) هو عميل، وليس خادمًا |
| Apidog (ليس مفتوح المصدر) | تصميم إلى محاكاة متكامل | npm i -g apidog-cli |
Freemium | طبقة مجانية؛ apidog mock في مشروع واحد |
اختر حسب الشكل، وليس الشعبية. لمحاكاة تقرأ ملف OpenAPI الخاص بك وتفرضه، ابدأ بـ Prism. لعمليات CRUD الحالية قبل ظهور الواجهة الخلفية، يتفوق json-server في السرعة. لسيناريوهات الاختبار الغنية بالأخطاء والتسجيل وإعادة التشغيل، WireMock أو MockServer؛ اختر حسب مكتبة العميل. للحصول على كتالوج مشترك ومتعدد البروتوكولات مع اختبار العقود، Microcks. لتحديد الشكل الذي يناسب كل موقف، يرسم دليل حالات استخدام محاكاة API خرائط الأدوات للسيناريوهات.
الختام
توفر أدوات محاكاة سطر الأوامر (CLI) مفتوحة المصدر خادم محاكاة يمكنك قراءته، واستضافته ذاتيًا، وتشغيله في CI مجانًا. يغطي Prism و json-server الحالات الشائعة بأمر واحد؛ يتعامل WireMock و MockServer مع سيناريوهات الاختبار الصعبة؛ بينما يقوم Microcks بتوسيع نطاقه إلى كتالوج مُدار عبر البروتوكولات. جميع الأدوات الست هي MIT أو Apache-2.0، وكلها قابلة للاستضافة الذاتية، وجميعها على GitHub العام.
إذا كنت تفضل إدارة المحاكاة جنبًا إلى جنب مع تصميم واجهة برمجة التطبيقات الخاصة بك، والاختبارات، والوثائق دون ربط أدوات منفصلة ببعضها البعض، قم بتنزيل Apidog وجرب apidog mock في الطبقة المجانية. إنه ليس مفتوح المصدر، ولكنه مكان واحد لتشغيل الحلقة الكاملة من سطر الأوامر إلى CI.
