DEV Community

Cover image for أدوات CLI مجانية مفتوحة المصدر لمحاكاة الـ API
Yusuf Khalidd
Yusuf Khalidd

Posted on • Originally published at apidog.com

أدوات CLI مجانية مفتوحة المصدر لمحاكاة الـ API

عند محاكاة واجهة برمجة تطبيقات (API) من سطر الأوامر، لا تقل الرخصة أهمية عن قائمة الميزات. الخادم الذي يمكنك قراءة مصدره، واستضافته ذاتيًا، وتشغيله في CI دون احتساب عدد المستخدمين يختلف جذريًا عن محاكي SaaS مستضاف خلف تسجيل دخول. يركز هذا الدليل على أدوات مفتوحة المصدر يمكنك استنساخها وفحصها وتشغيلها مجانًا.

جرّب Apidog اليوم

كل أداة في هذه القائمة مصدرها متاح بموجب ترخيص متساهل، إما MIT أو Apache-2.0، ولديها مستودع GitHub عام، ويمكن تشغيلها ذاتيًا دون حساب. إذا كانت أولويتك هي أصغر ملف تنفيذي وأسرع بدء تشغيل، راجع أيضًا خيارات خادم المحاكاة خفيف الوزن. أما هنا، فالمعيار هو المصدر المفتوح والاستضافة الذاتية، حتى لو كانت الأداة منصة أثقل تعتمد على الحاويات.

ستجد لكل أداة: الترخيص، وأمر تشغيل سريع، وحالة الاستخدام المناسبة، والقيود العملية. ولتغطية خيارات أوسع تشمل الأدوات التجارية، راجع أفضل أدوات محاكاة API ونظرة عامة على أدوات محاكاة REST API.

ملاحظة: Apidog ليس مفتوح المصدر؛ إنه منتج freemium بخيارات مدفوعة. لذلك يظهر لاحقًا كبديل متكامل فقط، وليس ضمن الأدوات مفتوحة المصدر.

ما الذي يجعل أداة محاكاة CLI مفتوحة المصدر؟

استخدم هذه المعايير الثلاثة قبل اعتماد أي أداة في مشروعك:

  1. رخصة متساهلة: يجب أن يكون المصدر عامًا بموجب MIT أو Apache-2.0. يتيح لك ذلك قراءة الكود، وعمل fork، وتشغيله ضمن منتجك دون رسوم ترخيص أو قيود مستخدمين.
  2. استضافة ذاتية: يجب أن تتمكن من تشغيلها محليًا، أو داخل حاوية Docker، أو على خادمك، بما في ذلك بيئات CI المعزولة عن الإنترنت.
  3. صيانة علنية: ابحث عن مستودع GitHub نشط، وإصدارات موسومة، ومشكلات عامة، والتزامات حديثة.

السرعة الخام وحجم التثبيت ليسا معيار القائمة هنا. إذا كان ذلك ما تبحث عنه، فراجع دليل الأدوات خفيفة الوزن.

Prism (Stoplight)

يحوّل Prism ملف OpenAPI أو Postman إلى خادم محاكاة حي. استخدمه عندما تكون المواصفة هي مصدر الحقيقة وتريد التحقق من توافق الطلبات معها.

تشغيل سريع

npm install -g @stoplight/prism-cli

prism mock https://raw.githubusercontent.com/stoplightio/prism/master/examples/petstore.oas2.yaml
Enter fullscreen mode Exit fullscreen mode

سيبدأ الخادم على:

http://127.0.0.1:4010
Enter fullscreen mode Exit fullscreen mode

اختبره مباشرة:

curl http://127.0.0.1:4010/pets
Enter fullscreen mode Exit fullscreen mode

يعيد Prism أمثلة الاستجابات المعرفة في ملف OpenAPI. كما يمكنه التحقق من أن الطلبات تتوافق مع المخطط، ما يجعله مناسبًا لاكتشاف الانحراف بين العقد والتنفيذ.

الأفضل لـ:

  • محاكاة APIs الموجهة بمواصفات OpenAPI.
  • التحقق من الطلبات والاستجابات مقابل العقد.
  • تشغيل وكيل تحقق أمام API حقيقي.

القيود:

  • جودة المحاكاة تعتمد على جودة الأمثلة والمخططات في المواصفة.
  • لا يوفر سلوكًا حاليًا مدمجًا مثل “أنشئ موردًا ثم استرده لاحقًا”.
  • يحتاج إلى بيئة Node.js.

Mockoon CLI

يوفر Mockoon محرك المحاكاة نفسه الموجود في التطبيق المكتبي، لكن عبر سطر الأوامر وبدون واجهة رسومية. يمكنك تشغيل بيئة Mockoon محفوظة أو استخدام ملف OpenAPI.

تشغيل بيئة محفوظة

npm install -g @mockoon/cli

mockoon-cli start --data ./environment.json --port 3000
Enter fullscreen mode Exit fullscreen mode

التشغيل من OpenAPI

mockoon-cli start --data ./openapi.yaml --port 3000
Enter fullscreen mode Exit fullscreen mode

أضف إعادة التحميل والسجلات عند الحاجة:

mockoon-cli start \
  --data ./environment.json \
  --port 3000 \
  --watch \
  --log-transaction
Enter fullscreen mode Exit fullscreen mode

الأفضل لـ:

  • استجابات مبنية على قواعد وشروط دون كتابة كود.
  • قوالب الاستجابة والبيانات الديناميكية.
  • تشغيل محاكاة صممتها بصريًا في تطبيق Mockoon داخل CI.

القيود:

  • أسهل طريقة لتأليف البيئات هي التطبيق المكتبي.
  • تعديل ملفات البيئة JSON يدويًا قد يصبح معقدًا.
  • قوالب البيانات الديناميكية تحتاج إلى تعلم صياغتها الخاصة.

json-server

json-server هو أسرع خيار لإنشاء REST API مزيفة مع عمليات CRUD حقيقية ومستمرّة. أعطه ملف JSON، وسيولّد المسارات تلقائيًا.

أنشئ قاعدة بيانات بسيطة

أنشئ ملف db.json:

{
  "posts": [
    {
      "id": 1,
      "title": "أول منشور",
      "published": true
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

شغّل الخادم:

npx json-server db.json
Enter fullscreen mode Exit fullscreen mode

اختبر مسار CRUD:

curl http://localhost:3000/posts

curl -X POST http://localhost:3000/posts \
  -H "Content-Type: application/json" \
  -d '{"title":"منشور جديد","published":false}'
Enter fullscreen mode Exit fullscreen mode

ستحصل فورًا على:

GET    /posts
GET    /posts/1
POST   /posts
PUT    /posts/1
PATCH  /posts/1
DELETE /posts/1
Enter fullscreen mode Exit fullscreen mode

كما يدعم التصفية والفرز والترقيم عبر معاملات الاستعلام. عند إرسال POST، يكتب البيانات في الملف، لذا يمكنك قراءة المورد نفسه لاحقًا.

الأفضل لـ:

  • تطوير الواجهة الأمامية قبل اكتمال الواجهة الخلفية.
  • REST CRUD سريع مع حالة مستمرة.
  • نماذج أولية لا تحتاج إلى إعداد.

القيود:

  • يفرض شكل REST خاصًا به، لذا قد لا يطابق API مخصصة بالكامل.
  • لا يستورد OpenAPI؛ ملف JSON هو العقد.
  • ليس مخصصًا لاختبارات الضغط أو محاكاة سلوك الإنتاج بدقة.

WireMock

WireMock أداة قوية لمحاكاة HTTP واختبار التكامل. يدعم مطابقة الطلبات، وقوالب الاستجابات، والسيناريوهات الحالية، والتأخيرات، وحقن الأخطاء، والتسجيل وإعادة التشغيل.

تشغيل باستخدام Docker

docker run -it --rm -p 8080:8080 wiremock/wiremock:latest
Enter fullscreen mode Exit fullscreen mode

سجّل محاكاة عبر واجهة الإدارة:

curl -X POST http://localhost:8080/__admin/mappings \
  -H "Content-Type: application/json" \
  -d '{
    "request": {
      "method": "GET",
      "url": "/hello"
    },
    "response": {
      "status": 200,
      "body": "world"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

اختبر الاستجابة:

curl http://localhost:8080/hello
Enter fullscreen mode Exit fullscreen mode

الناتج:

world
Enter fullscreen mode Exit fullscreen mode

يمكنك أيضًا وضع ملفات المحاكاة في دليل mappings/ وتركيبه داخل الحاوية.

الأفضل لـ:

  • سيناريوهات اختبار معقدة وحالية.
  • محاكاة التأخير، والأخطاء، وعدم استقرار الطرف الثالث.
  • تسجيل API حقيقي ثم إعادة تشغيل التفاعلات لاحقًا.

القيود:

  • يعتمد على JVM أو Docker.
  • إعداداته واسعة وقد تكون مبالغًا فيها لمحاكاة بسيطة.
  • لا يقدم تجربة مباشرة من نوع “اقرأ OpenAPI وانطلق” مثل Prism.

MockServer

MockServer هو خادم محاكاة ووكيل HTTP(S) في الوقت نفسه، ومصمم لاختبار التكامل. يمكنه محاكاة APIs، وتسجيل حركة المرور الحية، والتحقق من الطلبات، وحقن الأخطاء.

تشغيل باستخدام Docker

docker run -d --rm -p 1080:1080 mockserver/mockserver
Enter fullscreen mode Exit fullscreen mode

أضف توقعًا:

curl -X PUT "http://localhost:1080/mockserver/expectation" \
  -H "Content-Type: application/json" \
  -d '{
    "httpRequest": {
      "path": "/order"
    },
    "httpResponse": {
      "body": "{\"status\":\"ok\"}"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

اختبره:

curl http://localhost:1080/order
Enter fullscreen mode Exit fullscreen mode

يعيد:

{"status":"ok"}
Enter fullscreen mode Exit fullscreen mode

يمكنك أيضًا استخدام عملاء MockServer للغات مثل Java وJavaScript وRuby لتعريف التوقعات مباشرة داخل اختباراتك.

الأفضل لـ:

  • الجمع بين المحاكاة والوكيل والتحقق من الطلبات.
  • التأكد من أن طلبًا معينًا أُرسل عددًا محددًا من المرات.
  • اختبارات تعتمد على JVM أو تحتاج HTTP/2 وgRPC وWebSocket.

راجع بدائل MockServer إذا كنت تقارن بينه وبين أدوات مشابهة.

القيود:

  • يعتمد على JVM.
  • ملفات JSON الخاصة بالتوقعات مطولة نسبيًا.
  • يتداخل كثيرًا مع WireMock؛ اختر حسب مكتبة العميل وتكاملها مع حزمة الاختبارات لديك.

Microcks

Microcks منصة لإدارة المحاكاة واختبارات العقود عبر بروتوكولات متعددة. يمكنه استيراد OpenAPI وAsyncAPI وgRPC وGraphQL ومجموعات Postman ومشاريع SoapUI.

تشغيل المنصة

docker run -d --name microcks \
  -p 8585:8080 \
  quay.io/microcks/microcks-uber:latest
Enter fullscreen mode Exit fullscreen mode

افتح:

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

ثم استورد مواصفة لإنشاء نقاط نهاية المحاكاة.

الاستيراد من CI

استخدم microcks-cli لإدارة مثيل Microcks قيد التشغيل:

microcks-cli import "petstore.yaml:true" \
  --microcksURL=http://localhost:8585/api \
  --keycloakClientId=... \
  --keycloakClientSecret=...
Enter fullscreen mode Exit fullscreen mode

الأفضل لـ:

  • فرق تحتاج كتالوجًا مشتركًا لمحاكاة APIs عديدة.
  • اختبار العقود إلى جانب المحاكاة.
  • واجهات API غير المتزامنة والمعتمدة على الأحداث، مثل Kafka وMQTT.

القيود:

  • منصة كاملة وليست ملفًا تنفيذيًا واحدًا.
  • microcks-cli عميل لإدارة خادم Microcks؛ لا يقدم المحاكاة بمفرده.
  • أثقل من Prism أو json-server عند الحاجة إلى محاكاة محلية سريعة.

ملاحظة جانبية: Apidog

Apidog ليس مفتوح المصدر، لذلك لا ينتمي إلى القائمة السابقة. لكنه قد يناسبك إذا كنت تريد تجنب تجميع أدوات منفصلة للتصميم والمحاكاة والاختبار والوثائق.

Apidog منصة freemium، ويتيح apidog mock ضمن apidog-cli إدارة توقعات المحاكاة من الطرفية ضمن المشروع نفسه. كما تولد المحاكاة الذكية قيم حقول واقعية من المخطط تلقائيًا، ما يقلل الحاجة إلى كتابة أمثلة يدوية.

المقايضة واضحة:

  • اختر الأدوات مفتوحة المصدر أعلاه إذا كانت الاستضافة الذاتية أو البيئة المعزولة شرطًا أساسيًا.
  • اختر Apidog إذا كان سير العمل المتكامل من التصميم إلى المحاكاة والاختبار أهم من توفر المصدر المفتوح.

كيف تختار

الأداة الأفضل لـ التثبيت الترخيص ملاحظات
Prism محاكاة موجهة بالمواصفات ووكيل تحقق npm i -g @stoplight/prism-cli Apache-2.0 يستقبل OpenAPI/Postman؛ عديم الحالة
Mockoon CLI استجابات قائمة على القواعد بدون كود npm i -g @mockoon/cli MIT صمم في التطبيق ثم شغّل من CLI
json-server REST CRUD حالية للواجهة الأمامية npx json-server db.json MIT تكوين صفري واستمرارية في ملف JSON
WireMock سيناريوهات اختبار وأخطاء معقدة docker run wiremock/wiremock Apache-2.0 JVM؛ تسجيل وإعادة تشغيل؛ حالي
MockServer محاكاة ووكيل وتحقق docker run mockserver/mockserver Apache-2.0 JVM؛ HTTP/2 وgRPC وWebSocket
Microcks كتالوج متعدد APIs وبروتوكولات 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 النطاق إلى محاكاة واختبار عقود عبر بروتوكولات متعددة.

إذا كنت تفضل إدارة المحاكاة بجانب تصميم API والاختبارات والوثائق دون ربط أدوات منفصلة، نزّل Apidog وجرب apidog mock ضمن الطبقة المجانية. ليس مفتوح المصدر، لكنه يوفر مكانًا واحدًا لتشغيل دورة العمل من سطر الأوامر إلى CI.

Top comments (0)