هذا دليل يشرح كيفية جلب جميع المنشورات من موضوع معين باستخدام واجهة برمجة تطبيقات Discourse
النتائج التي تُرجعها واجهة برمجة تطبيقات Discourse للعديد من المسارات تكون مقسمة إلى صفحات.
على سبيل المثال، نقطة نهاية واجهة برمجة التطبيقات الخاصة بـ “الحصول على موضوع واحد” - مثل: https://examplesite/t/{id}.json ستُرجع افتراضيًا 20 منشورًا فقط، حتى لو كان الموضوع يحتوي على أكثر من 20 منشورًا.
بسبب هذا السلوك، هناك طريقتان يمكنك من خلالهما استخدام واجهة برمجة تطبيقات Discourse لجلب جميع منشورات موضوع معين باستخدام نقطة النهاية .../t/{id}.json.
إضافة معامل استعلام
أسهل طريقة لجلب جميع منشورات موضوع معين هي إضافة معامل استعلام print=true إلى عنوان URL الذي ترسل إليه الطلب.
مثال: https://examplesite/t/{id}.json?print=true
عند إضافة معامل الاستعلام print=true، يقوم Discourse بتعيين chunk_size لعدد المنشورات المُرجعة إلى 1000. وهذا يعني أن هذه طريقة جيدة للاستخدام طالما أنك متأكد من أن مواضيعك لا تحتوي على أكثر من 1000 منشور.
طلبات واجهة برمجة تطبيقات متعددة
الطريقة الأخرى لجلب جميع المنشورات هي إجراء عدة طلبات لواجهة برمجة التطبيقات للحصول على جميع منشورات الموضوع:
-
أولاً، قم بإجراء طلب
GETأولي إلى نقطة النهاية.../t/{id}.json. سيحتوي هذا الطلب على كائنposts_streamيحتوي على مصفوفةpostsومصفوفةstream. ستُعطيك مصفوفةpostsأول 20 منشورًا. -
الآن تحتاج إلى التكرار عبر مصفوفة
streamالتي تمنحك جميع معرفات المنشورات في الموضوع. احذف أول 20 معرف منشور من المصفوفةstream(وإلا فإنك تقوم بإعادة تحميلها دون داعٍ). -
بعد ذلك، يمكنك إجراء طلبات إضافية إلى نقطة النهاية
الحصول على منشورات محددة من موضوع.../t/{id}/posts.json، وإضافةpost_ids[]، وإرسال جميع المعرفات من مصفوفةstreamعلى دفعات من 20. مثال:
.../t/{id}/posts.json?post_ids[]=46&post_ids[]=47&post_ids[]=48&post_ids[]=49&post_ids[]=50&post_ids[]=51&post_ids[]=52&post_ids[]=53&post_ids[]=54&post_ids[]=55&post_ids[]=56&post_ids[]=57&post_ids[]=58&post_ids[]=59&post_ids[]=60&post_ids[]=61&post_ids[]=62&post_ids[]=63&post_ids[]=64&post_ids[]=65
حدود المعدل
إذا واجهت رسالة خطأ Error: you have performed this action many times, please try again later عند إجراء عدة مكالمات لواجهة برمجة التطبيقات، فهذا يشير إلى أنك وصلت إلى حدود معدل مفتاح واجهة برمجة التطبيقات.
يحتوي Discourse على حد لعدد طلبات print=true التي يمكن إجراؤها في الساعة، ويتم التحكم فيه عبر إعداد الموقع max prints per hour per user. يكون هذا الإعداد مضبوطًا افتراضيًا للسماح للمستخدمين بطباعة 5 مواضيع فقط في الساعة. إذا قمت بتعيينه إلى 0، سيتم تعطيل الطباعة بالكامل (ستُرجع الطلبات التي تحتوي على print=true خطأ 403).
لاحظ أن حد المعدل لن يُطبق إذا كان المستخدم الذي يقوم بالطلب هو مسؤول. وهذا يعني أنه يمكنك استخدام مفتاح واجهة برمجة تطبيقات مع اسم مستخدم مسؤول (مثل system) لمعامل Api-Username في الطلب لتجاوز حد معدل الطباعة.
إذا كنت تواجه أخطاء تتعلق بحدود المعدل مع طلبات واجهة برمجة التطبيقات التي لا تحتوي على print=true، فإننا نوصي بإضافة مهلة زمنية (timeout) إلى سكريبت واجهة برمجة التطبيقات الخاص بك حتى لا تتجاوز حدود المعدل. وبديلًا عن ذلك، يمكنك الاستماع إلى أكواد الأخطاء 429 (طلبات كثيرة جدًا) والتوقف المؤقت عن إرسال الطلبات عند استلام هذه الاستجابة.
للمرجعية، تنطبق حدود المعدل الافتراضية المدرجة أدناه على خطط الاستضافة القياسية والتجارية لدينا:
للاستضافة الذاتية فقط - راجع: Available settings for global rate limits and throttling للحصول على تفاصيل حول ضبط حدود معدل واجهة برمجة تطبيقات Discourse.
