DEV Community

Cover image for ترقيم إصدارات API لوكلاء الذكاء الاصطناعي: عندما تحدث التغييرات الكاسرة
Yusuf Khalidd
Yusuf Khalidd

Posted on Originally published at apidog.com

ترقيم إصدارات API لوكلاء الذكاء الاصطناعي: عندما تحدث التغييرات الكاسرة

انحراف واجهة برمجة التطبيقات: كيف تمنع التغييرات الصامتة من كسر العملاء الآليين

أعاد فريق واجهة برمجة التطبيقات تسمية customer_name إلى customer_full_name. أُعلن التغيير، وتحدّثت الوثائق، وحصل العملاء الذين تُصان تكاملاتهم يدويًا على طلبات سحب. لكن عميلك الآلي استمر في إرسال الحقل القديم؛ قبلت الواجهة الطلب وتجاهلت المفتاح غير المعروف وأعادت 200. بعد أسبوعين، كانت كل السجلات الجديدة تحتوي على اسم فارغ.

جرّب Apidog اليوم

رصد انحراف واجهة برمجة التطبيقات للعملاء الآليين

العملاء الآليون أقل المستهلكين قدرةً على ملاحظة التغيير، والأكثر قابليةً لتغطية أثره. العميل التقليدي قد يرمي استثناءً؛ أما العميل الآلي فيرى 200، يفترض النجاح، ثم قد يرتجل بقيم بديلة تبدو صحيحة.

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

Apidog مفيد هنا لأن مقارنة نسختين من تعريف API تجعل اكتشاف التغيير عملية ميكانيكية بدلًا من تحقيق يدوي.

لماذا لا تلاحظ العملاء الآليون التغييرات؟

هناك أربعة أسباب رئيسية:

  • التسامح الصامت: كثير من الواجهات تتجاهل الحقول غير المعروفة. إعادة تسمية حقل تعني أن الحقل الجديد غائب والقديم يُهمل، مع 200 في النهاية.
  • الارتجال: عند غياب قيمة في الاستجابة، قد يستنتج النموذج قيمة بديلة بدل التوقف.
  • الأوصاف جزء من العقد: أوصاف الأدوات تحمل افتراضات API بالنص. عند تغير الواجهة، تصبح الأوصاف خاطئة وتنتج استدعاءات خاطئة. راجع تصميم مخطط أدوات واجهة برمجة التطبيقات.
  • لا يوجد مُصرّف وقت البناء: العملاء محددو النوع قد يفشلون عند إزالة حقل؛ أما عقود العميل الآلي في مخططات JSON والنثر فلا تُتحقق غالبًا إلا عند التشغيل.

النتيجة: التغيير الآمن لعميل تقليدي ليس آمنًا بالضرورة لعميل آلي.

صنّف التغييرات حسب أثرها على العميل الآلي

تغييرات معطّلة للجميع

  • إزالة نقطة نهاية أو حقل.
  • إعادة تسمية حقل.
  • تغيير نوع بيانات.
  • تحويل معلمة اختيارية إلى إلزامية.
  • تغيير عنوان URL.

تبدو إضافية، لكنها خطرة على العملاء الآليين

  • حقل مطلوب جديد: قد يحاول العميل اختراع قيمة لتجاوز التحقق بدل الفشل الواضح.
  • قيمة تعداد جديدة: قد يفسر العميل قيمة غير مألوفة بتفسير غير مقصود.
  • قاعدة تحقق أكثر صرامة: يجب أن تعرض رسالة الخطأ النمط المطلوب بوضوح؛ راجع تصميم رسائل خطأ API للعملاء الآليين.
  • تغيير قيمة افتراضية: خفض حد الترقيم الافتراضي من 100 إلى 20 قد يجعل العميل يلخص جزءًا من البيانات على أنه المجموعة الكاملة.
  • تعديل وصف في المواصفات: إذا كانت الأدوات مولّدة من OpenAPI، فقد يغيّر الوصف اختيار النموذج للأداة. راجع تحويل مواصفات OpenAPI إلى أدوات عملاء آليين.

تغييرات آمنة غالبًا

  • إضافة حقل اختياري.
  • إضافة نقطة نهاية.
  • إضافة معلمة اختيارية مع الحفاظ على القيمة الافتراضية.
  • تخفيف قواعد التحقق.

راقب الفئة الوسطى تحديدًا؛ فهي غالبًا لا تظهر كتغيير معطّل في مراجعات API التقليدية.

ثبّت الإصدار في كل طلب

لا تسمح للعميل بالترقية ضمنيًا. أرسل إصدار API صريحًا، سواء كان الإصدار في المسار أو الترويسة أو إعداد الحساب.

DEFAULT_HEADERS = {
    "X-API-Version": "2026-06-01",
    "User-Agent": "billing-agent/1.4 (+https://example.com/agents)",
}
Enter fullscreen mode Exit fullscreen mode

استخدم أيضًا User-Agent واضحًا. عند إعلان الإهمال، يبحث مزود API في حركة المرور لتحديد المتصلين المتأثرين؛ العميل الذي يعرّف نفسه يمكن الوصول إليه.

تستخدم وثائق GitHub لتحديد إصدار API ترويسة تاريخ، بينما تثبّت Stripe الإصدار على مستوى الحساب. الفكرة واحدة: لا يتغير السلوك حتى تختار أنت الترقية.

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

إذا لم تكن الواجهة تدعم الإصدارات، ثبّت ما تستطيع: سجّل شكل الاستجابة المتوقع وتحقق منه باستمرار.

اكتشف الانحراف قبل الإنتاج

1. قارن المواصفات دوريًا

إذا نشر المزود مستند OpenAPI، اجلبه يوميًا وقارنه بالنسخة التي ولّدت منها الأدوات. راقب:

  • الحقول المحذوفة.
  • الأنواع المتغيرة.
  • المتطلبات الجديدة.
  • قيم التعداد الموسعة.
  • الأوصاف المعدلة.

احتفظ بالتعريف المستورد في Apidog لمقارنة الإصدارات وتحويل سؤال «هل تغير شيء؟» إلى تقرير واضح.

2. اختبر عقود نقاط النهاية في CI

لكل أداة يستدعيها العميل الآلي:

  1. أرسل طلبًا معروفًا وصالحًا.
  2. تحقق من الحقول المطلوبة.
  3. تحقق من الأنواع.
  4. تحقق من قيم التعداد المتوقعة.

هذا يلتقط الانحراف حتى في الواجهات التي لا تنشر مواصفات. راجع اختبار عقود واجهة برمجة التطبيقات واختبار العقود ثنائي الاتجاه.

3. تحقق من الشكل في وقت التشغيل

ضع التحقق في غلاف الأداة:

def check_shape(tool_name, payload, expected):
    missing = [f for f in expected["required"] if f not in payload]
    extra = [f for f in payload if f not in expected["properties"]]
    if missing:
        log.error("api_drift", tool=tool_name, missing=missing)
        raise ApiDriftError(f"{tool_name}: missing fields {missing}")
    if extra:
        log.warning("api_new_fields", tool=tool_name, fields=extra)
    return payload
Enter fullscreen mode Exit fullscreen mode

افشل عند غياب حقل مطلوب، وحذّر عند ظهور حقل جديد:

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

وجّه هذه الأحداث إلى سجل التتبع؛ راجع تتبع استدعاءات أدوات العميل الآلي.

4. راقب السلوك، لا المخطط فقط

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

  • عدد الاستدعاءات لكل مهمة مكتملة.
  • معدل إعادة المحاولة.
  • متوسط حجم الاستجابة.
  • زمن الاستجابة.

أي تغير مفاجئ يستحق التحقيق.

رقِّ الإصدار دون كسر العميل

عند الانتقال إلى إصدار جديد، تعامل معه كتغيير في العميل نفسه:

  1. أعد توليد الأدوات من المواصفات الجديدة بدل تعديلها يدويًا.
  2. راجع فرق تعريفات الأدوات؛ فهو نطاق التأثير الحقيقي.
  3. شغّل مجموعة المهام على نسخة وهمية من الإصدار الجديد قبل الإنتاج. راجع تشغيل العملاء الآليين مقابل النسخ الوهمية بدلًا من الإنتاج.
  4. أعد اختبار اختيار الأدوات على مجموعة مطالبات ثابتة، لأن تغيّر الوصف قد يغير الأداة التي يختارها النموذج. راجع اختبار العملاء الآليين غير الحتميين.
  5. انشر خلف علامة مميزة وقابلة للعكس، مع إبقاء الإصدار القديم مثبتًا.
  6. راقب ليوم واحد الاستدعاءات لكل مهمة، وإعادة المحاولة، وزمن الاستجابة، وحجم البيانات.

ثلاثة انحرافات وصلت إلى الإنتاج

حقل معاد تسميته

استمر العميل في إرسال customer_name بعد انتقال API إلى customer_full_name. أعادت كل الطلبات 200، لكن الأسماء كانت فارغة. كان فحص شكل الاستجابة سيكتشف الحقل المفقود من أول استدعاء.

حد ترقيم افتراضي أكثر صرامة

خفض المزود حجم الصفحة الافتراضي من 100 إلى 20. لم يرسل العميل limit صريحًا، فبدأ يلخص 20 سجلًا على أنها النتيجة الكاملة. الحل:

params = {"limit": 100}
Enter fullscreen mode Exit fullscreen mode

لا تعتمد على القيم الافتراضية عندما تكون اكتمال البيانات مهمًا.

قيمة تعداد جديدة

أضافت واجهة المدفوعات:

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

فسّر العميل الحالة كاسترداد وأنتج تقريرًا ماليًا خاطئًا. تحقق من قيم التعداد صراحةً، وارفض القيم غير المعروفة بدل ترك النموذج يفسرها.

تعامل مع الإهمال كمهمة لها مالك

قد يصل التحذير في سجل التغييرات، أو البريد الإلكتروني، أو ترويسات الاستجابة مثل Deprecation وSunset.

نفّذ التالي:

  • سجّل الترويسة عند أول ظهور، لا في كل طلب.
  • أنشئ تنبيهًا يحدد العميل والإصدار ونقطة النهاية.
  • احتفظ بجرد بسيط: العميل الآلي، المزود، الإصدار، نقاط النهاية، والمالك.
  • حوّل كل فرق مواصفات أو فشل عقد أو تحذير إهمال إلى عنصر عمل له موعد ومالك.

يمكن لمنصات إدارة التشغيل مثل Sharkly ربط التنبيه بمهمة وتنفيذ ومراجعة، لكن المبدأ الأهم هو أن تنبيه الانحراف بلا مالك سيتحول إلى انقطاع لاحقًا.

قائمة تحقق

  • [ ] كل طلب يرسل إصدار API صريحًا وUser-Agent واضحًا.
  • [ ] تُجلب مواصفات الطرف الثالث وتُقارن دوريًا.
  • [ ] لكل أداة اختبار عقد يتحقق من شكل الاستجابة.
  • [ ] أغلفة الأدوات تفشل عند الحقول المطلوبة المفقودة وتحذّر عند الحقول الجديدة.
  • [ ] تُراقب المقاييس السلوكية لكل نقطة نهاية.
  • [ ] تُعاد توليد الأدوات عند الترقية بدل تعديلها يدويًا.
  • [ ] تُشغّل مجموعة المهام ومجموعة اختيار الأدوات على نسخة وهمية قبل الإنتاج.
  • [ ] يكون النشر خلف علامة وقابلًا للعكس مع تثبيت الإصدار السابق.

فرق API ستستمر في تحسين واجهاتها، وهذا أمر جيد. المطلوب هو أن يكون عميلك الآلي مستهلكًا يلاحظ التغيير: ثبّت الإصدار، اختبر العقد، وتحقق من شكل الاستجابة في وقت التشغيل.

نزّل Apidog لمقارنة المواصفات ومحاكاة الإصدار التالي قبل توجيهه إلى تشغيل حي.

الأسئلة المتكررة

كم مرة يجب مقارنة مواصفات API خارجية؟

يوميًا يكفي لمعظم الحالات وهو سهل التشغيل الآلي. إذا لم ينشر المزود مواصفة، شغّل اختبارات العقود في CI بدلًا من ذلك.

هل يجب أن أبقى على أقدم إصدار يعمل؟

لا. ثبّت الإصدار لتصبح الترقية مقصودة، ثم رقِّ وفق جدول زمني. الانتظار حتى إزالة الإصدار يحوّل الترقية المخططة إلى طارئ.

ماذا لو استمر العميل في العمل بعد التغيير؟

تحقق ولا تفترض النجاح. أخطر الحالات هي التي تعيد 200 بينما تُسقط حقلًا أو تغير قيمة افتراضية بصمت.

هل أحتاج إلى تحديد إصدار مختلف للعملاء الآليين؟

ليس مختلفًا، بل أكثر صرامة. اعتبر الحقول المطلوبة الجديدة وقيم التعداد الجديدة والقيم الافتراضية المتغيرة تغييرات معطّلة للعملاء الآليين، حتى إن كانت إضافية للعملاء التقليديين.

كيف أعرف أي عميل يستدعي أي نقطة نهاية؟

من التتبعات: سجّل اسم الأداة ونقطة النهاية ومعرّف التشغيل في كل استدعاء. بذلك تحصل على خريطة تبعية جاهزة عند وصول إشعار إهمال.

هل يمكن للعميل الآلي التكيف وحده مع API متغيرة؟

أحيانًا، لكن لا تعتمد على

Top comments (0)