Pact هي أداة مرجعية لاختبار العقود المدفوع بالمستهلك. يكتب المستهلكون اختبارات وحدات تُنشئ عقدًا، ثم يعيد الموفرون تشغيل العقد مقابل تنفيذهم الحقيقي. يحفظ Pact Broker النتائج، ويحدد can-i-deploy ما إذا كان الإصدار آمنًا للنشر. تلتقط هذه الحلقة حالات فشل التكامل التي لا تكشفها اختبارات الوحدات المعزولة، لكنها تفرض أيضًا تكلفة تشغيلية: DSL خاصة بكل لغة، وحالات موفر يجب صيانتها، ووسيط يحتاج إلى استضافة وإدارة إصدارات، وبنيات تحقق قد يصعب إعادة إنتاج فشلها محليًا.
الإجابة المباشرة: Apidog بديل عملي لـ Pact عندما تكون المشكلة الأساسية هي تباين المخطط بين الموفر والمستهلك. بدل إنشاء ملفات عقود من اختبارات كل مستهلك، اجعل مواصفة OpenAPI مصدر الحقيقة، ثم:
- تحقق من الاستجابات مقابل المخطط في كل اختبار.
- وفر نماذج وهمية ذكية للمستهلكين قبل اكتمال تنفيذ الموفر.
- شغّل اختبارات العقد في CI عبر Apidog CLI.
لكن Apidog لا يكرر سير عمل Pact Broker المدفوع بالمستهلك: لا توجد ملفات Pact ولا مصفوفة توافق ولا can-i-deploy. إذا كنت تحتاج بوابة نشر تعتمد على توافق إصدارات متعددة لخدمات تنشرها فرق مستقلة، فسيظل Pact مناسبًا لهذا السيناريو.
ما الذي يتقنه Pact؟
وفقًا لوثائق Pact، هي أداة لاختبار تكاملات HTTP والرسائل بأسلوب code-first. النموذج مدفوع بالمستهلك:
- يشغّل المستهلك اختبارًا مقابل موفر وهمي.
- يسجل Pact الطلبات والاستجابات المستخدمة في ملف عقد.
- يعيد الموفر تشغيل التفاعلات مقابل تطبيقه الحقيقي.
- تجهز حالات الموفر البيانات المطلوبة لكل تفاعل.
ميزة هذا النموذج أن العقد يسجل الحقول التي يستخدمها المستهلك فقط، ما يتيح للموفر تغيير الحقول غير المستخدمة بحرية.
يحوّل Pact Broker هذه العقود إلى قرار نشر. يحتفظ بمصفوفة لنسخ المستهلك والموفر التي تم التحقق منها، ثم يجيب can-i-deploy عن سؤال: هل يمكن نشر هذا الإصدار مع الإصدارات الموجودة حاليًا في البيئة المستهدفة؟
# رمز الخروج 0: النشر مسموح
# رمز الخروج 1: لا تنشر
can-i-deploy
يدعم Pact أكثر من 10 لغات، منها JVM وJavaScript وGo و.NET وPython وRuby وRust وPHP وSwift. ولتجنب تشغيل Broker ذاتيًا، توفر SmartBear خدمة PactFlow المُدارة، مع طبقة Starter مجانية لتكاملين وطبقة Team بسعر 127 دولارًا شهريًا لـ 50 تكاملًا.
أين تظهر التعقيدات؟
المشكلة ليست في فكرة العقد نفسها، بل في تكلفة تشغيل الحلقة على مستوى الفرق.
كل فريق مستهلك يكتب DSL خاصة به.
تُولد العقود من كود الاختبارات، لذلك يتعلم كل فريق DSL الخاصة بلغة مشروعه. في مؤسسة متعددة اللغات، يعني ذلك قواعد مطابقة وإعدادات mocks وكود اختبار موزع بين فرق كثيرة.حالات الموفر تصبح مجموعة اختبارات خفية.
قد يتطلب تفاعل واحد حالة مثل: “المستخدم 42 لديه فاتورة غير مدفوعة”. على فريق الموفر تنفيذ معالج ينشئ هذه الحالة. مع زيادة المستهلكين، يكبر كتالوج الحالات التي لا يملك الموفر تصميمها.الوسيط بنية تحتية إضافية.
عند الاستضافة الذاتية، تحتاج إلى قاعدة بيانات وتحديثات ومصادقة وwebhooks وتكامل CI. وعند استخدام خدمة مُدارة، تضيف بائعًا آخر وسير عمل لإدارة الإصدارات والفروع والبيئات.تحقق الموفر قد يصبح غير مستقر.
يعيد التحقق تشغيل طلبات أنشأها فريق مستهلك ضد موفر حي. هذا يعني تشغيل قاعدة البيانات وبيانات البذور وبدائل المصادقة والمهام الخلفية. وعندما يفشل البناء، قد يحتاج فريق الموفر إلى تصحيح اختبار كتبه فريق آخر.
تعترف اختبارات العقود ثنائية الاتجاه في PactFlow بجزء من هذا العبء: ينشر الموفر مستند OpenAPI، وينشر المستهلكون عقودًا مشتقة من النماذج الوهمية، ثم تقارن المنصة المخططين بشكل ثابت بدل إعادة تشغيل التفاعلات. وهذا مناسب لعدد كبير من تكاملات HTTP التي يكفي فيها توافق المخططات. راجع أيضًا اختبار العقود ثنائي الاتجاه.
البديل العملي: Apidog
Apidog منصة لتطوير API تضع مواصفة OpenAPI في المركز، ثم تستخدمها للوثائق والنماذج الوهمية والتحقق والاختبارات الآلية. الفكرة بسيطة: اجعل المواصفة هي العقد، ثم طبقها في كل مكان.
1. استخدم عقدًا واحدًا بدل DSL متعددة
بدل إنشاء عقد مستقل لكل مستهلك، اجعل ملف OpenAPI هو الاتفاق المشترك:
- أنواع البيانات.
- الحقول المطلوبة.
- قيم
enum. - نماذج الأخطاء.
- تعريفات نقاط النهاية.
لا يكتب كل مستهلك كودًا لتوليد عقده. تعدل الفرق المواصفة نفسها، بصريًا أو كملف ضمن المستودع. راجع اختبار العقود لواجهة API لفهم هذا النموذج.
2. فعّل التحقق من المخطط في كل تشغيل
عند تشغيل طلبات أو سيناريوهات اختبار في Apidog، تحقق من أن الاستجابة تطابق تعريف OpenAPI.
هذا يكتشف تلقائيًا:
- حقلًا أعيدت تسميته.
- تغيير نوع قيمة.
- خاصية حُذفت.
- استجابة خطأ لا تطابق العقد.
بدل كتابة تأكيد يدوي لكل حقل، يصبح المخطط نفسه هو التأكيد.
3. ابدأ تطوير المستهلك قبل اكتمال الموفر
يوفر الخادم الوهمي الذكي استجابات مشتقة من المخطط فور تعريف نقطة النهاية. يستطيع فريق الواجهة الأمامية أو أي مستهلك آخر البرمجة مقابل URL وهمي مشترك، بدل انتظار تنفيذ الموفر أو كتابة mock محلي لكل مشروع.
4. شغّل الاختبارات في CI بدون Broker
نفّذ سيناريوهات الاختبار في مسار CI:
apidog run
عندما يكسر تغيير في الموفر مواصفة OpenAPI، يفشل بناء الموفر قبل النشر. النتيجة العملية هي منع التغيير الكاسر من المصدر، بدل انتظار مصفوفة توافق خارجية.
التحول من Pact إلى نموذج المواصفة أولًا
العقد
في Pact، العقد ملف JSON ناتج عن أمثلة تفاعل من مستهلك محدد. في Apidog، العقد هو مواصفة OpenAPI موحدة تصف الأنواع والحقول المطلوبة والتعدادات والأخطاء لكل نقطة نهاية.
المقايضة مهمة: عقد Pact الخاص بكل مستهلك يوضح للموفر الحقول التي يستخدمها ذلك المستهلك تحديدًا. أما المواصفة المشتركة فلا تحمل هذه الإشارة. لكنها توفر مصدرًا واحدًا تستخدمه الوثائق والاختبارات والنماذج الوهمية والعملاء. للمزيد، راجع ما هو عقد API؟.
تحقق الموفر
في Pact، يعيد الموفر تشغيل تفاعلات المستهلك. في Apidog:
- أنشئ سيناريوهات اختبار لنقاط النهاية.
- شغّلها ضد تطبيق الموفر الحقيقي.
- فعّل التحقق من صحة المخطط.
- نفّذها في CI لكل بناء.
بهذا يتحقق الموفر من العقد دون إدارة قائمة طويلة من حالات الموفر التي أنشأها مستهلكون مختلفون.
تطوير المستهلك
يوفر Pact mock provider ضمن اختبار المستهلك. أما Apidog فيوفر mock URL مستضافًا ومشتقًا من المواصفة، ويمكن مشاركته بين الفرق وإضافة توقعات مخصصة عند الحاجة إلى بيانات محددة.
للمقارنة بين النماذج الوهمية المعتمدة على المواصفة والنماذج اليدوية، راجع اختبار العقود وخوادم النماذج الوهمية.
حظر النشر
هذه أقوى نقطة في Pact. لا يقدم Apidog مصفوفة توافق عبر الخدمات ولا can-i-deploy.
بدلًا من ذلك:
- التغيير الذي يخالف المواصفة يفشل CI الخاص بالموفر.
- تغيير المواصفة يصبح تغييرًا صريحًا ومراجعًا عبر pull request أو فرع.
- تتحدث الوثائق والنماذج الوهمية والاختبارات من المصدر نفسه.
إذا كانت الخدمات تُنشر عبر عدد محدود من مسارات العمل المنسقة، غالبًا يكفي الحظر على مستوى العقد. أما إذا كانت عشرات الفرق تنشر بصورة مستقلة وفي أوقات غير متوقعة، فقد تحتاج إلى بوابة Pact على مستوى المصفوفة.
Pact وPactFlow مقابل Apidog
| العنصر | Pact + PactFlow | Apidog |
|---|---|---|
| قطعة العقد الأثرية | ملفات Pact مولدة لكل مستهلك | مواصفة OpenAPI واحدة |
| من يكتب كود العقد | كل فريق مستهلك، DSL لكل لغة | لا أحد؛ تعدل المواصفة بصريًا أو ككود |
| تحقق الموفر | إعادة تشغيل التفاعلات وحالات الموفر | سيناريوهات اختبار والتحقق التلقائي من المخطط |
| نماذج المستهلك الوهمية | موفر وهمي داخل الاختبار | نموذج وهمي ذكي مستضاف من المواصفة |
| اكتشاف الانجراف | عند تنفيذ التحقق | في كل طلب وكل تشغيل CI |
| حظر النشر | Broker matrix وcan-i-deploy
|
CI محظور بالعقد لكل خدمة |
| البنية التحتية | Broker ذاتي الاستضافة أو PactFlow SaaS | لا شيء إضافي؛ مساحة عمل سحابية متضمنة |
| الوثائق والتصميم | خارج النطاق | وثائق تفاعلية ومحرر مواصفات مرئي |
| التكلفة | مفتوح المصدر؛ PactFlow مجاني لتكاملين و127 دولارًا شهريًا لفريق | مجاني حتى 4 مستخدمين؛ مدفوع من 9 دولارات لكل مستخدم شهريًا |
احسب التكلفة الفعلية
مكتبات Pact مفتوحة المصدر ومجانية، لكن التكلفة تأتي من التنسيق:
- استضافة Broker أو اشتراك PactFlow.
- وقت كتابة وصيانة DSL.
- وقت صيانة provider states.
- تصحيح أخطاء التحقق عبر الفرق.
- إدارة النسخ والفروع والبيئات.
تغطي الخطة المجانية من Apidog أربعة مستخدمين، مع محرر المواصفات وخادم النماذج الوهمية وسيناريوهات الاختبار والتحقق من المخطط وتشغيل CLI. تبدأ الخطط المدفوعة من 9 دولارات لكل مستخدم شهريًا.
المقارنة ليست مجرد رسوم ترخيص. السؤال هو: هل تريد صيانة آليات اختبار عقود منفصلة، أم تريد أن تصبح المواصفة التي تستخدمها للتوثيق والتصميم والاختبار هي العقد نفسه؟ إذا كنت تدمج أدوات API، ابدأ من أفضل بديل لـ Postman، أو راجع مجموعة أدوات التطوير القائمة على العقد أولًا.
خطة هجرة من Pact
لا تحاول تحويل ملفات Pact مباشرة. ارفع مواصفة OpenAPI لتصبح العقد الأساسي.
احصل على مواصفة OpenAPI فعلية
إذا كانت لديك مواصفة، استوردها إلى Apidog لتتحول إلى وثائق ونماذج وهمية وقواعد تحقق. إذا لم تكن لديك، أنشئها من تعليقات الكود واستخدم ملفات Pact الحالية كقائمة تحقق لنقاط النهاية التي يستهلكها العملاء.فعّل التحقق من المخطط في CI
أنشئ سيناريوهات اختبار لنقاط نهاية الموفر، ثم نفذها باستخدام CLI في كل بناء.
apidog run
انقل المستهلكين إلى النموذج الوهمي الذكي
استبدل إعدادات Pact mock المحلية بعنوان URL للنموذج الوهمي المستضاف. احذف DSL تدريجيًا بعد نقل كل مستهلك.راجع تغييرات المواصفة بوضوح
اجعل تعديلات OpenAPI تغييرات خاضعة للمراجعة في فرع أو pull request. تصبح التغييرات الكاسرة مرئية قبل أن تتحول إلى حوادث.أوقف Broker أخيرًا
احتفظ بـcan-i-deployفي التكاملات التي يشكل فيها توقيت النشر المستقل خطرًا فعليًا. أزله من التكاملات التي أصبح فيها مجرد خطوة روتينية.
متى يبقى Pact الخيار الصحيح؟
استمر مع Pact إذا كان لديك:
- فرق كثيرة تنشر خدمات مستقلة وفق جداول مختلفة.
- حاجة إلى إجابة آلية عن توافق الإصدار الجديد مع كل ما يعمل في الإنتاج.
- اعتماد قوي على بوابة نشر قائمة على
can-i-deploy. - اختبار عقود قائم على قوائم الرسائل.
في هذه الحالات، صممت مصفوفة Pact Broker لهذا النوع من تنسيق الإصدارات، ولا يكررها Apidog.
أما إذا كانت مشكلتك الأساسية هي تباين المخطط، وبناء mocks، والتحقق في CI، فأنت على الأرجح تدير أجزاء كبيرة من بنية Pact للحصول على فائدة يمكن أن يوفرها عقد OpenAPI واحد.
الأسئلة الشائعة
هل Apidog أداة لاختبار العقود مثل Pact؟
يفرض Apidog العقود بطريقة مختلفة. ينشئ Pact عقودًا لكل مستهلك من كود الاختبار ويعيد تشغيلها ضد الموفر. يجعل Apidog مواصفة OpenAPI هي العقد ويتحقق من الطلبات وتشغيلات CI مقابلها، ما يغطي تباين المخطط دون سير عمل Broker. التفاصيل متاحة في اختبار العقود لواجهة API.
هل يدعم Apidog can-i-deploy أو Pact Broker؟
لا. لا يحتوي Apidog على مصفوفة تحقق أو بوابة نشر متعددة الخدمات. بوابته هي العقد: إذا خالف البناء المواصفة، يفشل مسار عمله. إذا كنت تحتاج حظرًا على مستوى المصفوفة، احتفظ بـ Pact للتكاملات المعنية. كخيار وسط، راجع اختبار العقود ثنائي الاتجاه.
هل يمكن لـ Apidog استبدال نماذج Pact الوهمية؟
نعم، لمعظم الاستخدامات. ينشئ الخادم الوهمي الذكي استجابات مطابقة للمخطط من المواصفة دون إعداد يدوي، مع توقعات مخصصة للحالات المحددة. يبرمج المستهلكون مقابل URL لعقد حي بدل كتابة DSL لموفر وهمي. راجع اختبار العقود وأدوات النماذج الوهمية.
ماذا عن اختبار Fuzzing للموفر مقابل المواصفة؟
يمكنك دمج سيناريوهات Apidog مع مختبر خصائص قائم على المواصفات للحصول على تغطية سلبية أوسع من إعادة تشغيل أمثلة محددة. راجع ما هو Schemathesis؛ إذ يمكن للمواصفة نفسها أن تقود الأداتين.
كم تبلغ تكلفة PactFlow مقارنة بـ Apidog؟
طبقة Starter في PactFlow مجانية لتكاملين، وطبقة Team تكلف 127 دولارًا شهريًا لـ 50 تكاملًا، بينما تسعير Enterprise مخصص. Apidog مجاني حتى أربعة مستخدمين، وتبدأ الخطط المدفوعة من 9 دولارات لكل مستخدم شهريًا. إذا كنت تقارن أيضًا أدوات الالتقاط وإعادة التشغيل، راجع أفضل بديل لـ Keploy.
تخلّص من الروتين الزائد وحافظ على العقد
إذا كنت تستخدم Pact أساسًا لاكتشاف تباين المخطط، يمكنك تحقيق هذا الضمان من مواصفة واحدة:
- استورد ملف OpenAPI.
- فعّل التحقق من المخطط في كل تشغيل.
- أضف
apidog runإلى CI. - وزع عنوان URL للنموذج الوهمي على المستهلكين.
- راجع أي تعديل على المواصفة قبل دمجه.
نزّل Apidog أو ابدأ من المتصفح. لفريق من أربعة مستخدمين، الخطة المجانية كافية للبدء، وتقليل مكونات البنية التحتية التي تحتاج إلى صيانتها هو جزء أساسي من الفائدة.
Top comments (0)