`DataExplorer::ValidationError: معامل مفقود` عند تشغيل استعلامات Data Explorer مع `[params]` عبر API

يوجد خطأ في واجهة برمجة تطبيقات Discourse عند تشغيل استعلامات مستكشف البيانات التي تحتوي على معلمات (تعمل الاستعلامات التالية كما هو متوقع عند تشغيلها من المتصفح).

باتباع التعليمات من Run Data Explorer queries with the Discourse API واستخدام

-F 'params={\"group_id\":\"64\"}'

لتشغيل هذا الاستعلام (الذي يحتوي على معلمة بدون تعيين قيمتها الافتراضية)

-- [params]
-- int :group_id
select id, name from groups
where id = :group_id

ينتج عنه خطأ: {\"success\":false,\"errors\":[\"DataExplorer::ValidationError: Missing parameter group_id of type int\"]}

عندما يحتوي الاستعلام على معلمة مع تعيين قيمتها الافتراضية، يكون استدعاء واجهة برمجة التطبيقات ناجحًا، ولكن النتيجة هي نفسها بغض النظر عن القيمة المقدمة عبر -F 'params=

-- [params]
-- int :group_id = 2
select id, name from groups
where id = :group_id
-F 'params={\"group_id\":\"64\"}'

وتعيد دائمًا نتيجة القيمة الافتراضية للمعلمة: {\"success\":true,\"errors\":[],\"duration\":0.2,\"result_count\":1,\"params\":{},\"columns\":[\"id\",\"name\"],\"default_limit\":1000,\"relations\":{},\"colrender\":{},\"rows\":[[2,\"moderators\"]]}

ما هو الأمر الكامل الذي تستخدمه؟
هل تقوم بتوفير -X POST وجميع رؤوس الطلب المطلوبة؟

يستخدم المتصفح واجهة برمجة التطبيقات (API). من غير المحتمل أن تصف موقفًا كبيرًا إذا كان الخطاب.

الأمر الموجود في How to run Data Explorer queries with the Discourse API مكتمل مع -X POST وجميع رؤوس (headers) المطلوبة.

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

جاي، أنا لا أفهم معنى هذه الجملة. هل حاولت بأي فرصة إعادة إنتاج المشكلة باستخدام الأمثلة المصغرة المقدمة في المنشور الأصلي؟


@michaeld، @pfaffman
أنا أتردد في كتابة هذا الجزء، بشكل أساسي لأنني معجب وأحترم تفانيكم وخبرتكم في تقديم الدعم المجاني للمجتمع، وأعلم أنني استفدت من رؤاكم في مناسبات عديدة من قبل. ولكن هذه المرة لدي شعور بأن أياً منكما لم يقرأ ما بعد السطور القليلة الأولى من التقرير (أنا حريص جدًا على البحث والاختبار بدقة قبل النشر في فئة الدعم، وأحاول دائمًا تضمين خطوات إعادة إنتاج مفصلة).

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

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

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

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

  1. أنت في الواقع لم تقدم خطوات إعادة إنتاج كاملة ومفصلة لأنك لم تقم بتضمين سطر الأوامر بأكمله.

  2. حقيقة أنك تحصل على مخرجات فقط عند تعيين قيمة افتراضية للمعلمة تقودني إلى الاعتقاد بأن Discourse لا يرى اسم المعلمة/قيمة المعلمة الخاصة بك.

الاستنتاج بأن سطر الأوامر الخاص بك يجب أن يكون صحيحًا لأنه تحصل على مخرجات هو استنتاج خاطئ - ويتجاهل حقيقة أنك لا تحصل على المخرجات المرتبطة بالمعلمة التي قدمتها ولكن بالقيم الافتراضية الخاصة بها.

  1. لقد حاولت - ولا يمكنني - إعادة إنتاج هذه المشكلة.
curl -X POST "https://REDACTED/admin/plugins/explorer/queries/2/run" -H "Content-Type: multipart/form-data;" -H "Api-Key: REDACTED" -H "Api-Username: system" -F 'params={"group_id":"1"}'

{"success":true,"errors":[],"duration":0.3,"result_count":1,"params":{"group_id":"1"},"columns":["id","name"],"default_limit":1000,"relations":{},"colrender":{},"rows":[[1,"admins"]]}

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

ارتكاب خطأ إملائي أو خطأ ليس مقتصرًا على المستخدمين عديمي الخبرة. أنا أرتكب أخطاء تافهة كل يوم.

3 إعجابات

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

آمل أن تظل مستعدًا لتحملي: لقد استخدمت نفس أمر curl الذي استخدمته (لقد نسخته بالفعل هذه المرة، فقط للتأكد بنسبة 100٪)، وكانت النتيجة كالتالي:

{"success":true,"errors":[],"duration":0.2,"result_count":1,"params":{},"columns":["id","name"],"default_limit":1000,"relations":{},"colrender":{},"rows":[[2,"moderators"]]}

وبمقارنته بما لديك:

{"success":true,"errors":[],"duration":0.3,"result_count":1,"params":{"group_id":"1"},"columns":["id","name"],"default_limit":1000,"relations":{},"colrender":{},"rows":[[1,"admins"]]}

تظهر المشكلة فورًا: params":{} مقابل "params":{"group_id":"1"} في الإخراج، مما يجعل تحليلك صحيحًا: خادمي لا يرى/يعالج -F 'params={\"group_id\":\"1\"}' بشكل صحيح.

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

الخادم على أحدث إصدار. ما الذي تعتقد أنه قد يكون المشكلة؟

[تعديل]: جربت هذا على خادم تثبيت مستقل آخر بنفس المواصفات 2.9.0.beta3 (8040b95e8c) مع نفس المشكلة. الخادم الأول على 2.9.0.beta3 (0f7b9878ff)

ما لم يكن هذا مشكلة غريبة في curl، فأنا في حيرة من أمري.

curl 7.79.1 (Windows) libcurl/7.79.1 Schannel
Release-Date: 2021-09-22
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets
إعجابَين (2)

لا يفهم نظام Windows تلك علامات الاقتباس المفردة. لذلك، سيتعين عليك استخدام علامات الاقتباس المزدوجة العادية وتهريبها باستخدام الشرطات المائلة العكسية.

استخدم هذا:

-F params={"group_id":"1"}

(لا تقم بالنسخ واللصق لأن نظام iOS أفسد علامات الاقتباس)

3 إعجابات

حسنًا، أشعر وكأنني أحمق الآن :rofl:

شكرًا مايكل، أنت تستحق لقبك حقًا! لن أشك فيك بعد الآن.

4 إعجابات

لم أفعل. إذا كنت تقول إن المنشور الأصلي خاطئ، فإن تعليقي غير مفيد. آسف لذلك.

أوه، والآن أرى رد مايكل. بالفعل، الحصول على الاقتباسات وعلامات الهروب بشكل صحيح أصعب بمليون مرة مما قد يعتقده المرء.

إعجابَين (2)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.