HTTPRequest – Struktur
{ "Type": "HttpRequest", "Name": "AuftragSenden", "Parameters": { "Connector": "Shop", "Url": "/orders", "Method": "POST", "Body": { "rechnung": "{{InitialData.Invoice.BT1}}", "betrag": "{{InitialData.Invoice.BG22.BT112}}" } }}Parameter
Abschnitt betitelt „Parameter“| 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.
Anmeldung
Abschnitt betitelt „Anmeldung“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
MultipartkönnenFileNameundContentTypeangegeben werden:{ "File": "{{FilePath}}", "FileName": "rechnung.pdf", "ContentType": "application/pdf" }. Eine Liste sendet mehrere Dateien unter einem Namen. - Ein
Content-TypeinHeadersersetzt den Typ aus der Tabelle, z. B.application/vnd.api+json(außer beiMultipart, dessen Typ die Teilegrenze enthält). - Ältere Workflows mit
"Body": { "Value": … }undBodyTyperawoderbinaryfunktionieren weiter.
Sofern nicht in Headers gesetzt, wird jede Anfrage mit User-Agent: RUNOS und Accept: */* gesendet. Cookies werden zwischen Anfragen nicht aufbewahrt.
Wiederholungen
Abschnitt betitelt „Wiederholungen“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.
Mehrere Seiten
Abschnitt betitelt „Mehrere Seiten“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.Itemsenthält die Einträge aller Seiten in einer Liste (ausvalue,items,data,results,recordsoderentries, 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
MaxPagesbeenden das Abrufen; jeweils mit Warnung.
Downloads
Abschnitt betitelt „Downloads“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 siedownload. 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.
Ergebnis
Abschnitt betitelt „Ergebnis“"Response": { "StatusCode": 200, "Reason": "OK", "Url": "https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t_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,DownloadedFileundElapsedMsdirekt unterResponsegehören zur ersten Antwort. Eine folgende Aktion liest sie als{{WetterAbfragen.Response.Body.current_weather.temperature}}oder{{WetterAbfragen.Response.Headers.ETag}}.Resultsenthält einen Eintrag je Antwort (je Seite und je Adresse), mitStatusOKoderErrorund bei einem FehlerError.{{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/falsebleiben Wahrheitswerte, Datumsangaben bleiben Text); anderer Text als Text; leer bei leerer Antwort und beiHEAD. Binäre Inhalte (PDF, Bilder …) kommen nicht inBody, mit einer Warnung: speichern Sie sie mitDownloadPath, oder setzen SieResponseFormat: Base64.Jsonliest die Antwort auch ohne JSON-Inhaltstyp als JSON;Textliefert immer Text. Eine Antwort wird bis 50 MB aufbewahrt; größere nur mitDownloadPath.- 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 inBody. Wie bei jeder Aktion endet dann der Lauf, oder die Fehlerbehandlung des Workflows greift. - Geheimnisse: In den Parametern des Ergebnisses stehen
AuthTokenund die Werte von Headern und Abfrageparametern, deren Name z. B.key,token,secret,passoderauthenthält, als***; Platzhalter wie{{connector.Shop.ApiKey}}bleiben sichtbar. InUrlwerden die Werte solcher Abfrageparameter ebenfalls maskiert.
Formular im Editor
Abschnitt betitelt „Formular im Editor“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
/ordersan seine Basis-URL angehängt, und die Anmeldung kommt vom Konnektor. Ohne Konnektor wählen Sie unter Anmeldung Keine, Bearer-Token, Benutzer + Passwort (AuthTokenalsbenutzer:passwort) oder API-Schlüssel (in einem Header, StandardX-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
GETundHEADausgeblendet. 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 inResponse.Items) mit Höchstens Seiten, Mehrere Adressen (eine pro Zeile) mit Mehrere gleichzeitig und Höchstens gleichzeitig, Pause vor jeder weiteren Anfrage (ms) sowieIf-None-MatchundIf-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.
