Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login

    Probleme mit der JSON RPC API - Immer code -32600

    Scheduled Pinned Locked Moved Entwicklung
    11 Posts 3 Posters 864 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P Offline
      Pippo
      last edited by Pippo

      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

      LFischerL 1 Reply Last reply Reply Quote 1
      • LFischerL Offline
        LFischer @Pippo
        last edited by

        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

        P 1 Reply Last reply Reply Quote 3
        • P Offline
          Pippo @LFischer
          last edited by Pippo

          @LFischer

          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,
          Pippo

          EDIT: 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.

          1 Reply Last reply Reply Quote 1
          • P Offline
            Pippo
            last edited by

            Bump 🙂

            Für ein paar gute Tipps / Referenzen bzgl. Troubleshooten wäre ich sehr dankbar!

            Danke und Gruss,
            Pippo

            LFischerL 1 Reply Last reply Reply Quote 1
            • LFischerL Offline
              LFischer @Pippo
              last edited by

              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

              1 Reply Last reply Reply Quote 2
              • N Offline
                n0v0s
                last edited by

                Hallo Pippo,

                ich habe das gleiche Problem :
                [E] Error code: -32600 message: Invalid request : This is not a JSON-RPC. The content-type should be application/json, request method should be "post" and the http body should be a valid json-rpc 2.0 package.

                Leider wird kein Logfile geschrieben.

                Hast Du mittlerweile eine Lösung gefunden?

                Gruß
                Norbert

                P 1 Reply Last reply Reply Quote 1
                • P Offline
                  Pippo @n0v0s
                  last edited by

                  @n0v0s

                  Hallo Norbert,

                  Bin leider auch noch nicht viel weiter gekommen da ich mir erst den Zugriff auf unsere i-doit Umgebung organisieren muss. Dass meine Requests gegenüber der Demo-Umgebung von i-doit ebenfalls mit der gleichen Fehlermeldung abgelehnt werden und bei dir kein Log geschrieben wird, stimmt mich aber nicht zuversichtlich wieviel ich da rausholen werden kann 😕

                  Schlimmstenfalls muss ich kurz was lokales hochfahren und dagegen testen, für das fehlt mir aber im Moment die Zeit. Falls du noch was rausfindest bin ich ganz Ohr!

                  Gruss,
                  Pippo

                  1 Reply Last reply Reply Quote 1
                  • LFischerL Offline
                    LFischer
                    last edited by

                    Hallo zusammen,

                    ich habe noch eine Frage - wie genau schickt ihr eure Requests ab? Wenn man die Requests z.B. über die Konsole (via curl) abschickt kann es sein das die " verloren gehen, sodass aus:

                    {"jsonrpc":"2.0","method":"cmdb.object.create","params":{"type":"C__OBJTYPE__SERVER","title":"My little server","apikey":"api-key"},"id":1}
                    

                    Sowas wird wie:

                    {jsonrpc:2.0,method:cmdb.object.create,params:{type:C__OBJTYPE__SERVER,title:My little server,apikey:api-key},id:1}
                    

                    Und das endet in einer "Syntax error, malformed JSON" Fehlermeldung, die dann wiederum vom System abgefangen und durch "Invalid request : Provided request is not a valid json rpc." ersetzt wird.

                    Habt ihr andere Tools ausprobiert wie z.B. https://www.postman.com/ ?

                    VG Leo

                    P 1 Reply Last reply Reply Quote 0
                    • P Offline
                      Pippo @LFischer
                      last edited by Pippo

                      @LFischer

                      Hallo Leo,

                      Kleines Update von mir: Ursprünglich hatte ich es mit Postman versucht und bin da nicht weitergekommen. Mittlerweile evaluieren wir Alternativen und bin dabei auf Bruno gestossen und siehe da, jetzt funktionierts... sowohl bei eurer Demo-Umgebung als auch bei unserer On-Prem Version.

                      Ich kann mir aber immer noch nicht erklären woran es gelegen ist, vielleicht bist du aber mit deinem Verdacht schon ziemlich nahe. Ich weiss nicht wie Postman das Ganze handelt und ob es dort mit dem Encoding Probleme geben kann. Ich bin mir aber auch ziemlich sicher dass ichs über cURL ebenfalls versucht hatte und die gleiche Fehlermeldung bekommen hatte - vielleicht benutzt Postman(Desktop) cURL im Hintergrund und hat die Zeichen weggestrippt? 🤷

                      Mit Bruno scheint es jetzt bei uns zu laufen - Holz anfassen!

                      Aber vielen Dank fürs weitere Nachforschen!

                      @n0v0s
                      Vielleicht kannst du ja was mit dieser Info anfangen.

                      LFischerL 1 Reply Last reply Reply Quote 0
                      • LFischerL Offline
                        LFischer @Pippo
                        last edited by

                        Hey @Pippo

                        alles klar - merkwürdig... Aber vielleicht ist es tatsächlich so? Ich habe für die nächste API Version eine kleine Änderung vorgesehen, die dann etwas genauer erklärt was nicht stimmt 🙂 Das sollte dann helfen!

                        VG Leo

                        P 1 Reply Last reply Reply Quote 1
                        • P Offline
                          Pippo @LFischer
                          last edited by

                          @LFischer

                          Super Sache, genauere Fehlermeldungen sind natürlich immer gerne gesehen!

                          Danke nochmals fürs Helfen.

                          Grüsse,
                          Pippo

                          1 Reply Last reply Reply Quote 0
                          • MartinVM MartinV referenced this topic on
                          • First post
                            Last post