تُنشئ أداة محاكاة واجهة برمجة التطبيقات غير الرسومية (Headless API Mock Tool) خادمًا وهميًا يعمل من مواصفات أو تكوين، ثم تشغّله من سطر الأوامر أو عبر عنوان URL مستضاف بدون واجهة رسومية. هذا مفيد عندما تحتاج إلى Backend ثابت داخل CI، أو Docker، أو اختبارات الواجهة الأمامية. في هذا الدليل ستتعلم متى تستخدم المحاكاة غير الرسومية، وكيف تشغّل أدوات مثل Prism، وWireMock، وMockoon CLI، وأين يناسبك Apidog. إذا كنت تريد فهم الأساس أولًا، ابدأ من شرح واجهة برمجة تطبيقات وهمية.
ماذا يعني "غير رسومي" في محاكاة API؟
خادم المحاكاة يستقبل طلبات HTTP ويرجع استجابات وهمية لكنها قريبة من الواقع، بحيث يستطيع فريق الواجهة الأمامية أو اختبارات التكامل العمل قبل اكتمال الـ Backend الحقيقي.
مصطلح "غير رسومي" يعني أن المحاكاة لا تحتاج إلى تطبيق Desktop أو نافذة مفتوحة. عادةً تشغّلها بهذا النمط:
mock-tool start --spec ./openapi.yaml --port 4010
ثم تستخدمها من التطبيق أو الاختبارات:
curl http://127.0.0.1:4010/users
هذا مهم في بيئات مثل:
- CI/CD حيث لا توجد واجهة رسومية.
- Docker Compose لتشغيل frontend + mock API معًا.
- سكربتات التطوير المحلية.
- Preview environments لكل Pull Request.
- اختبارات E2E التي تحتاج إلى Backend مستقر وقابل للتكرار.
واجهة GUI مفيدة لتصميم الاستجابات يدويًا، لكن عند التشغيل الآلي تحتاج إلى CLI، أو Docker image، أو Mock URL مستضاف.
اختر مصدر الحقيقة: مواصفات أم تكوين؟
قبل اختيار الأداة، حدد أين ستعيش بيانات المحاكاة.
1. محاكاة تعتمد على المواصفات
الأداة تقرأ ملف OpenAPI أو Postman Collection وتولّد الاستجابات بناءً عليه.
مثال:
prism mock openapi.yaml
المزايا:
- العقد API contract هو مصدر الحقيقة.
- تقليل الانحراف بين التوثيق والمحاكاة.
- مناسب للفرق التي تعمل بأسلوب API-first.
- تحديث المخطط ينعكس مباشرة على المحاكاة.
2. محاكاة تعتمد على التكوين
تكتب قواعد الاستجابة يدويًا في JSON أو عبر واجهة رسومية، ثم تشغّلها غير رسوميًا.
المزايا:
- مرونة أكبر للحالات المعقدة.
- مفيدة عند عدم وجود OpenAPI جاهز.
- مناسبة لتسجيل وإعادة تشغيل استجابات Backend حقيقي.
غالبًا ستحتاج إلى الاثنين: محاكاة مبنية على المخطط للمسار الطبيعي، وتجاوزات مخصصة للحالات الخاصة. راجع أيضًا دليل محاكاة واجهة برمجة التطبيقات.
الخيارات العملية للمحاكاة غير الرسومية
Prism من Stoplight
Prism مناسب إذا كان لديك ملف OpenAPI وتريد تشغيل Mock Server بسرعة من الطرفية.
npm install -g @stoplight/prism-cli
prism mock openapi.yaml
افتراضيًا يستمع Prism على:
http://127.0.0.1:4010
إذا كانت المواصفات تحتوي على examples، سيعيدها Prism كما هي. وإذا أردت بيانات ديناميكية بناءً على المخطط:
prism mock openapi.yaml -d
يمكنك أيضًا استخدام x-faker داخل OpenAPI لإنتاج بيانات أكثر واقعية.
مثال مبسط:
components:
schemas:
User:
type: object
properties:
id:
type: integer
email:
type: string
format: email
x-faker: internet.email
استخدم Prism عندما:
- يكون ملف OpenAPI هو مصدر الحقيقة.
- تريد أداة CLI خفيفة.
- لا تحتاج إلى منطق استجابة معقد أو stateful scenarios.
WireMock
WireMock خادم محاكاة HTTP ناضج مبني على Java. يمكنك تشغيله كملف JAR مستقل:
java -jar wiremock-standalone-3.x.x.jar --port 9099
الفكرة الأساسية في WireMock هي Stubbing: تكتب قاعدة تطابق الطلب وتحدد الاستجابة.
مثال ملف stub:
{
"request": {
"method": "GET",
"url": "/users/1"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"jsonBody": {
"id": 1,
"name": "Ahmed",
"email": "ahmed@example.com"
}
}
}
تشغيل WireMock مع مجلد mappings:
java -jar wiremock-standalone-3.x.x.jar \
--port 9099 \
--root-dir ./wiremock
استخدم WireMock عندما:
- تحتاج إلى مطابقة طلبات معقدة.
- تريد تسجيل وإعادة تشغيل Traffic من خدمة حقيقية.
- تعمل داخل بيئة JVM.
- تحتاج إلى سيناريوهات stateful أو قواعد دقيقة جدًا.
Mockoon CLI
Mockoon يبدأ كتطبيق سطح مكتب لتصميم بيئات Mock بصريًا، ثم يمكنك تشغيل نفس البيئة غير رسوميًا باستخدام CLI.
mockoon-cli start --data ./environment.json --port 3000
يمكن تشغيله أيضًا داخل Docker. النمط المعتاد:
docker run -d \
-p 3000:3000 \
-v ./environment.json:/data/environment.json \
mockoon/cli:latest \
--data /data/environment.json \
--port 3000
استخدم Mockoon CLI عندما:
- تريد تصميم الاستجابات بصريًا.
- تحتاج إلى نشر نفس البيئة في CI أو Docker.
- تفضل إدارة قواعد المحاكاة كتكوين مستقل.
- تحتاج إلى Templates، وقواعد Response، ووضع Proxy.
خادم المحاكاة في Apidog
Apidog منصة API متكاملة، وخادم المحاكاة فيها يعتمد على المخطط افتراضيًا. عندما تنشئ أو تستورد API، يستطيع Apidog توليد Mock Server مباشرة من نفس المشروع.
يعتمد Smart Mock في Apidog على أسماء الحقول وأنواعها لإنتاج بيانات واقعية. مثلًا، إذا كان المخطط يحتوي على:
{
"username": "string",
"email": "string",
"phone": "string",
"avatar": "string",
"createdAt": "string"
}
فبدلًا من إرجاع قيم عامة مثل "string"، يحاول Smart Mock إرجاع قيم مناسبة للحقل مثل بريد إلكتروني، رقم هاتف، أو تاريخ.
وللتحكم اليدوي، يمكنك استخدام تعابير Faker.js مثل:
{{$person.fullName}}
{{$internet.email}}
{{$number.int(min=1,max=100)}}
الفرق العملي أن Apidog لا يتطلب منك دائمًا تشغيل عملية محلية. يمكنك استخدام:
- Cloud Mock URL مثل
https://mock.apidog.com/... - Local Mock على
127.0.0.1 - محاكاة محلية يمكن ربطها بعنوان IP داخلي ليصل إليها أعضاء الفريق
استخدم Apidog عندما:
- تريد أن تبقى المحاكاة مرتبطة بالتصميم والتوثيق والاختبارات.
- تريد Mock URL جاهزًا لاستخدامه في CI بدون تشغيل خادم محلي.
- تعمل بأسلوب API-first وتريد تقليل الانحراف بين العقد والتنفيذ.
- تحتاج إلى Smart Mock وFaker.js وقواعد محاكاة مخصصة.
مقارنة سريعة
| الأداة | مصدر الحقيقة | التشغيل غير الرسومي | البيانات الواقعية | الأفضل لـ |
|---|---|---|---|---|
| Prism | OpenAPI / Postman | prism mock spec.yaml |
الوضع الديناميكي -d وx-faker
|
محاكاة CLI تعتمد على المواصفات |
| WireMock | Stub rules / recordings | JAR مستقل أو Docker | Response templates | مطابقة معقدة، JVM، تسجيل/إعادة |
| Mockoon CLI | بيئات مبنية في GUI |
mockoon-cli start وDocker |
Template helpers | تصميم بصري ثم تشغيل غير رسومي |
| Apidog | مخطط API داخل المشروع | Cloud Mock URL + Local Mock | Smart Mock + Faker.js | ربط المحاكاة بالتصميم والتوثيق والاختبارات |
لا توجد أداة واحدة مناسبة للجميع:
- اختر Prism إذا كان ملف OpenAPI هو كل ما تحتاجه.
- اختر WireMock إذا كانت قواعد المطابقة معقدة.
- اختر Mockoon CLI إذا كنت تريد التصميم بصريًا والتشغيل آليًا.
- اختر Apidog إذا أردت إبقاء المحاكاة والعقد والتوثيق والاختبارات في مشروع واحد.
لخيارات أوسع، راجع قائمة أفضل أدوات محاكاة واجهة برمجة التطبيقات.
تشغيل محاكاة غير رسومية داخل CI
النمط العام لأي أداة محاكاة داخل CI هو:
- شغّل خادم المحاكاة في الخلفية.
- انتظر حتى يصبح جاهزًا.
- وجّه الاختبارات إلى عنوان المحاكاة.
- أوقف العملية بعد انتهاء الاختبارات.
مثال باستخدام Prism:
# تشغيل المحاكاة في الخلفية
prism mock ./openapi.yaml &
MOCK_PID=$!
# انتظار بسيط حتى يبدأ الخادم
sleep 3
# تشغيل الاختبارات ضد المحاكاة
API_BASE_URL=http://127.0.0.1:4010 npm test
# تنظيف العملية
kill $MOCK_PID
مثال GitHub Actions مبسط:
name: frontend-tests
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm install -g @stoplight/prism-cli
- name: Start mock server
run: |
prism mock ./openapi.yaml &
echo $! > mock.pid
sleep 3
- name: Run tests
run: API_BASE_URL=http://127.0.0.1:4010 npm test
- name: Stop mock server
if: always()
run: kill $(cat mock.pid)
باستخدام Apidog، يمكنك تبسيط الخطوة إذا كان لديك Cloud Mock URL:
- name: Run tests against Apidog Cloud Mock
run: API_BASE_URL=https://mock.apidog.com/your-project npm test
بهذا لا تحتاج إلى تشغيل Mock Server داخل الـ runner، وتقلل عدد العمليات التي يجب إدارتها في CI.
اختبار الـ API من سطر الأوامر
بعد تشغيل المحاكاة، الخطوة التالية هي تشغيل اختبارات API نفسها من الطرفية. أداة apidog-cli تعمل بدون واجهة رسومية، ويمكن استخدامها في CI لتنفيذ سيناريوهات الاختبار.
النمط العام:
apidog run
يمكن استخدامها لتشغيل اختبارات API، وتشغيل بيانات من CSV أو JSON، وإخراج تقارير CLI أو HTML أو JSON حسب الإعدادات المدعومة.
للتفاصيل العملية، راجع:
المحاكاة مع أدوات الترميز بالذكاء الاصطناعي
إذا كنت تستخدم Cursor أو Claude أو VS Code مع وكلاء ذكاء اصطناعي، فالأهم أن يعرف الوكيل عقد الـ API الذي تبنى عليه المحاكاة.
يسمح خادم Apidog MCP لوكيل الذكاء الاصطناعي بقراءة مواصفات API مباشرة، بحيث يستطيع توليد كود عميل يطابق المخطط نفسه الذي تستخدمه المحاكاة.
الفائدة العملية:
- كود العميل يتطابق مع الـ schema.
- استجابات المحاكاة تتطابق مع نفس العقد.
- تقل أخطاء الحقول المفقودة أو الأنواع غير الصحيحة.
- يصبح الـ API contract هو المرجع المشترك بين الإنسان والوكيل والاختبارات.
أسئلة شائعة
هل المحاكاة غير الرسومية هي نفسها خادم المحاكاة؟
نعم، مع فرق في طريقة التشغيل. خادم المحاكاة هو أي خدمة ترجع استجابات وهمية لطلبات HTTP. "غير رسومي" يعني أن هذا الخادم يعمل بدون GUI، إما من CLI، أو Docker، أو عنوان URL مستضاف.
هل يمكنني إنشاء محاكاة غير رسومية من OpenAPI؟
نعم. Prism يقرأ OpenAPI مباشرة، وApidog يولد المحاكاة من المخطط داخل المشروع. المحاكاة المعتمدة على المواصفات تقلل الصيانة اليدوية لأن الاستجابات تتبع العقد بدلًا من ملفات تكوين منفصلة. راجع دليل محاكاة واجهة برمجة التطبيقات.
كيف أجعل بيانات المحاكاة واقعية؟
استخدم محرك بيانات يدعم توليد القيم من المخطط أو من Faker.
أمثلة:
- Prism: الوضع الديناميكي
-dوx-faker. - Apidog: Smart Mock وFaker.js.
- Mockoon: Template helpers.
- WireMock: Response templates.
بدون ذلك، غالبًا ستحصل على قيم عامة مثل "string" أو 0 أو كائنات فارغة.
هل أحتاج إلى تشغيل خادم محلي؟
ليس دائمًا.
- Prism وWireMock وMockoon CLI عادةً تشغّل عملية محلية أو Docker container.
- Apidog يتيح Cloud Mock URL يمكن استخدامه مباشرة من CI أو من أجهزة الفريق، بالإضافة إلى Local Mock.
اختر الخادم المحلي عندما تحتاج إلى عزلة كاملة داخل CI، واختر Mock URL مستضافًا عندما تريد تقليل الإعدادات وتسريع مشاركة المحاكاة.
الخلاصة
المحاكاة غير الرسومية تجعل Mock API جزءًا من سير العمل الحقيقي: CI، Docker، اختبارات الواجهة، وبيئات المعاينة. Prism ممتاز للمواصفات البسيطة، WireMock قوي في المطابقة المعقدة، وMockoon CLI مناسب لمن يريد التصميم بصريًا ثم التشغيل آليًا.
إذا كنت تريد أن تبقى المحاكاة مرتبطة بتصميم API والتوثيق والاختبارات بدلًا من ملفات تكوين منفصلة، فإن Apidog يجمع ذلك في مشروع واحد، مع محاكاة تعتمد على المخطط وتعمل محليًا أو عبر Cloud Mock URL. يمكنك تنزيل Apidog وتجربة تشغيل محاكاة من مواصفاتك ثم توجيه CI إليها.


Top comments (0)