![]() |
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:
Scheint soweit zu passen. Der Token wird für alle anderen Requests als Authorisierung gebraucht.
{
"payload": { "sessiontoken": "85955b90-b134-4c24-822a-28b23c12c57a" }, "error": null, "retcode": 0 } 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:
Bekomme ich folgendes Resultat:
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;
Code:
retcode 100
{
"payload": null, "error": "Type not found", "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 |
AW: REST request / Type not found
Funktioniert es denn, wenn Du die Daten z.B. mit
![]() |
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 |
AW: REST request / Type not found
Stimmt denn die Art des Requests (GET/POST)?
|
AW: REST request / Type not found
Die Request-Methode ist richtig ...
|
AW: REST request / Type not found
Wenn ich mir eine URL zusammenzimmere, und dies in Browser kopiere
![]() bekomme ich folgendes:
Code:
was nicht verwunderlich ist, da die sessionID (?a724cbc3-f7f0-4f98-827a-832613807571) im Browser nicht mehr gültig ist.
{
"error": "Unauthorized", "payload": null, "retcode": 30 } Was meint ihr zur Idee, es mal mit den Indys/TNetHTTPClient o.ä. zu versuchen? Gruss, Jörn |
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.
|
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 |
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 |
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. |
AW: REST request / Type not found
Hallo Uwe
der SessionToken soll laut Doku als Query übergeben werden. Habe ich auch versucht, bin aber gescheitert. Ich benutze 10.3.1 (werde mal mein Profil anpassen...) Was ist an meiner Lösung mittels TNetHTTPClient falsch? Jörn |
AW: REST request / Type not found
Zitat:
Wie sieht denn die komplette URL bei der Lösung mit TNetHTTPCLient aus? Zitat:
|
AW: REST request / Type not found
Danke für die bisherige Hilfe Uwe
die url sieht so aus:
Delphi-Quellcode:
Ich werde mal vorerst bei meiner Lösung bleiben, und mich, wenn etwas mehr Luft ist, mich mal in REST einarbeiten.
urlStr := 'https://contextdata.crb.ch/ctxdata/rest/1.0/published/eco/contextDataPositionsForChapter/chapters/'+chapter+'/languages/de/versions/'+version+'/revisions/'+revision+'?sessiontoken='+sessionID;
Fundiertes Grundwissen ist besser als grundiertes Fundwissen :roll: Gruss, Jörn |
AW: REST request / Type not found
Das sollte dann ungefähr so aussehen:
Delphi-Quellcode:
RESTClient1.BaseURL := 'https://contextdata.crb.ch/ctxdata/rest/1.0/published/eco/';
RESTRequest1.Resource := 'contextDataPositionsForChapter/chapters/{chapter}/languages/de/versions/{version}/revisions/{revision}'; RESTRequest1.AddParameter('chapter', chapter, pkURLSEGMENT); RESTRequest1.AddParameter('version', version, pkURLSEGMENT); RESTRequest1.AddParameter('revision', revision, pkURLSEGMENT); RESTRequest1.AddParameter('sessiontoken', sessionID, pkQUERY); RESTRequest1.Execute; |
AW: REST request / Type not found
Danke Uwe
dein Snippet wird mir sicherlich auf die Sprünge helfen :bounce2: Werde ich testen. Das mit den curly brackets innerhalb der Resource war mir nicht bekannt/bewusst. Wie gesagt, ich muss mich da erst reinfuchsen. Nochmals Danke! Jörn |
AW: REST request / Type not found
Nachtrag...
hat wunderbar funktioniert :-D Nochmals herzlichen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz