Probleme mit der JSON RPC API - Immer code -32600
-
Guten Tag zusammen,
Ich habe momentan den Auftrag über die jRPC-Schnittstelle von i-doit Objekte und Reports abzufragen und für die Weiterverarbeitung zugänglich zu machen. Gemäß eurer Doku sollte das ja denkbar einfach sein - Das API Addon installieren, API-Key definieren und anschließend die richtigen Requests absetzen.
Ich bekomme jedoch ausschließlich diesen Fehler, egal was ich mache:
{ "id": null, "jsonrpc": "2.0", "error": { "code": -32600, "message": "Invalid request : Provided request is not a valid json rpc.", "data": null } }
Nachdem ich bei unserer internen i-doit Instanz nicht weiter gekommen bin, dachte ich mir es mal gegen eure Demo-Umgebung zu versuchen mit folgendem Payload:
{ "version": "2.0", "method": "idoit.version", "params": { "apikey": "c1ia5q", "language": "en" }, "id": 1 }
Gleiches Ergebnis! Was mache ich falsch und wie troublehoote ich das Problem am Besten?
Danke euch,
Pippo -
Hallo @Pippo
ein valider JSON RPC Request hat ein paar Voraussetzungen, unter anderem:
- Es muss sich um einen POST Request handeln
- Der "Content-Type" muss "application/json" lauten
- Bei den übergebenen Daten muss es sich um valides JSON handeln (das muss im Request Body stehen)
In unserem PHP API Client (siehe hier: https://packagist.org/packages/idoit/apiclient#dev-main ) kannst du dir die Header Daten ausgeben lassen. Diese lauten bei mir z.B.
POST /idoit/src/jsonrpc.php HTTP/1.1 Host: localhost User-Agent: idoit/apiclient 0.11-dev Accept: */* Accept-Encoding: application/json Content-Type: application/json X-RPC-Auth-Username: admin X-RPC-Auth-Password: admin Content-Length: 90
(
X-RPC-Auth-*
Header sind nur notwendig, wenn man sich mit einem User anmelden möchte)Viele Grüße
Leo -
Hallo Leo,
Danke dir für deine Antwort.
Deine genannten Punkte sollten alle erfüllt sein:
- Request-Methode ist POST
- Content-Type ist ebenfalls "application/json"
- Der Body den ich oben gepostet habe kommt aus eurer Dokumentation, ich habe ihn aber zur Sicherheit ebenfalls noch validiert und er scheint so korrekt. Deswegen auch meine Fragezeichen bezüglich der Fehlermeldung.
Dein Header-Beispiel hilft hier aber sicher schonmal weiter, ich versuche mal unsere Headers entsprechend anzupassen.
Viele Grüsse,
PippoEDIT: Habe es gerade nochmal versucht und mit den Headers rumgespielt, gleiches Ergebnis
Aufgefallen ist mir noch dass gemäß der Spezifikation nicht "version" sondern "jsonrpc" im Request zwingend notwendig sein soll - aber auch mit dieser Anpassungen stecke ich nach wie vor fest.
-
Bump
Für ein paar gute Tipps / Referenzen bzgl. Troubleshooten wäre ich sehr dankbar!
Danke und Gruss,
Pippo -
Hey @Pippo
ich habe noch mal im Code nachgesehen - die Meldung "Provided request is not a valid json rpc" wird nur in zwei Situationen ausgegeben:
- Wenn der übergebene Request kein "valides" JSON beinhaltet bzw. nicht aus dem Request-Body heraus dekodiert werden konnte (siehe JSON lint)
- Wenn das dekodierte JSON kein Array ist
Ich denke den zweiten Fall können wir ausschließen, denn dein gegebener Payload ist sowohl valides JSON als auch ein Array. Es kann also eigentlich nur noch der Fall sein, das dieses nicht als Request Body übergeben wird
Hast du mal im i-doit den API Log auf "debug" geschaltet und nach dem Request geschaut was im
{i-doit}/log
Verzeichnis geschrieben wird?Viele Grüße
Leo