عملية تغيير API؟

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

على سبيل المثال: Recurring events in Upcoming Events calendar fail to handle daylight saving change

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

لذلك، ما أتساءل عنه هو، كمستخدم تابع لـ Discourse، ما هي أفضل طريقة لتحديد تغييرات واجهة برمجة التطبيقات مثل هذه قبل أن تصل إلى مثيلي؟ في السابق، لجأت إلى عكس مستودع discourse-calendar وترقيته بشكل أقل تكرارًا في وقتي الخاص لتجنب هذه المشكلات، والآن بعد أن تم دمجه، قررت التخلي عن هذا النهج وتم لدغ مرة أخرى.

أقدر كل العمل والتحسين الذي يخضع له Discourse باستمرار وأنا بخير إذا كانت الإجابة هي “اشترك في المؤسسات وستحدث هذه الأشياء بشكل أقل تكرارًا”، أو أضف المزيد من الاختبارات من جانبك ولكن أردت أن أرى ما إذا كانت هناك خيارات أو مناهج أخرى لا أعرفها.

شكرا لكم.

4 إعجابات

لقد واجهت نفس النوع من التعطل، لكنني سلكت مسارًا مختلفًا. بدلاً من استهلاك نقاط نهاية واجهة برمجة تطبيقات التقويم مباشرةً، يقوم المستورد الخاص بي بإنشاء BBCode [event] وينشره في Discourse، مما يسمح للمكون الإضافي بتحليله كما لو أن مستخدمًا من الموظفين قد أنشأ الحدث يدويًا. بهذه الطريقة أتجنب الاعتماد على معلمات الاستعلام العابرة مثل include_expired، وأحصل على عقد أكثر استقرارًا - من غير المرجح أن تتغير المشاركات و BBCode العادية دون إشعار.\n\n\n[event start="2025-09-29 09:00" end="2025-10-29 10:00" location="Office B1"]\nMeet to discuss Discourse RESTful API\n[/event]\n\n\nالمقايضة هي المزيد من العمل من جانبي: اضطررت إلى كتابة منسق يحول بيانات ICS إلى علامات [event] مهربة بشكل صحيح، ويتعامل مع الأحداث التي تستمر طوال اليوم مقابل الأحداث المحددة بوقت، وما إلى ذلك. ولكن في الممارسة العملية، كان هذا النهج أكثر مرونة بكثير عبر الترقيات. إنه لا يزيل الحاجة إلى إشعارات الإهمال الأولية (لا يزال بإمكاني أن تفشل واجهات برمجة التطبيقات بسرعة أو على الأقل تحذر عند إزالة الخيارات)، ولكنه قلل من خطر تعطل نصوصي البرمجية بصمت.

4 إعجابات

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

إعجاب واحد (1)