يسعدني أن أشارككم fluent-discourse، وهي حزمة بايثون جديدة لاستهلاك واجهة برمجة تطبيقات Discourse.
توجد بالفعل بضع حزم أخرى لاستهلاك واجهة برمجة تطبيقات Discourse عبر بايثون. إذن، لماذا نبني حزمة أخرى؟
تميل الحزم الأخرى المتاحة لـ Discourse إلى معالجة المشكلة بطريقة متشابهة — إنشاء دالة بايثون فريدة لكل نقطة نهاية (endpoint) في الواجهة.
لكن هذا الأسلوب يحمل بعض العيوب:
- من الصعب جدًا تحقيق تكافؤ كامل في الميزات مع الواجهة. فواجهة برمجة تطبيقات Discourse غير موثقة بشكل كافٍ في بعض الأحيان، وغالبًا ما تحتاج إلى عكس هندسة نقاط النهاية. علاوة على ذلك، توجد العديد من الإضافات التي تعرض نقاط نهاية للواجهة لا تعد جزءًا من النواة الأساسية. وهذا يضع مستخدم المكتبة أمام خيار صعب: إما تقديم طلبات دمج (pull requests) لإضافة النقاط التي يحتاجها إلى المكتبة، أو بناء حل مخصص للنقاط الإضافية.
- يجب عليك تعلم واجهة برمجة تطبيقات أخرى. فبالإضافة إلى تعلم الدوال ونقاط نهاية واجهة برمجة تطبيقات Discourse، يجب عليك معرفة استدعاء الدالة المطابق في بايثون.
- هناك الكثير من الكود الذي يحتاج إلى اختبار، مما يجعل تحقيق تغطية اختبار بنسبة 100% أمرًا أصعب. وبالتالي، تقل الثقة في جودة البرمجيات المنتجة.
على النقيض من هذا الأسلوب، استخدمتُ واجهة “تدفق” (fluent interface)، حيث يمكنك استخدام ربط الدوال (method chaining) لبناء الطلبات. لنأخذ مثالًا.
للحصول على أحدث المواضيع في فئة معينة اسمها ‘foo’ ومعرفها 5، تستخدم نقطة النهاية هذه:
GET /c/foo/5.json.
ولإجراء هذا الطلب باستخدام هذه المكتبة، ما عليك سوى استدعاء:
client.c.foo[5].json.get()
يمكنك ملاحظة وجود تكافؤ دلالي بين نقطة نهاية الواجهة والاستدعاء المقابل في بايثون.
ويتميز هذا الأسلوب بما يلي:
- يحقق تكافؤًا كاملًا في الميزات مع واجهة برمجة تطبيقات Discourse من البداية، بما في ذلك النقاط غير الموثقة، ونقاط نهاية الإضافات، والنقاط التي لم تُعرّف بعد (مستقبلي الصلاحية).
- لا تحتاج إلا إلى تعلم واجهة برمجة تطبيقات Discourse. فمن السهل ترجمة أي استدعاء للواجهة بهذه الطريقة، وبالتالي لا تحتاج إلى البحث عن الدالة المطابقة له.
- يتكون كل المكتبة من حوالي 150 سطرًا من الكود فقط. وهذا يجعل تحقيق تغطية اختبار بنسبة 100% أمرًا تافهًا.
توجد تغطية اختبار بنسبة 100% مع عدد قليل من اختبارات التكامل ضد خادم Discourse نشط.
إذا بدا هذا جذابًا لك، آمل أن تجرب هذه الحزمة!