خطأ عند محاولة تحديث قائمة المراقبة لمجموعة عبر API (PUT groups/{id}.json)

الأولوية/الخطورة:

متوسطة إلى عالية

المنصة:

سكريبت بايثون بالإضافة إلى أمر سطر الأوامر cURL

إصدار خادم Discourse:

3.6.0.beta3-latest (6adb4f8e84)

الوصف:

عند محاولة تحديث watching_category_ids لمجموعة موجودة، يُبلغ سكريبت بايثون الخاص بي (الذي يستخدم “requests.put” البسيط) عن الخطأ التالي:

_doPut> ERROR from request: 422 Unprocessable Entity {'user_count': 2, 'errors': ['You supplied invalid parameters to the request: update_existing_users']}

على الرغم من عدم وجود أي معامل يسمى update_existing_users في بيانات json الخاصة بي.

باستخدام cURL للتحقق عبر:

curl -k -L -X PUT -H 'api-key:xyz’ \
   -H 'api-username:system'  \
   -H 'Accept:application/json;charset=utf-8'  \
   -H 'Content-Type:application/json'   \
   --data '{\"group\":{\"name\":\"eb-chair-exo\",\"watching_category_ids\":[336,337]}}' \
   https://cms-phys-talk.web.cern.ch/groups/46.json

أحصل على نفس الخطأ:

{“user_count”:2,“errors”:[“You supplied invalid parameters to the request: update_existing_users”]}%

خطوات الاستنساخ:

curl -k -L -X PUT -H 'api-key:xyz’ \
   -H 'api-username:system'  \
   -H 'Accept:application/json;charset=utf-8'  \
   -H 'Content-Type:application/json'   \
   --data '{\"group\":{\"name\":\"eb-chair-exo\",\"watching_category_ids\":[336,337]}}' \
   https://cms-phys-talk.web.cern.ch/groups/46.json

تعديل: تمت إضافة إصدار خادم Discourse

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

لهذا السبب ترى “{ 'user_count': 2, ... }” في الاستجابة من الخادم.

لقد أوضحت رسالة الخطأ لجعلها منطقية أكثر، كما قمت بتحسين كود الواجهة الأمامية للتعامل بشكل أفضل مع “حالة الاستخدام” هذه بالإضافة إلى إضافة مواصفات (specs).

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

مرحباً - وشكراً على الإجراء السريع! :slight_smile:

للأسف ما زلت مرتبكاً: أحتاج إلى تعيين القيمة لـ watching_category_ids لمجموعة معينة، وعلى الرغم من أن رسالة الخطأ قد تغيرت الآن، إلا أنها لا تزال خطأ 422. فكيف يمكنني تحديث المجموعة بالقائمة الجديدة لـ watching_category_ids عبر برنامج نصي باستخدام واجهة برمجة تطبيقات REST؟

لقد حاولت بالفعل إضافة "update_existing_users”=True في بيانات json الخاصة باستدعاء PUT، وكان الخطأ هو نفسه الذي تم الإبلاغ عنه. :frowning:

شكراً مرة أخرى،

مع خالص تحياتي، أندرياس

إنه يتوقع السلسلة النصية “true” - بأحرف صغيرة.

شكراً جزيلاً لك، @zogstrip! يعمل الآن! :smiley:

(وللمرجع فقط، يجب أن تكون \"update_existing_users”=True خارج/موازية لعنصر “group” في ملف json المرسل (معروض هنا بصيغة بايثون، لذا يتم ترجمة True إلى السلسلة النصية “true”):

            jsonData={
                "group": {
                    "name": f"{groupName}",
                    "watching_category_ids": newWatchList,
                },
                "update_existing_users": True,
            },

تم إغلاق هذا الموضوع تلقائيًا بعد 20 ساعة. لم يعد الرد مسموحًا به.