هذه سلسلة من 10 أجزاء تشارك كيف طوّرت Apidog Apidog CLI، وهي أداة سطر أوامر لاختبار واجهات برمجة التطبيقات وإدارة دورة حياة واجهة برمجة التطبيقات. اقرأ بالترتيب أو انتقل إلى أي منشور يثير اهتمامك:
| العنوان | التركيز | |
|---|---|---|
| 1 | بنينا 126 أداة MCP. ولكنها ليست الحل الأفضل للوكيل | اكتشاف المشكلة |
| 2 | لماذا طورنا Apidog CLI الجديدة كليًا | تطوير المعمارية |
| 3 | القاعدة الذهبية: CLI تنتج الحقائق، والنموذج يعمل بناءً على الحقائق | الفلسفة الأساسية |
| 4 | agentHints: تعليم CLIs التحدث إلى الوكلاء |
مخرجات منظمة |
| 5 | المهارة (SKILL): شحن الخبرة التشغيلية ككود | الخبرة التشغيلية |
| 6 | الأرقام لا تكذب: 30% مكالمات أدوات أقل، 25% رموز أقل | نتائج كمية |
| 7 | من PRD إلى حلقة الاختبار: سير عمل وكيل كامل مع Apidog CLI | برنامج تعليمي عملي |
| 8 | لماذا لا يمكن التنازل عن توافق CI/CD لأدوات الوكيل | منظور DevOps |
| 9 | فرع الذكاء الاصطناعي: تغييرات مشروع أكثر أمانًا مع وكلاء الذكاء الاصطناعي | طبقة الأمان |
| 10 | "Spec-First" كان بالأمس. مرحبًا بك في "Skill-First". | الرؤية والمستقبل |
مرر على مثال واقعي: يمتلك فريق PRD لاسترداد الطلبات وقاعدة كود. شاهد كيف يستخدم وكيل Apidog CLI + SKILL لإنشاء OpenAPI، وإنشاء الاختبارات، والتحقق، والمراجعة - من البداية إلى النهاية.
السيناريو
لنجعل كل شيء ملموسًا بسير عمل حقيقي.
السياق:
لقد انتهى فريق للتو من كتابة PRD "استرداد الطلب". تحتوي قاعدة الكود بالفعل على مسارات ووحدات تحكم (controllers) مطابقة.
طلب المستخدم من الوكيل:
"أنشئ اختبارات API لوظيفة الاسترداد بناءً على PRD وقاعدة الكود، ثم قم بتشغيل التحقق."
مشكلة النهج القديم
باستخدام أدوات MCP، يواجه الوكيل سلسلة من المعضلات:
| نقطة القرار | عدم اليقين |
|---|---|
| الاستعلام عن المشروع أولاً؟ | أم إنشاء نقطة نهاية أولاً؟ |
| كتابة حالة الاختبار أولاً؟ | أم إنشاء مخطط (Schema) أولاً؟ |
| تشغيل الاختبارات مباشرة؟ | أم قراءة الموارد أولاً؟ |
| أي أداة لكل خطوة؟ | البحث في 126 أداة |
يبذل الوكيل جهدًا كبيرًا لمجرد تحديد المسار - وليس تنفيذ المهمة.
مسار CLI + SKILL
تُرضي CLI + SKILL تدفقات البحث والتطوير الحقيقية بتسلسل واضح:
إنشاء OpenAPI من PRD وقاعدة الكود
↓
الاستيراد إلى Apidog
↓
إضافة حالات اختبار نقطة نهاية واحدة
↓
التحقق قبل الكتابة
↓
إنشاء سيناريو اختبار لتدفق الأعمال
↓
التحقق قبل الكتابة
↓
تشغيل الاختبارات الآليةدعنا نمر على كل خطوة.
الخطوة 1: إنشاء واستيراد OpenAPI
يقرأ الوكيل PRD وقاعدة الكود، ثم ينشئ مواصفات OpenAPI.
مقتطف من PRD:
Order Refund API (واجهة برمجة تطبيقات استرداد الطلب)
POST /api/orders/{orderId}/refund
- Request body: { "reason": string, "amount": number } (جسم الطلب: { "السبب": نص، "المبلغ": رقم })
- Response: { "refundId": string, "status": string, "processedAt": datetime } (الاستجابة: { "معرف_الاسترداد": نص، "الحالة": نص، " "تاريخ_المعالجة": تاريخ ووقت })
GET /api/orders/{orderId}/refund/{refundId}
- Response: { "refundId": string, "status": string, "amount": number } (الاستجابة: { "معرف_الاسترداد": نص، "الحالة": نص، "المبلغ": رقم })الوكيل ينشئ OpenAPI:
{
"openapi": "3.0.0",
"paths": {
"/api/orders/{orderId}/refund": {
"post": {
"summary": "Create refund request", (ملخص: "إنشاء طلب استرداد")
"parameters": [...],
"requestBody": {...},
"responses": {...}
}
},
"/api/orders/{orderId}/refund/{refundId}": {
"get": {
"summary": "Get refund status", (ملخص: "الحصول على حالة الاسترداد")
...
}
}
}
}الاستيراد إلى Apidog:
apidog import --project <projectId> --format openapi --file ./openapi.jsonمخرجات CLI:
{
"success": true,
"data": {
"importedEndpoints": ["POST /refund", "GET /refund/{refundId}"], (نقاط النهاية المستوردة)
"endpointIds": ["ep-001", "ep-002"] (معرفات نقاط النهاية)
},
"agentHints": {
"summary": "OpenAPI imported successfully. 2 endpoints created.", (ملخص: "تم استيراد OpenAPI بنجاح. تم إنشاء نقطتي نهاية.")
"nextSteps": [
"List the imported endpoints to confirm structure.", (اطلب نقاط النهاية المستوردة لتأكيد الهيكل.)
"Add test cases for each endpoint.", (أضف حالات اختبار لكل نقطة نهاية.)
"Create a test scenario for the complete refund flow." (أنشئ سيناريو اختبار لتدفق الاسترداد الكامل.)
]
}
}الخطوة 2: حالات اختبار نقطة نهاية واحدة
يركز الوكيل على "نقطة نهاية الاسترداد" أولاً.
الوكيل يقرأ نقطة النهاية:
apidog endpoint get ep-001 --project <projectId>CLI تعيد هيكل نقطة النهاية:
{
"id": "ep-001",
"method": "POST",
"path": "/api/orders/{orderId}/refund",
"requestBody": {
"schema": {
"type": "object",
"properties": {
"reason": { "type": "string" }, (السبب: نص)
"amount": { "type": "number" } (المبلغ: رقم)
},
"required": ["reason", "amount"] (مطلوب: ["السبب", "المبلغ"])
}
},
"responses": {
"200": {...}
}
}الوكيل ينشئ حالة اختبار:
{
"name": "Create refund - success", (الاسم: "إنشاء استرداد - نجاح")
"endpointId": "ep-001",
"request": {
"path": "/api/orders/order-123/refund",
"body": {
"reason": "Customer request", (السبب: "طلب العميل")
"amount": 99.99
}
},
"assertions": [
{
"subject": "responseJson.status", (الموضوع: "responseJson.status")
"comparator": "equal", (المقارن: "يساوي")
"target": "processed" (الهدف: "تمت المعالجة")
}
]
}التحقق قبل الكتابة:
apidog cli-schema validate test-case-create --file ./test-case-create.jsonنتيجة تحقق CLI:
{
"success": true,
"agentHints": {
"summary": "Test case structure is valid.", (ملخص: "هيكل حالة الاختبار صالح.")
"nextSteps": [
"Create the test case in Apidog.", (أنشئ حالة الاختبار في Apidog.)
"Read back the created test case to confirm.", (اقرأ حالة الاختبار التي تم إنشاؤها للتأكيد.)
"Add more assertions if needed." (أضف المزيد من التأكيدات إذا لزم الأمر.)
]
}
}إنشاء حالة اختبار:
apidog test-case create --project <projectId> --file ./test-case-create.jsonمخرجات CLI:
{
"success": true,
"data": {
"id": "tc-001",
"name": "Create refund - success" (الاسم: "إنشاء استرداد - نجاح")
},
"agentHints": {
"summary": "Test case created successfully.", (ملخص: "تم إنشاء حالة الاختبار بنجاح.")
"nextSteps": [
"Read back test case tc-001 to confirm assertions.", (اقرأ حالة الاختبار tc-001 للتأكد من التأكيدات.)
"Create test case for GET /refund/{refundId}.", (أنشئ حالة اختبار لـ GET /refund/{refundId}.)
"Build test scenario for complete refund flow." (أنشئ سيناريو اختبار لتدفق الاسترداد الكامل.)
]
}
}الخطوة 3: سيناريو اختبار لتدفق كامل
بناءً على PRD، فإن تدفق الأعمال الكامل هو:
إنشاء طلب ← دفع ← استرداد ← الاستعلام عن حالة الاستردادالوكيل ينشئ سيناريو:
{
"name": "Order Refund Complete Flow", (الاسم: "تدفق استرداد الطلب الكامل")
"steps": [
{ "type": "case", "caseId": "tc-create-order" }, (النوع: "حالة"، معرف الحالة: "tc-create-order")
{ "type": "case", "caseId": "tc-pay" }, (النوع: "حالة"، معرف الحالة: "tc-pay")
{ "type": "case", "caseId": "tc-001" }, (النوع: "حالة"، معرف الحالة: "tc-001")
{ "type": "case", "caseId": "tc-get-refund" } (النوع: "حالة"، معرف الحالة: "tc-get-refund")
]
}التحقق قبل الكتابة:
apidog cli-schema validate test-scenario-update --file ./scenario-update.jsonإنشاء سيناريو:
apidog test-scenario create --project <projectId> --file ./scenario-update.jsonالخطوة 4: تشغيل التحقق
بعد أن تصبح حالات الاختبار والسيناريوهات جاهزة:
apidog run --project <projectId> \
--test-scenario scenario-001 \
--environment env-production \
-r "cli,html,junit" \
--out-dir ./apidog-reportsمخرجات CLI:
{
"success": true,
"stats": {
"total": 4, (الإجمالي: 4)
"passed": 4, (اجتاز: 4)
"failed": 0 (فشل: 0)
},
"reportFiles": {
"cli": "./apidog-reports/cli-report.txt",
"html": "./apidog-reports/report.html",
"junit": "./apidog-reports/junit.xml"
},
"agentHints": {
"summary": "All tests passed. 4 steps executed successfully.", (ملخص: "اجتازت جميع الاختبارات. تم تنفيذ 4 خطوات بنجاح.")
"nextSteps": [
"Review the HTML report for detailed results.", (راجع تقرير HTML للحصول على نتائج مفصلة.)
"If failures occurred, debug using CLI error details.", (إذا حدثت إخفاقات، قم بالتصحيح باستخدام تفاصيل أخطاء CLI.)
"Integrate this test into CI pipeline." (ادمج هذا الاختبار في خط أنابيب CI.)
]
}
}السلسلة الكاملة
جميع العناصر متصلة الآن:
| العنصر | الحالة |
|---|---|
| PRD | تمت قراءته ومعالجته |
| قاعدة الكود | تم تحليلها للمسارات |
| OpenAPI | تم إنشاؤها واستيرادها |
| أصول نقطة النهاية | تم إنشاؤها في Apidog |
| اختبارات نقطة النهاية الواحدة | تم إنشاؤها والتحقق منها |
| سيناريو العمل | تم بناؤه والتحقق منه |
كل شيء قابل للتحقق والتتبع.
agentHints عبر التدفق
لاحظ كيف يوجه agentHints كل انتقال:
| بعد | يقترح agentHints |
|---|---|
| استيراد نقاط النهاية | "سرد نقاط النهاية، إضافة حالات اختبار" |
| إنشاء حالة اختبار | "قراءة مرة أخرى، إنشاء المزيد من حالات الاختبار، بناء سيناريو" |
| إنشاء سيناريو | "إضافة تأكيدات، التحقق، التشغيل" |
| تشغيل الاختبارات | "مراجعة التقرير، تصحيح الأخطاء إذا لزم الأمر، التكامل مع CI" |
لا يضطر الوكيل أبدًا إلى تخمين ما يجب فعله بعد ذلك.
مقارنة: MCP مقابل CLI + SKILL لهذه المهمة
| البعد | نهج MCP | نهج CLI + SKILL |
|---|---|---|
| نقطة البداية | يبحث الوكيل عن أدوات المشروع | تحدد SKILL نوع المهمة |
| إنشاء نقطة النهاية | يخمن الوكيل الأداة والحقول | استيراد CLI من OpenAPI |
| إنشاء حالة الاختبار | عدة محاولات فاشلة بسبب أخطاء الحقول | التحقق المحلي قبل الكتابة |
| بناء السيناريو | يكتب الوكيل الهيكل يدويًا | استيراد الخطوات، القراءة مرة أخرى، التحديث |
| التحقق | يجد الوكيل أداة التشغيل | يقترح agentHints بعد السيناريو |
| إجمالي الخطوات | حوالي 20-25 استدعاء مع محاولات فاشلة | حوالي 10-12 استدعاءً تم التحقق منها |
ماذا بعد؟
يوضح هذا المثال العملي كيف تعمل CLI + SKILL في سير عمل حقيقي.
ولكن هناك أساس تحت كل هذا: توافق CI/CD.
في الجزء 8، لماذا لا يمكن التنازل عن توافق CI/CD لأدوات الوكيل، سنستكشف لماذا يخدم apidog run كلاً من خطوط أنابيب CI ووكلاء الذكاء الاصطناعي - ولماذا يهم هذا الغرض المزدوج لتصميم الأدوات المستدامة.
النقاط الرئيسية
- سير عمل كامل: PRD ← OpenAPI ← استيراد ← حالات الاختبار ← سيناريو ← تحقق
- كل خطوة تحتوي على أمر CLI + التحقق + agentHints
- خطوات الاستيراد + القراءة مرة أخرى أكثر أمانًا من كتابة السيناريوهات يدويًا
--with-case-detailيعطي هيكلًا حقيقيًا للتحديثات- agentHints يوجه كل انتقال
- كل شيء قابل للتحقق والتتبع
قم بتنزيل Apidog لـ تصميم، ومحاكاة، واختبار، وتوثيق واجهات برمجة التطبيقات في مساحة عمل واحدة. تعرف على المزيد حول Apidog CLI لاختبار واجهات برمجة التطبيقات عبر سطر الأوامر، وأتمتة CI، وسير عمل وكيل الذكاء الاصطناعي.
