Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   REST request / Type not found (https://www.delphipraxis.net/202183-rest-request-type-not-found.html)

jsp 7. Okt 2019 08:43

REST request / Type not found
 
Guten Morgen!
Irgendwas übersehe ich da, oder mache grundsätzlich was falsch.

ich rufe einen REST-Request mit 'user' und 'passwort' auf, und erhalte folgendes Resultat:

Code:
{
    "payload": {
        "sessiontoken": "85955b90-b134-4c24-822a-28b23c12c57a"
    },
    "error": null,
    "retcode": 0
}
Scheint soweit zu passen. Der Token wird für alle anderen Requests als Authorisierung gebraucht.
Wenn ich nun aber folgende Funktion aufrufe (aus dem Manual):
Code:
      contextDataPositionsForChapter(
        UUID sessionID, /* Session ID */
        Integer chapter, /* Kapitel */
        String language, /* Sprache */
        Integer version, /* Version */
        Integer revision /* Kapitel-Stand */
      ): NPKPositionEcoData
Delphi-Quellcode:
function TfrmECO.contextDataPositionsForChapter(sessionID, chapter, version, revision : string): boolean;
var
  jsValue       : TJSONValue;
  jsRequest     : TJSONObject;
  jsDataStr     : string;

  jsStr : string;

  obj, data     : TJSONObject;
  retcode       : Integer;
  httpRes       : TStream;

begin
  Result := True;

  RESTClient1.BaseURL := 'https://contextdata.crb.ch/ctxdata/rest/1.0/published/eco/contextDataPositionsForChapter';
  RESTClient1.Params.Clear;
  RESTRequest1.ClearBody;

  jsRequest := TJSONObject.Create();

  jsRequest.AddPair(TJSONPair.Create('sessionID', TJSONString.Create(sessionID)));
  jsRequest.AddPair(TJSONPair.Create('chapter', TJSONNumber.Create(chapter)));
  jsRequest.AddPair(TJSONPair.Create('language', 'de'));
  jsRequest.AddPair(TJSONPair.Create('version', TJSONNumber.Create(version)));
  jsRequest.AddPair(TJSONPair.Create('revision', TJSONNumber.Create(revision)));

  RESTRequest1.AddBody(jsRequest);
  jsRequest.Free();

  RESTRequest1.Execute;
  jsValue:=RESTResponse1.JSONValue;

  obj := RESTResponse1.JSONValue as TJSONObject;

  jsStr := PrettyJSON(jsValue.ToString);
  SynEdit1.BeginUpdate;
  SynEdit1.Text := jsStr;
  SynEdit1.EndUpdate;
end;
Bekomme ich folgendes Resultat:
Code:
{
    "payload": null,
    "error": "Type not found",
    "retcode": 100
}
retcode 100
Fehler: der Kontextdaten-Typ wurde nicht gefunden bzw.
entspricht keinem Webservice-Pfad.

Hat jemand eine Idee was ich hier falsch mache?

Gruss, Jörn

DeddyH 7. Okt 2019 09:04

AW: REST request / Type not found
 
Funktioniert es denn, wenn Du die Daten z.B. mit Postman verschickst?

jsp 7. Okt 2019 09:10

AW: REST request / Type not found
 
Danke DeddyH

werde ich mal versuchen. Problem könnte sein, dass das Token als Cookie abgelegt ist, und
nur innerhalb der Session gültig ist.

Jörn

Uwe Raabe 7. Okt 2019 09:19

AW: REST request / Type not found
 
Stimmt denn die Art des Requests (GET/POST)?

jsp 7. Okt 2019 10:02

AW: REST request / Type not found
 
Die Request-Methode ist richtig ...

jsp 7. Okt 2019 10:26

AW: REST request / Type not found
 
Wenn ich mir eine URL zusammenzimmere, und dies in Browser kopiere

https://contextdata.crb.ch/ctxdata/r...a-832613807571

bekomme ich folgendes:

Code:
{
  "error": "Unauthorized",
  "payload": null,
  "retcode": 30
}
was nicht verwunderlich ist, da die sessionID (?a724cbc3-f7f0-4f98-827a-832613807571) im Browser nicht mehr gültig ist.

Was meint ihr zur Idee, es mal mit den Indys/TNetHTTPClient o.ä. zu versuchen?

Gruss, Jörn

Der schöne Günther 7. Okt 2019 10:30

AW: REST request / Type not found
 
Nur als kleiner Tipp: Unter Tools -> REST-Debugger macht so etwas in der Regel mehr Spaß als ständig neu zu kompilieren und "live" in der eigenen .exe zu testen.

jsp 7. Okt 2019 10:39

AW: REST request / Type not found
 
Danke für den Tipp. Habe ich schon rumgespielt.
Bisher habe ich's mit dem RESTDebugger nicht hinbekommen mich einzuloggen.
Die Funktion erwartet als einen der Parameter ein ziemlich umfangreiches xml
Innerhalb Delphi funktioniert dies soweit. Werde mich noch etwas mit dem RESTDebugger beschäftigen...

Gruss, Jörn

jsp 7. Okt 2019 13:37

AW: REST request / Type not found
 
So, die Lösung ist (für mich) gefunden. Mit den ganzen REST-klassen wollte es einfach nicht.
Habe mir nun eine Lösung mit TNetHTTPClient (URL+Query) gebastelt.
Funktioniert wie gewünscht.

Gruss, Jörn

Uwe Raabe 7. Okt 2019 15:02

AW: REST request / Type not found
 
Ich kann in deinem Code nicht sehen, wie der REST-Aufruf das SessionToken mitbekommt. In der Doku zu der API müsste ja irgendwo stehen, wo man das mitgeben muss (vermutlich als Header, aber welcher?). Überhaupt wäre ein Einblick in die API-Dokumentation hier recht hilfreich. Dann klappt das auch mit den REST-Klassen.

Ach ja, die verwendete Delphi-Version wäre auch von Interesse.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz