عند محاكاة واجهة برمجة تطبيقات (API) من سطر الأوامر، لا تقل الرخصة أهمية عن قائمة الميزات. الخادم الذي يمكنك قراءة مصدره، واستضافته ذاتيًا، وتشغيله في CI دون احتساب عدد المستخدمين يختلف جذريًا عن محاكي SaaS مستضاف خلف تسجيل دخول. يركز هذا الدليل على أدوات مفتوحة المصدر يمكنك استنساخها وفحصها وتشغيلها مجانًا.
كل أداة في هذه القائمة مصدرها متاح بموجب ترخيص متساهل، إما MIT أو Apache-2.0، ولديها مستودع GitHub عام، ويمكن تشغيلها ذاتيًا دون حساب. إذا كانت أولويتك هي أصغر ملف تنفيذي وأسرع بدء تشغيل، راجع أيضًا خيارات خادم المحاكاة خفيف الوزن. أما هنا، فالمعيار هو المصدر المفتوح والاستضافة الذاتية، حتى لو كانت الأداة منصة أثقل تعتمد على الحاويات.
ستجد لكل أداة: الترخيص، وأمر تشغيل سريع، وحالة الاستخدام المناسبة، والقيود العملية. ولتغطية خيارات أوسع تشمل الأدوات التجارية، راجع أفضل أدوات محاكاة API ونظرة عامة على أدوات محاكاة REST API.
ملاحظة: Apidog ليس مفتوح المصدر؛ إنه منتج freemium بخيارات مدفوعة. لذلك يظهر لاحقًا كبديل متكامل فقط، وليس ضمن الأدوات مفتوحة المصدر.
ما الذي يجعل أداة محاكاة CLI مفتوحة المصدر؟
استخدم هذه المعايير الثلاثة قبل اعتماد أي أداة في مشروعك:
- رخصة متساهلة: يجب أن يكون المصدر عامًا بموجب MIT أو Apache-2.0. يتيح لك ذلك قراءة الكود، وعمل fork، وتشغيله ضمن منتجك دون رسوم ترخيص أو قيود مستخدمين.
- استضافة ذاتية: يجب أن تتمكن من تشغيلها محليًا، أو داخل حاوية Docker، أو على خادمك، بما في ذلك بيئات CI المعزولة عن الإنترنت.
- صيانة علنية: ابحث عن مستودع GitHub نشط، وإصدارات موسومة، ومشكلات عامة، والتزامات حديثة.
السرعة الخام وحجم التثبيت ليسا معيار القائمة هنا. إذا كان ذلك ما تبحث عنه، فراجع دليل الأدوات خفيفة الوزن.
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
اختبره مباشرة:
curl http://127.0.0.1:4010/pets
يعيد Prism أمثلة الاستجابات المعرفة في ملف OpenAPI. كما يمكنه التحقق من أن الطلبات تتوافق مع المخطط، ما يجعله مناسبًا لاكتشاف الانحراف بين العقد والتنفيذ.
الأفضل لـ:
- محاكاة APIs الموجهة بمواصفات OpenAPI.
- التحقق من الطلبات والاستجابات مقابل العقد.
- تشغيل وكيل تحقق أمام API حقيقي.
القيود:
- جودة المحاكاة تعتمد على جودة الأمثلة والمخططات في المواصفة.
- لا يوفر سلوكًا حاليًا مدمجًا مثل “أنشئ موردًا ثم استرده لاحقًا”.
- يحتاج إلى بيئة Node.js.
Mockoon CLI
يوفر Mockoon محرك المحاكاة نفسه الموجود في التطبيق المكتبي، لكن عبر سطر الأوامر وبدون واجهة رسومية. يمكنك تشغيل بيئة Mockoon محفوظة أو استخدام ملف OpenAPI.
- الترخيص: MIT
- المستودع: mockoon/mockoon
تشغيل بيئة محفوظة
npm install -g @mockoon/cli
mockoon-cli start --data ./environment.json --port 3000
التشغيل من OpenAPI
mockoon-cli start --data ./openapi.yaml --port 3000
أضف إعادة التحميل والسجلات عند الحاجة:
mockoon-cli start \
--data ./environment.json \
--port 3000 \
--watch \
--log-transaction
الأفضل لـ:
- استجابات مبنية على قواعد وشروط دون كتابة كود.
- قوالب الاستجابة والبيانات الديناميكية.
- تشغيل محاكاة صممتها بصريًا في تطبيق Mockoon داخل CI.
القيود:
- أسهل طريقة لتأليف البيئات هي التطبيق المكتبي.
- تعديل ملفات البيئة JSON يدويًا قد يصبح معقدًا.
- قوالب البيانات الديناميكية تحتاج إلى تعلم صياغتها الخاصة.
json-server
json-server هو أسرع خيار لإنشاء REST API مزيفة مع عمليات CRUD حقيقية ومستمرّة. أعطه ملف JSON، وسيولّد المسارات تلقائيًا.
- الترخيص: MIT
- المستودع: typicode/json-server
أنشئ قاعدة بيانات بسيطة
أنشئ ملف db.json:
{
"posts": [
{
"id": 1,
"title": "أول منشور",
"published": true
}
]
}
شغّل الخادم:
npx json-server db.json
اختبر مسار CRUD:
curl http://localhost:3000/posts
curl -X POST http://localhost:3000/posts \
-H "Content-Type: application/json" \
-d '{"title":"منشور جديد","published":false}'
ستحصل فورًا على:
GET /posts
GET /posts/1
POST /posts
PUT /posts/1
PATCH /posts/1
DELETE /posts/1
كما يدعم التصفية والفرز والترقيم عبر معاملات الاستعلام. عند إرسال POST، يكتب البيانات في الملف، لذا يمكنك قراءة المورد نفسه لاحقًا.
الأفضل لـ:
- تطوير الواجهة الأمامية قبل اكتمال الواجهة الخلفية.
- REST CRUD سريع مع حالة مستمرة.
- نماذج أولية لا تحتاج إلى إعداد.
القيود:
- يفرض شكل REST خاصًا به، لذا قد لا يطابق API مخصصة بالكامل.
- لا يستورد OpenAPI؛ ملف JSON هو العقد.
- ليس مخصصًا لاختبارات الضغط أو محاكاة سلوك الإنتاج بدقة.
WireMock
WireMock أداة قوية لمحاكاة HTTP واختبار التكامل. يدعم مطابقة الطلبات، وقوالب الاستجابات، والسيناريوهات الحالية، والتأخيرات، وحقن الأخطاء، والتسجيل وإعادة التشغيل.
- الترخيص: Apache-2.0
- المستودع: wiremock/wiremock
تشغيل باستخدام Docker
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"
}
}'
اختبر الاستجابة:
curl http://localhost:8080/hello
الناتج:
world
يمكنك أيضًا وضع ملفات المحاكاة في دليل mappings/ وتركيبه داخل الحاوية.
الأفضل لـ:
- سيناريوهات اختبار معقدة وحالية.
- محاكاة التأخير، والأخطاء، وعدم استقرار الطرف الثالث.
- تسجيل API حقيقي ثم إعادة تشغيل التفاعلات لاحقًا.
القيود:
- يعتمد على JVM أو Docker.
- إعداداته واسعة وقد تكون مبالغًا فيها لمحاكاة بسيطة.
- لا يقدم تجربة مباشرة من نوع “اقرأ OpenAPI وانطلق” مثل Prism.
MockServer
MockServer هو خادم محاكاة ووكيل HTTP(S) في الوقت نفسه، ومصمم لاختبار التكامل. يمكنه محاكاة APIs، وتسجيل حركة المرور الحية، والتحقق من الطلبات، وحقن الأخطاء.
- الترخيص: Apache-2.0
- المستودع: mock-server/mockserver
تشغيل باستخدام Docker
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\"}"
}
}'
اختبره:
curl http://localhost:1080/order
يعيد:
{"status":"ok"}
يمكنك أيضًا استخدام عملاء MockServer للغات مثل Java وJavaScript وRuby لتعريف التوقعات مباشرة داخل اختباراتك.
الأفضل لـ:
- الجمع بين المحاكاة والوكيل والتحقق من الطلبات.
- التأكد من أن طلبًا معينًا أُرسل عددًا محددًا من المرات.
- اختبارات تعتمد على JVM أو تحتاج HTTP/2 وgRPC وWebSocket.
راجع بدائل MockServer إذا كنت تقارن بينه وبين أدوات مشابهة.
القيود:
- يعتمد على JVM.
- ملفات JSON الخاصة بالتوقعات مطولة نسبيًا.
- يتداخل كثيرًا مع WireMock؛ اختر حسب مكتبة العميل وتكاملها مع حزمة الاختبارات لديك.
Microcks
Microcks منصة لإدارة المحاكاة واختبارات العقود عبر بروتوكولات متعددة. يمكنه استيراد OpenAPI وAsyncAPI وgRPC وGraphQL ومجموعات Postman ومشاريع SoapUI.
- الترخيص: Apache-2.0
- المستودع: microcks/microcks
تشغيل المنصة
docker run -d --name microcks \
-p 8585:8080 \
quay.io/microcks/microcks-uber:latest
افتح:
http://localhost:8585
ثم استورد مواصفة لإنشاء نقاط نهاية المحاكاة.
الاستيراد من CI
استخدم microcks-cli لإدارة مثيل Microcks قيد التشغيل:
microcks-cli import "petstore.yaml:true" \
--microcksURL=http://localhost:8585/api \
--keycloakClientId=... \
--keycloakClientSecret=...
الأفضل لـ:
- فرق تحتاج كتالوجًا مشتركًا لمحاكاة 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)