API Call Funktioniert nicht

Hallo,

Ich versuche eine API anzubinden. Jedoch scheitere Ich schon an der eigentlich einfachen Authentifizierung.
Ich erhalte URISyntaxException: Malformed escape pair.

Wenn Ich es einfach im Browser aufrufe sehe ich die xml mit dem Token den ich für die api brauche.

Hallo @fabian,

kannst du bitte mal probieren die urlEncode Template Funktion für dein Passwort zu verwenden:

&password=${urlEncode("deinPasswort")}

Das wird von den meisten Browsern schon automatisch gemacht, weshalb du die XML im Browser abrufen kannst.

Viele Grüße
Torsten

Hallo @synesty-Torsten

Danke das hat funktioniert. Ich finde aber kein besseren Weg den Token nun einem Datastore zu speichern und dann ein zweiten Fflow anzulegen.

Kann Ich die API auch irgendwie in einem Schritt anbinden?

Hallo @fabian,

du kannst den Token, sowie er aus dem Request ausgegeben wird weiterverwenden. Im parsingTemplate des APICalls könntest du das vorgefertigte template nutzen.
Näheres dazu findest du unter folgenden Link:

Viele Grüße
Lukas

Hallo @synesty-Lukas,

Ich speichere den Token jetzt hiermit :

<#assign row = target.addRow()>
<#list json.data as j >
 <#assign row = target.addRow()>
 ${addColumns(row, j)}
</#list>
${setVariable("token", json.data.token)}

Und lese ihn mit

 token=${urlEncode("${getVariable("token")}")}

Leider erhalte Ich dann aber diese Fehlermeldung:
(Root Causes: ParseException: Syntax error in template „requestBody“ in line 1, column 33: Unexpected end of file reached. You have an unclosed „(“. Check if the FreeMarker end-tags are present, and aren’t malformed. (Note that FreeMarker end-tags must have # or @ after the / character.))

Gibt es keine Möglichkeit sich den Aufruf anzeigen zu lassen? Das würde mir das Debugging deutlich erleichtern.

Hallo @fabian,

der Syntax error in deinem parsingTemplate hängt mit den verschalten ${} (Freemarker Interpolations) zusammen. Das kann leider passieren, wenn du z.B. Funktion oder Variablen über den + Button einfügst.

Folgendes template sollte funktionieren:

 token=${urlEncode(getVariable("token"))}

Eventuell ist es aber sinnvoll die Erstellung des Tokens einem extra Step zu nutzen und diesen dann in einem weiteren API Call Step zu verwenden. Im Prinzip so wie du es schon hattest, nur ohne Datastore. Du kannst im zweiten ApiCall Step auch auf den token (Spreadsheet output des 1. Steps zugreifen).

Die Outputs kannst du dir mit klick auf den Pfeil nach dem Step anzeigen lassen:

image

Du benötigst die Variable für den Spreadsheet Step Output:

image

Die Spreadsheet verfügen über eine Funktion (firstRow("Spaltenname")) mit der man auf die Daten der 1. Zeile zugreifen kann. Damit kannst du z.B. über ${output@APICall_57.firstRow(„token“)} auf den neu erstellten token aus dem Ergebnis des 1. Steps zugreifen.

Das funktioniert z.B. im requestHeaders Feld

oder auch im host Feld

Vielleicht hilft dir das etwas weiter.

Viele Grüße
Torsten

Hallo @synesty-Torsten,

Die Funktion auf die erste Zeile des Spreadsheets aus dem vorherigen Step zuzugreifen hat mir geholfen und hilft mir auch bei einem anderen Problem.

Vielen dank!

1 Like