Übergabe von Parametern an Data Explorer über API erfordert das Einschließen eines Werts

Referenz: Run Data Explorer queries with the Discourse API

Wenn Parameter über die API an eine SQL-Abfrage übergeben werden, verlangt Discourse derzeit, dass alle Werte in doppelte Anführungszeichen eingeschlossen werden, einschließlich Ganzzahlen, die auf einigen Systemen (namentlich PHP’s json_encode) standardmäßig nicht eingeschlossen werden. Wenn man sich die JSON RFC ansieht, gibt es keine Anforderung, doppelte Anführungszeichen für Ganzzahlen zu verwenden. Diese Anforderung widerspricht auch der Philosophie “Sei tolerant in dem, was du akzeptierst…”

Wie kann man das reproduzieren?

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

Der Server gibt einen 500 Internal Server Error zurück.

In den Fehlerprotokollen wird Folgendes angezeigt:

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'
...

Dieses Format funktioniert korrekt:

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

Ich teile dies nicht, weil ich kleinlich bin, sondern um Zeit für jeden zu sparen, der auf ein ähnliches Problem stößt, wie ich es getan habe. Es hat eine Weile gedauert, bis ich herausgefunden habe, was das Problem verursacht hat.

3 „Gefällt mir“

Du bist ein Lebensretter. Ich habe gerade über 3 Stunden meines Lebens damit verschwendet, mich damit auseinanderzusetzen.

Weißt du, wie ich das in einer JSON-Nutzlast handhaben kann, wenn ich einen POST-Aufruf mit application/json-Inhalt an den Run-Endpunkt mache?

Oder muss ich mit curl weitermachen?

Sie haben keine Details zu der von Ihnen verwendeten Plattform angegeben, daher allgemein:

Das hängt von der Bibliothek ab, die Sie für die Durchführung der POST-HTTP-Anfrage verwenden. Wenn die Bibliothek es Ihnen nicht erlaubt, die Ganzzahl in doppelte Anführungszeichen zu setzen, müssen Sie möglicherweise entweder eine Problemumgehung finden, indem Sie die POST-Anfrage auf einer niedrigeren Ebene manuell erstellen, oder zu einer anderen Bibliothek wechseln, die diese Funktionalität unterstützt.

1 „Gefällt mir“

Ich weiß deine Antwort wirklich zu schätzen und entschuldige mich dafür, nicht genügend Informationen bereitgestellt zu haben.

Ich benutze die Python-Pakete json und request und konnte nicht herausfinden, wie ich die doppelten Anführungszeichen erzwingen kann.

Ich habe schließlich deinen Curl-Befehl verwendet und ihn über Python subprocess aufgerufen.

Nochmals vielen Dank!

1 „Gefällt mir“