Zum Inhalt springen

HTTPRequest – Struktur

{
"Type": "HttpRequest",
"Name": "AuftragSenden",
"Parameters": {
"Connector": "Shop",
"Url": "/orders",
"Method": "POST",
"Body": {
"rechnung": "{{InitialData.Invoice.BT1}}",
"betrag": "{{InitialData.Invoice.BG22.BT112}}"
}
}
}
Parameter Standard Bedeutung
Url – Adresse der Anfrage, z. B. https://api.example.com/orders. Mit einem Connector, der eine Basis-URL hat, genügt ein Pfad wie /orders.
Method GET GET, POST, PUT, PATCH, DELETE, HEAD oder eine andere HTTP-Methode
Connector – Name eines gespeicherten Konnektors. Seine Anmeldung kommt in jede Anfrage, siehe unten.
QueryParameters – Werte, die an die URL angehängt werden, richtig kodiert: { "q": "is:unread", "top": "20" } ergibt ?q=is%3Aunread&top=20. Eine Liste wiederholt den Namen: { "id": ["1", "2"] } ergibt ?id=1&id=2.
Headers – Kopfzeilen als Objekt: { "Accept": "application/json" }. Ein Header mit leerem Wert (z. B. ein nicht gesetztes Konnektorfeld) wird nicht gesendet.
Body – Inhalt der Anfrage; seine Form hängt von BodyType ab, siehe unten. Bei GET und HEAD wird er nicht gesendet (Warnung im Ergebnis).
BodyType Json Json, Form, Multipart, Text, Xml, File oder None
AuthType, AuthToken None Anmeldung ohne Konnektor, siehe unten
ApiKeyHeader X-API-KEY Der Header, in dem AuthType: ApiKey den Schlüssel sendet
TimeoutSeconds 100 Zeitlimit je Anfrage in Sekunden, einschließlich Lesen der Antwort; 0 = keins. Ältere Workflows mit Timeout in Millisekunden funktionieren weiter.
MaxRetries 2 Wie oft eine Anfrage nach einem Verbindungsfehler, einer Zeitüberschreitung oder einer Überlastungsantwort erneut gesendet wird, siehe unten
SuccessStatusCodes 200-299 Statuscodes, die als Erfolg gelten, z. B. "200-299;404", "2xx" oder [200, 201]
ResponseFormat Auto Wie die Antwort in Body kommt: Auto, Json, Text oder Base64, siehe unten
DownloadPath – Antwort stattdessen als Datei speichern, siehe unten
Overwrite true false: Eine vorhandene Datei bleibt, der Download bekommt den Namen name (2).pdf
AutoPagination false Weitere Seiten automatisch abrufen, siehe unten
MaxPages 100 Höchstens so viele Seiten je Adresse
Urls – Mehrere Adressen als Liste, oder ein Platzhalter, der für eine Liste steht. Jede wird abgefragt; Url wird dann nicht verwendet.
Parallel, MaxParallelRequests false, 5 Mit Urls: bis zu MaxParallelRequests Adressen gleichzeitig abfragen statt nacheinander
RateLimitDelay 0 Pause in Millisekunden vor jeder weiteren Anfrage (Seiten, Urls, Wiederholungen)
FollowRedirects true Weiterleitungen folgen (bis zu 10)
IgnoreCertificateErrors false Jedes TLS-Zertifikat akzeptieren, z. B. eines Servers im eigenen Netz mit selbst erstelltem Zertifikat. Nur für eigene Server.
IfNoneMatch, IfModifiedSince – Bedingte Anfrage mit ETag bzw. Datum (dasselbe wie die Header If-None-Match und If-Modified-Since)

Alle Texte, auch in Url, Headers, QueryParameters und Body, dürfen Platzhalter enthalten.

Mit Konnektor (empfohlen): "Connector": "Name". Die Zugangsdaten bleiben verschlüsselt im Konnektor, im Workflow-JSON steht nur der Name.

Konnektor-Typ Gesendet wird
None keine Anmeldung; nur die Basis-URL wird verwendet
ApiKey der Schlüssel im Header des Konnektors, mit seinem Schema (z. B. Authorization: Bearer <Schlüssel>)
Basic Authorization: Basic … mit Benutzername und Passwort
OAuth2 Authorization: Bearer <Access-Token>. Das Token wird erneuert, bevor es abläuft; antwortet der Server trotzdem mit 401, erneuert RUNOS es und sendet die Anfrage noch einmal.

Ohne Konnektor: AuthType und AuthToken. Werte aus einem Konnektor lassen sich mit Platzhaltern einsetzen, z. B. "AuthToken": "{{connector.Shop.ApiKey}}".

AuthType AuthToken Gesendet wird
Bearer das Token oder der Schlüssel Authorization: Bearer <Token>
Basic benutzer:passwort (ein Wert ohne Doppelpunkt gilt als schon kodiert) Authorization: Basic <Base64>
ApiKey der Schlüssel X-API-KEY: <Schlüssel>, oder der Header in ApiKeyHeader

Ist beides gesetzt, meldet der Konnektor an und AuthType wird nicht verwendet (Warnung im Ergebnis). Einen anderen Header können Sie immer in Headers setzen: { "x-api-key": "{{connector.Wetter.ApiKey}}" }.

BodyType Body Gesendet als
Json Objekt oder Liste; oder Text, der JSON enthält application/json
Form Objekt mit den Feldern; oder schon kodierter Text (a=1&b=2) application/x-www-form-urlencoded
Multipart Objekt: Textfelder, und Dateien als { "File": "C:\\Pfad\\datei.pdf" } multipart/form-data
Text Text text/plain
Xml Text application/xml
File Pfad einer Datei, die unverändert gesendet wird nach Endung (z. B. application/pdf)
None – ohne Inhalt
  • Ein Text, der nur aus einem Platzhalter besteht, der für ein Objekt oder eine Liste steht, wird als dieses Objekt bzw. diese Liste eingesetzt, z. B. "Body": { "contacts": "{{Suche.Response.Body.value}}" }. Alles andere wird als Text eingesetzt.
  • Eine Zahl aus einem Platzhalter kommt in einem JSON-Objekt als Text an ("18.3"). Braucht die API eine Zahl, schreiben Sie das JSON als Text: "Body": "{ \"amount\": {{InitialData.Total}} }". Dieser Text wird so gesendet, wie er geschrieben ist (mit Warnung, wenn er kein gültiges JSON ist).
  • Zu einer Datei in Multipart können FileName und ContentType angegeben werden: { "File": "{{FilePath}}", "FileName": "rechnung.pdf", "ContentType": "application/pdf" }. Eine Liste sendet mehrere Dateien unter einem Namen.
  • Ein Content-Type in Headers ersetzt den Typ aus der Tabelle, z. B. application/vnd.api+json (außer bei Multipart, dessen Typ die Teilegrenze enthält).
  • Ältere Workflows mit "Body": { "Value": … } und BodyType raw oder binary funktionieren weiter.

Sofern nicht in Headers gesetzt, wird jede Anfrage mit User-Agent: RUNOS und Accept: */* gesendet. Cookies werden zwischen Anfragen nicht aufbewahrt.

Nach einem Verbindungsfehler, einer Zeitüberschreitung oder einem der Statuscodes 408, 429, 502, 503 und 504 wird die Anfrage erneut gesendet, bis zu MaxRetries-mal. Die Pause wächst (1, 2, 4 … Sekunden); sendet der Server Retry-After, wartet RUNOS so lange (höchstens eine Minute). Gelingt eine Wiederholung, ist die Aktion erfolgreich; die gescheiterten Versuche stehen als Warnung im Ergebnis.

POST und PATCH werden nur dann erneut gesendet, wenn der Server sie nicht verarbeitet haben kann: wenn keine Verbindung zustande kam, und bei 429 und 503. Nach einer Zeitüberschreitung werden sie nicht wiederholt, damit ein Auftrag, eine Mail oder eine Buchung nie doppelt ankommt.

Mit AutoPagination: true folgt RUNOS dem Link zur nächsten Seite, solange die Antworten erfolgreich sind: @odata.nextLink (Microsoft Graph), nextLink, next, nextPageUrl, next_page_url, links.next, paging.next, _links.next.href oder der Header Link mit rel="next".

  • Jede Seite ist ein Eintrag in Response.Results. Response.Items enthält die Einträge aller Seiten in einer Liste (aus value, items, data, results, records oder entries, oder die Seite selbst, wenn sie eine Liste ist), fertig für eine Loop.
  • Einem Link zu einem anderen Server wird nicht gefolgt, damit die Anmeldung nie bei Dritten landet. Auch ein Kreis von Links und MaxPages beenden das Abrufen; jeweils mit Warnung.

Mit DownloadPath wird eine erfolgreiche Antwort als Datei gespeichert, Body bleibt leer.

  • Ein Ordner (der Pfad endet auf \ oder der Ordner existiert): Der Dateiname kommt vom Server (Content-Disposition) oder vom Ende der URL; ohne beides heißt sie download. Ohne Endung wird eine nach dem Inhaltstyp ergänzt (.pdf, .json …).
  • Ein Dateipfad: Die Antwort wird genau unter diesem Namen gespeichert.
  • Die Datei wird zuerst unter einem vorläufigen Namen geschrieben und bekommt ihren Namen erst, wenn sie vollständig ist; ein abgebrochener Download hinterlässt keine halbe Datei. Fehlende Ordner werden angelegt.
  • Eine Fehlerantwort (z. B. 404) wird nicht gespeichert; sie steht wie bei jeder Anfrage in Body.
"Response": {
"StatusCode": 200,
"Reason": "OK",
"Url": "https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41&current_weather=true",
"Headers": { "Content-Type": "application/json; charset=utf-8", "Date": "…" },
"ContentType": "application/json",
"Body": { "current_weather": { "temperature": 18.3, "is_day": 1, … } },
"DownloadedFile": null,
"ElapsedMs": 182.4,
"Results": [ { "Url": "…", "StatusCode": 200, "Status": "OK", "Reason": "OK", "Headers": { … }, "ContentType": "application/json", "Body": { … }, "DownloadedFile": null, "ElapsedMs": 182.4 } ],
"SuccessCount": 1,
"ErrorCount": 0
},
"Meta": { "Method": "GET", "Url": "…", "Connector": null, "Requests": 1, "Retries": 0 }
  • StatusCode, Reason, Url, Headers, ContentType, Body, DownloadedFile und ElapsedMs direkt unter Response gehören zur ersten Antwort. Eine folgende Aktion liest sie als {{WetterAbfragen.Response.Body.current_weather.temperature}} oder {{WetterAbfragen.Response.Headers.ETag}}.
  • Results enthält einen Eintrag je Antwort (je Seite und je Adresse), mit Status OK oder Error und bei einem Fehler Error. {{Name.Response.Results.Body…}} aus älteren Workflows liest weiterhin die erste Antwort.
  • Body: JSON als Objekt oder Liste, mit den Werten, wie der Server sie gesendet hat (Zahlen bleiben Zahlen, true/false bleiben Wahrheitswerte, Datumsangaben bleiben Text); anderer Text als Text; leer bei leerer Antwort und bei HEAD. Binäre Inhalte (PDF, Bilder …) kommen nicht in Body, mit einer Warnung: speichern Sie sie mit DownloadPath, oder setzen Sie ResponseFormat: Base64. Json liest die Antwort auch ohne JSON-Inhaltstyp als JSON; Text liefert immer Text. Eine Antwort wird bis 50 MB aufbewahrt; größere nur mit DownloadPath.
  • Fehler: Eine Antwort mit einem Statuscode außerhalb von SuccessStatusCodes (standardmäßig alles außer 2xx), eine Zeitüberschreitung oder ein Verbindungsfehler lässt die Aktion fehlschlagen. Der Fehler nennt Methode, Adresse, Code und den Anfang der Serverantwort, die meist sagt, was falsch war; die ganze Antwort steht in Body. Wie bei jeder Aktion endet dann der Lauf, oder die Fehlerbehandlung des Workflows greift.
  • Geheimnisse: In den Parametern des Ergebnisses stehen AuthToken und die Werte von Headern und Abfrageparametern, deren Name z. B. key, token, secret, pass oder auth enthält, als ***; Platzhalter wie {{connector.Shop.ApiKey}} bleiben sichtbar. In Url werden die Werte solcher Abfrageparameter ebenfalls maskiert.

Im Diagramm des Workflow-Editors hat die Aktion ein Formular:

  • Anfrage: Methode und Adresse (URL) in einer Zeile. Konnektor listet die gespeicherten Konnektoren; die Schaltfläche daneben liest sie neu ein. Mit einem Konnektor wird ein Pfad wie /orders an seine Basis-URL angehängt, und die Anmeldung kommt vom Konnektor. Ohne Konnektor wählen Sie unter Anmeldung Keine, Bearer-Token, Benutzer + Passwort (AuthToken als benutzer:passwort) oder API-Schlüssel (in einem Header, Standard X-API-KEY).
  • Abfrageparameter und Header als Tabelle mit Name und Wert; die leere Zeile am Ende fügt einen Eintrag hinzu. Eine Liste als Wert (["a","b"]) wiederholt den Namen eines Abfrageparameters.
  • Art des Inhalts: JSON, Formular (URL-kodiert), Multipart (Felder und Dateien), Text, XML, Datei oder Kein Inhalt; bei GET und HEAD ausgeblendet. Gültiges JSON wird als Objekt gespeichert, JSON mit {{…}} außerhalb von Anführungszeichen (Zahlen, ganze Objekte) als Text. Formular und Multipart sind Tabellen; eine Datei im Multipart steht als {"File": "C:\\Pfad\\datei.pdf"} im Wert.
  • Antwort: Inhalt lesen als (Automatisch, JSON, Text, Base64), Statuscodes, die als Erfolg gelten (Standard 200-299), Antwort als Datei speichern und Vorhandene Datei ersetzen.
  • Weitere Optionen: Zeitlimit (Sekunden) (Standard 100, 0 = keins), Wiederholungen (Standard 2), Weiterleitungen folgen, Jedes Zertifikat akzeptieren (nur für Server im lokalen Netz), Alle Seiten abrufen (mehrere Seiten, Einträge in Response.Items) mit Höchstens Seiten, Mehrere Adressen (eine pro Zeile) mit Mehrere gleichzeitig und Höchstens gleichzeitig, Pause vor jeder weiteren Anfrage (ms) sowie If-None-Match und If-Modified-Since.

Werte aus früheren Schritten ziehen Sie in der Testansicht aus der Spalte Eingabe in URL, Tabellen oder Inhalt. Schritt testen sendet die Anfrage wirklich, auch POST, PUT, PATCH und DELETE, und zeigt das Ergebnis in der Spalte Ausgabe.