Beispiel RestAPI
Re: Beispiel RestAPI
Da gibt es eine exeption. Die Meldung innerhalb der IDE ist im Anhang.
Wenn das Programm "nomal", also mit DoppleKlick auf die EXE gestartet wird, ist "Access violation" angezeigt.
Wenn das Programm "nomal", also mit DoppleKlick auf die EXE gestartet wird, ist "Access violation" angezeigt.
- Dateianhänge
-
- exeption01.jpg (12.06 KiB) 8572 mal betrachtet
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Beispiel RestAPI
Ja hab grad mal nachgeschaut, hab mich vertan, man muss selbst eine Stream klasse bereitstellen. Die angepasste version wäre also:epos hat geschrieben:Da gibt es eine exeption. Die Meldung innerhalb der IDE ist im Anhang.
Wenn das Programm "nomal", also mit DoppleKlick auf die EXE gestartet wird, ist "Access violation" angezeigt.
Code: Alles auswählen
type
ELoginFailedException = class(Exception);
[...]
function Login(User: String; Pass: String): String;
var client: TFPHTTPClient;
json: string;
Req: TStringStream;
begin
json := '{"username": "%s", "password": "%s"}'.Format([User, Pass]);
client := TFPHTTPClient.Create(nil);
Req := TStringStream.Create(json);
try
client.AddHeader('Content-Type', 'application/json');
client.RequestBody := Req;
Result := client.Post('https://api.xxxxx.de/api/v2/login');
if client.ResponseStatusCode <> 200 then
raise ELoginFailedException.Create('Wrong login data')
finally
client.Free;
Req.Free;
end;
end;
Re: Beispiel RestAPI
Vielen Dank warf.
Es klappt. Ich erhalte ein Access-Token.
Es klappt. Ich erhalte ein Access-Token.
Re: Beispiel RestAPI
Hallo zusammen ich habe da noch Verständnisprobleme und komme nicht weiter. Vielleicht habt ihr einige Codebeispiele.
Die Abmeldung
Der mit dem Request übergebene Access-Token wird vom System abgemeldet.
URL: https://api.xxxxx.de/api/v2/logout
Es werden wohl keine Daten oder das Access-Token übergeben und es erfolgt keine Rückmeldung.
Und dann der Zugang zur Abfrage. Muss jedes Mal vorher das Access-Token gesendet werden?
Bei allen Requests, mit Ausnahme des Login, wird der Zugang über den Access-Token authentifiziert, der auf zwei Wegen übergeben werden kann:
Erster Weg HTTP Authorization Header mit Wert “Bearer“ gefolgt vom Access-Token:
https://api.xxxxx.de/api/v2/product/29e ... 48c75af64f
Antwort Header
Connection close
Content-Type Application/json; charset=UTF-8
Date xxx yyyy zzz usw
Transfer encoding chunked
Anfrage Header
Accept application/jsonm text/javascript, */’; q=0.01
Accept –Encoding gzip, deflate
Accepz-Language de, en-US;q=0.7, en;q=0.3
Autorisation Bearer 123avf67-3355-6421-usw
Zweiter Weg URL Parameter access_token:
https://api.xxxxx.de/api/v2/logout?acce ... fe7700bd79
Bei nicht erfolgreicher Authentifizierung wird ein http-Statuscode 401 im JSON-Format zurückgegeben:
{
"error": "invalid_token",
"error_description": "Invalid access token: 98592fc6-61e6-4ed2-8f9e-f3fe7700bd79"
}
Und dann ist da die Abfrage an die URL.
URL: https://api.xxxxx.de/api/v2/products?pa ... D<size>%26[sort%3D<column>%26direction%3D<direction>][%26search%3D<value>][%26active%3D<active>][&26source%3D<source>]
Protokoll: HTTPS
Method: POST
Authentifizierung erforderlich: Ja
Wie erhalte ich die Ergebnisse der Abfrage?
Die Kommunikation mit der Schnittstelle ist mir noch nicht klar.
Die Abmeldung
Der mit dem Request übergebene Access-Token wird vom System abgemeldet.
URL: https://api.xxxxx.de/api/v2/logout
Es werden wohl keine Daten oder das Access-Token übergeben und es erfolgt keine Rückmeldung.
Und dann der Zugang zur Abfrage. Muss jedes Mal vorher das Access-Token gesendet werden?
Bei allen Requests, mit Ausnahme des Login, wird der Zugang über den Access-Token authentifiziert, der auf zwei Wegen übergeben werden kann:
Erster Weg HTTP Authorization Header mit Wert “Bearer“ gefolgt vom Access-Token:
https://api.xxxxx.de/api/v2/product/29e ... 48c75af64f
Antwort Header
Connection close
Content-Type Application/json; charset=UTF-8
Date xxx yyyy zzz usw
Transfer encoding chunked
Anfrage Header
Accept application/jsonm text/javascript, */’; q=0.01
Accept –Encoding gzip, deflate
Accepz-Language de, en-US;q=0.7, en;q=0.3
Autorisation Bearer 123avf67-3355-6421-usw
Zweiter Weg URL Parameter access_token:
https://api.xxxxx.de/api/v2/logout?acce ... fe7700bd79
Bei nicht erfolgreicher Authentifizierung wird ein http-Statuscode 401 im JSON-Format zurückgegeben:
{
"error": "invalid_token",
"error_description": "Invalid access token: 98592fc6-61e6-4ed2-8f9e-f3fe7700bd79"
}
Und dann ist da die Abfrage an die URL.
URL: https://api.xxxxx.de/api/v2/products?pa ... D<size>%26[sort%3D<column>%26direction%3D<direction>][%26search%3D<value>][%26active%3D<active>][&26source%3D<source>]
Protokoll: HTTPS
Method: POST
Authentifizierung erforderlich: Ja
Wie erhalte ich die Ergebnisse der Abfrage?
Die Kommunikation mit der Schnittstelle ist mir noch nicht klar.
Re: Beispiel RestAPI
Keine Hilfe in Sicht?
Re: Beispiel RestAPI
Vielleicht hilft der Hinweis, dass der oben bereits erwähnte Lazarus JSON Viewer nun auch einen REST Tester eingebaut hat.
Erreichbar unter dem letzten Button in der Leiste (neben Mülleimer).
Erreichbar unter dem letzten Button in der Leiste (neben Mülleimer).
- Dateianhänge
-
- laz_rest.png (61.5 KiB) 8022 mal betrachtet
Re: Beispiel RestAPI
Danke @theo soweit bin ich noch nicht. Ich stehe da ganz am Anfang.
z.B. hab ich das Login mit dem code von Warf hinbekommen. Die function liefert ein token.
Nun war mein nächster Versuch mit dem Logout:
function Logout(User: String; Pass: String; accessToken: string): String;
var client: TFPHTTPClient;
json: string;
Req: TStringStream;
begin
json := '{"username": "%s", "password": "%s"}'.Format([User, Pass]);
client := TFPHTTPClient.Create(nil);
Req := TStringStream.Create(json);
try
client.AddHeader('Content-Type', 'application/json');
client.RequestBody := Req;
Result := client.Post('https://api.xxx.de/api/v2/logout');
// ShowMessage ('client.ResponseStatusCode: ' + IntToStr(client.ResponseStatusCode));
if client.ResponseStatusCode <> 200 then
raise ELoginFailedException.Create('Wrong logout data'+ #13#13 + 'client.ResponseStatusCode: ' + IntToStr(client.ResponseStatusCode))
finally
client.Free;
Req.Free;
end;
end;
Da erhalte ich die Meldung:
Wrong logout Data
client.ResponseStatuscode: 401
Die function scheint ja schon richtig zu sein nur die passwortübergabe oder die tokenübergabe ist so nicht richtig.
z.B. hab ich das Login mit dem code von Warf hinbekommen. Die function liefert ein token.
Nun war mein nächster Versuch mit dem Logout:
function Logout(User: String; Pass: String; accessToken: string): String;
var client: TFPHTTPClient;
json: string;
Req: TStringStream;
begin
json := '{"username": "%s", "password": "%s"}'.Format([User, Pass]);
client := TFPHTTPClient.Create(nil);
Req := TStringStream.Create(json);
try
client.AddHeader('Content-Type', 'application/json');
client.RequestBody := Req;
Result := client.Post('https://api.xxx.de/api/v2/logout');
// ShowMessage ('client.ResponseStatusCode: ' + IntToStr(client.ResponseStatusCode));
if client.ResponseStatusCode <> 200 then
raise ELoginFailedException.Create('Wrong logout data'+ #13#13 + 'client.ResponseStatusCode: ' + IntToStr(client.ResponseStatusCode))
finally
client.Free;
Req.Free;
end;
end;
Da erhalte ich die Meldung:
Wrong logout Data
client.ResponseStatuscode: 401
Die function scheint ja schon richtig zu sein nur die passwortübergabe oder die tokenübergabe ist so nicht richtig.
Re: Beispiel RestAPI
Wie sieht eine Datenstruktur oder function aus, wenn ich folgende Daten auslesen möchte?
"contributors":[{"type":"A01","firstName":"Jason","lastName":"Dark","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Joachim","lastName":"Kerzel","groupName":null},{"type":"E07","firstName":"Franziska","lastName":"Pigulla","groupName":null},{"type":"E07","firstName":"Joachim","lastName":"Kerzel","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null}],
Vielen Dank!
"contributors":[{"type":"A01","firstName":"Jason","lastName":"Dark","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Joachim","lastName":"Kerzel","groupName":null},{"type":"E07","firstName":"Franziska","lastName":"Pigulla","groupName":null},{"type":"E07","firstName":"Joachim","lastName":"Kerzel","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null},{"type":"E07","firstName":"Frank","lastName":"Glaubrecht","groupName":null},{"type":"E07","firstName":"Martin","lastName":"May","groupName":null},{"type":"E07","firstName":"Vittorio","lastName":"Alfieri","groupName":null},{"type":"E07","firstName":"Nicolas","lastName":"Böll","groupName":null}],
Vielen Dank!