تمرير المعلمات إلى Data Explorer باستخدام API يتطلب إحاطة القيمة بين أقواس

مرجع: Run Data Explorer queries with the Discourse API

عند تمرير المعلمات إلى استعلام SQL باستخدام واجهة برمجة التطبيقات (API)، يتطلب Discourse حاليًا تغليف جميع القيم باستخدام علامات الاقتباس المزدوجة، بما في ذلك الأعداد الصحيحة، التي لا يتم تغليفها افتراضيًا في بعض الأنظمة (مثل json_encode في PHP). بالنظر إلى JSON RFC، لا يوجد شرط لاستخدام علامات الاقتباس المزدوجة للأعداد الصحيحة. هذا المطلب يتعارض أيضًا مع فلسفة “كن متسامحًا فيما تقبله…”

كيفية التكرار؟

-F 'params={\"user_id\":2}'

يعيد الخادم خطأ 500 Internal Server Error.

في سجلات الأخطاء، يظهر هذا:

NoMethodError (undefined method `downcase' for 2:Integer)
app/controllers/application_controller.rb:424:in `block in with_resolved_locale'
app/controllers/application_controller.rb:424:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in `call_app'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/missing_avatars.rb:22:in `call'
lib/middleware/turbo_dev.rb:31:in `call'
lib/middleware/processing_request.rb:12:in `call'

Backtrace

plugins/discourse-data-explorer/lib/discourse_data_explorer/parameter.rb:121:in `cast_to_ruby'
...

هذا التنسيق يعمل بشكل صحيح:

-F 'params={\"user_id\":\"2\"}'

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

3 إعجابات

أنت منقذ. لقد أضعت للتو أكثر من 3 ساعات من حياتي في التعامل مع هذا.\n\nهل تعرف كيف يمكنني التعامل مع هذا في حمولة JSON إذا قمت بإجراء مكالمة POST مع محتوى application/json إلى نقطة النهاية run؟\n\nأم يجب أن أذهب مع curl؟

لم تشارك أي تفاصيل حول النظام الأساسي الذي تستخدمه، لذا بشكل عام:

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

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

أقدر ردك حقًا وأعتذر عن عدم تقديم معلومات كافية.

أنا أستخدم حزم json و request الخاصة ببايثون ولم أتمكن من معرفة كيفية فرض علامات الاقتباس المزدوجة.

لذلك استخدمت في النهاية أمر curl الخاص بك واستدعيته عبر subprocess الخاص ببايثون.

شكرًا جزيلاً مرة أخرى!

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