Referencia: Run Data Explorer queries with the Discourse API
Al pasar parámetros a una consulta SQL usando la API, Discourse actualmente requiere que todos los valores estén encapsulados con comillas dobles, incluidos los enteros, que no están encapsulados por defecto en algunos sistemas (específicamente json_encode de PHP). Si observamos la JSON RFC, no hay ningún requisito para usar comillas dobles para los enteros. Este requisito también va en contra de la filosofía de “ser tolerante en lo que se acepta…”
¿Cómo reproducirlo?
-F 'params={\"user_id\":2}'
El servidor devuelve un error interno del servidor 500.
En los registros de errores, esto se muestra:
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'
...
Este formato funciona correctamente:
-F 'params={\"user_id\":\"2\"}'
Comparto esto no porque sea quisquilloso, sino para ahorrar tiempo a cualquiera que pueda encontrar un problema similar al mío. Me tomó un tiempo darme cuenta de lo que estaba causando el problema.