كيفية منع التغييرات المسببة لكسر واجهة برمجة التطبيقات (API) باستخدام API Gateway

Bobur Umurzokov

Bobur Umurzokov

September 11, 2023

Technology

عند تطوير واجهات برمجة التطبيقات (APIs)، قد تقوم أحيانًا بتغيير أشياء قد تسبب مشاكل للمستهلكين الحاليين لواجهة برمجة التطبيقات. تطوير واجهة برمجة التطبيقات دون التأثير على المستخدمين الحاليين أمر ضروري، وإلا قد يفقدون الثقة في عرضك. من المستحيل تجنب هذه المشاكل تمامًا، ولكن يمكنك تقليل تأثيرها أو اكتشاف بعض التغييرات التي قد تسبب مشاكل قبل حدوثها. يجب تحديد التغييرات التي قد تسبب مشاكل خلال مرحلة التطوير، وإذا حدثت، يجب أن يتعامل معها بوابة واجهة برمجة التطبيقات (API Gateway) لضمان بقاء التطبيقات العميلة غير متأثرة. في هذه المقالة، سنستكشف بعض أفضل الممارسات والاستراتيجيات لمنع التغييرات التي قد تسبب مشاكل في واجهة برمجة التطبيقات وكيفية التعامل معها باستخدام بوابة واجهة برمجة التطبيقات APISIX.

ما هي التغييرات التي قد تسبب مشاكل في واجهة برمجة التطبيقات؟

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

  1. إزالة نقطة نهاية (Endpoint): إذا كان لديك نقطة نهاية GET /users وقررت إزالتها، فإن أي عميل يحاول الوصول إليها سيحصل على أخطاء.
  2. تغيير عنوان URL لنقطة نهاية: إذا قمت بتغيير عنوان URL لنقطة نهاية من GET /users إلى GET /members، فإن أي عميل يستخدم العنوان القديم سيواجه مشاكل.
  3. تعديل حمولة الطلب (Request Payload): إذا كانت نقطة النهاية تتوقع بيانات محددة في الطلب، مثل POST /users التي تتوقع { "name": "John" }، ولكنك قمت بتغيير المتطلبات إلى { "firstName": "John" }، فإن ذلك سيؤدي إلى تعطيل العملاء الذين يرسلون التنسيق القديم.
  4. إزالة أو إعادة تسمية الحقول في الاستجابة: إذا كان العملاء يتوقعون حقولًا محددة في استجابة واجهة برمجة التطبيقات، فإن إزالتها أو إعادة تسميتها سيؤدي إلى تعطيل هؤلاء العملاء. على سبيل المثال، تغيير { "id": 1, "name": "John" } إلى { "id": 1, "fullName": "John Doe" }.
  5. تغيير أنواع البيانات: إذا كان حقل في واجهة برمجة التطبيقات متوقعًا أن يكون سلسلة نصية وقمت بتغييره إلى عدد صحيح أو نوع آخر، فإن ذلك قد يعطل العملاء. على سبيل المثال، تغيير "age": "25" إلى "age": 25.
  6. تغيير آليات المصادقة: إذا قمت بالتبديل من المصادقة الأساسية إلى المصادقة القائمة على الرموز دون انتقال مناسب، فإن العملاء الحاليين سيواجهون أخطاء في المصادقة.
  7. إدخال حقول إلزامية: إذا كان لديك نقطة نهاية مثل POST /users التي تأخذ حقولًا اختيارية، وقمت فجأة بجعل أحد هذه الحقول إلزاميًا، فإن العملاء الحاليين الذين لا يرسلون هذا الحقل سيواجهون مشاكل.
  8. تغيير تنسيقات الأخطاء: إذا كان العملاء مبرمجين لفهم تنسيقات أخطاء محددة، فإن تغيير هذه التنسيقات قد يؤدي إلى معالجة غير صحيحة للأخطاء على جانب العميل.
  9. تعديل رموز حالة HTTP: تغيير رموز الحالة لعمليات معينة، مثل إرجاع 200 OK بدلاً من 201 Created لإنشاء الموارد، قد يضلل العملاء.
  10. إيقاف دعم إصدارات واجهة برمجة التطبيقات القديمة: إذا قمت بإيقاف دعم الإصدارات القديمة دون فترة انتقالية مناسبة، فإن العملاء الذين يعتمدون على هذه الإصدارات القديمة سيتعطلون.

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

التحقق من صحة مخطط الطلب والاستجابة

يسمح لك تحديد مخططات صارمة لمساراتك بضمان أن هياكل الطلب والاستجابة هي كما هو متوقع. استخدم مكون request-validation للتحقق من الطلبات الواردة ومكون response-rewrite لإعادة كتابة استجابة واجهة برمجة التطبيقات بناءً على شروط معينة.

التسجيل (Logging)

يدعم APISIX العديد من مكونات التسجيل، مثل http-logger، elasticsearch-logger، file-logger، وغيرها. قم بإعداد مسجل لتخزين بيانات طلب واجهة برمجة التطبيقات والاستجابة، وقم بتحليل السجلات بانتظام لاكتشاف التغييرات في رؤوس الطلب/الاستجابة، هياكل الحمولة، أو أي أنماط غير عادية أخرى.

مراقبة المسارات والعقد الخلفية (Upstream)

راقب المسارات التي تمر عبر البوابة. إذا بدأ مسار كان متاحًا سابقًا في إرجاع أخطاء 404، فهذا قد يكون علامة على أن واجهة برمجة التطبيقات قد خضعت لتغيير أو أن نقطة نهاية قد تم إيقافها. قم بتمكين ميزة فحص صحة واجهة برمجة التطبيقات لمراقبة صحة العقد الخلفية بشكل مستمر. إذا بدأت إحدى العقد في الفشل، أو الاستجابة بشكل أسرع أو أبطأ من المعتاد، فقد يشير ذلك إلى تغيير في معالجة الخدمة الخلفية الأساسية. قم بدمج APISIX مع أدوات المراقبة مثل Prometheus باستخدام مكون prometheus. قم بإعداد تنبيهات بناءً على المقاييس، مثل زيادة معدل أخطاء 4xx أو 5xx، والتي قد تشير إلى تغييرات قد تسبب مشاكل في واجهة برمجة التطبيقات الخاصة بك.

استخدام الإصدارات

إصدار واجهة برمجة التطبيقات هو ممارسة إدارة التغييرات في واجهة برمجة التطبيقات وضمان إجراء هذه التغييرات دون تعطيل تطبيقات مستهلكي واجهة برمجة التطبيقات. هناك طرق مختلفة لإعداد الإصدارات مع APISIX، مثل استخدام مسارات URI، معلمات الاستعلام، الرؤوس، أو اختيار نوع المحتوى. على سبيل المثال، قد يكون لديك عناوين ويب مثل /v1/users أو /v2/users لإظهار إصدار واجهة برمجة التطبيقات الخاصة بك. من خلال وجود هذه الإصدارات، يمكنك تقديم أكثر من خيار لواجهة برمجة التطبيقات الخاصة بك، مما يسمح لمستهلكي واجهة برمجة التطبيقات بتحديد وقت الترقية إلى الإصدار الأحدث وفقًا لسرعتهم الخاصة. يمكن لـ APISIX إعادة توجيه كل حركة المرور إلى الإصدار القديم والمستقر من واجهة برمجة التطبيقات حتى تقوم بمعالجة المشاكل في الإصدار الجديد التي تجعل واجهات برمجة التطبيقات الخاصة بك متوافقة مع الإصدارات السابقة. استخدم APISIX للاحتفاظ بالتوافق القديم أثناء طرح التغييرات الجديدة إذا اكتشفت مشاكل في الإصدار الجديد، يسمح مكون traffic-split بالتراجع السريع.

إشعارات الإيقاف (Deprecation Notices)

قبل إزالة أو تعديل الميزات، قم بتمييزها على أنها ميزات سيتم إيقافها، مما يمنح المستهلكين وقتًا كافيًا للتكيف. بمساعدة APISIX، يمكننا تكوين المسار للتواصل حول إيقافه المستقبلي واستبداله. لهذا الغرض، يقدم APISIX مكون response-rewrite.

التكامل مع التحكم في الإصدارات

بينما قد ترغب في أن يكتشف مراجعو طلبات السحب (Pull Request) أي تغييرات قد تسبب مشاكل، فإن الاعتماد فقط على هذه الطريقة ليس مؤكدًا وقد يؤدي إلى الفشل في النهاية. إذا كان لديك وثائق OpenAPI/Swagger لواجهات برمجة التطبيقات الخاصة بك، فيمكن التحكم في إصداراتها وإدراجها في خط أنابيب التكامل المستمر (CI). لا يدعم APISIX التكامل المباشر مع أنظمة التحكم في الإصدارات مثل Git لتغييرات مواصفات واجهة برمجة التطبيقات. ومع ذلك، يمكنك إعداد عملية خارج APISIX. يمكن لأدوات مثل Oasdiff أو Bump تحديد التغييرات في مواصفات واجهة برمجة التطبيقات، وتشغيل خط أنابيب CI (إضافة GitHub Action) الذي يقوم بتشغيل اختبارات ضد نقاط نهاية المسارات في APISIX لضمان عدم إدخال تغييرات قد تسبب مشاكل.

api-breaking-changes-detector-git

طرق أخرى لاكتشاف التغييرات

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

الخلاصة

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

موارد ذات صلة

الحفاظ على صحة واجهات برمجة التطبيقات باستخدام APISIX و Prometheus

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

Tags: