# REST API - Request

Unified REST request block zum Aufrufen von Web‑APIs. Konfigurieren Sie `Method`, `Headers`, `Query Params` und `Payload`. Wählen Sie `Runtime Mode` Async (nicht blockierend) oder Sync (wartet auf Antwort). Optional kann ein Wert aus der JSON‑Antwort mittels eines Punkt-/Index‑Pfads extrahiert werden.

## 📥 Eingänge

`Enable`\
Optionales Boolean, das angibt, ob die Anfrage ausgeführt werden soll. Wenn False, überspringt der Block das Senden der Anfrage (Standard: True).

`Server Address`\
URL oder Endpoint, der aufgerufen werden soll (erforderlich).

`Headers`\
Optionale Header als Dictionary oder JSON‑String.

`Query Params`\
Optionale Query‑Parameter als Dictionary oder JSON‑String.

`Payload`\
Optionaler Request‑Body (wird entsprechend `Body Mode` versendet).

`Response Path`\
Optionaler Textpfad zum Extrahieren eines Werts aus der JSON‑Antwort (Beispiele: `data.items[0].id` oder `items[2]`).

(hier sind Sockets Eingänge)

## 📤 Ausgänge

`OK`\
Boolean, True wenn die HTTP‑Antwort Erfolg anzeigt.

`Status Code`\
Vom Server zurückgegebener HTTP‑Statuscode.

`Error`\
Fehlermeldung bei Netzwerk-/HTTP‑Fehlern oder Parsing‑Fehlern.

`Response Text`\
Rohantwortkörper als Text.

`Response JSON`\
Geparstes JSON‑Objekt, falls verfügbar (ansonsten None).

`Response Headers`\
Map der Antwort‑Header.

`Elapsed (ms)`\
Dauer der Anfrage in Millisekunden.

`Extracted Data`\
Wert, der aus `Response JSON` mittels `Response Path` aufgelöst wurde (oder None, wenn nicht gefunden).

(hier sind Sockets Ausgänge)

## 🕹️ Steuerungen

`Method`\
Wählen Sie die HTTP‑Methode: GET / POST / PUT / PATCH / DELETE.

`Body Mode`\
Legt fest, wie `Payload` gesendet wird: `json` / `form` / `raw`.

`Runtime Mode`\
Wählen Sie den Ausführungsmodus: `Async` (nicht blockierend, behält letztes Ergebnis) oder `Sync` (wartet auf Antwort).

`Timeout (s)`\
Timeout in Sekunden für Anfragen (ungültige Werte fallen auf einen sicheren Standard zurück).

`Verify SSL`\
Aktivieren/Deaktivieren der TLS‑Zertifikatsprüfung (nur in vertrauenswürdigen Testumgebungen deaktivieren).

## ⚙️ Funktionsweise

* Wenn `Enable` true ist, baut der Block die Anfrage aus `Server Address`, `Headers`, `Query Params` und `Payload` zusammen, sowie der gewählten `Method` und `Body Mode`.
* Im `Sync`‑Modus wartet der Block, bis die HTTP‑Anfrage abgeschlossen ist, und liefert das frische Ergebnis im gleichen Auswertungszyklus zurück.
* Im `Async`‑Modus sendet der Block die Anfrage ohne Blockieren; er behält das zuletzt abgeschlossene Ergebnis und aktualisiert die Ausgänge, sobald die Hintergrundanfrage fertig ist.
* Ein in `Response Path` angegebener JSON‑Extraktionspfad wird in `Extracted Data` aufgelöst, falls vorhanden; ein leerer Pfad führt zu keiner Extraktion.
* Bei HTTP‑ oder Netzwerkfehlern liefert der Block eine `Error`‑Meldung und markiert das Ergebnis als ungültig, damit Fehler leichter auffallen.

## 📝 Nutzung

1. Setzen Sie `Server Address` auf Ihren API‑Endpoint.
2. Geben Sie optional `Headers` und `Query Params` als Dictionaries oder JSON‑Strings an.
3. Legen Sie den Request‑Body in `Payload` ab und wählen Sie `Body Mode` (verwenden Sie `json` für strukturierte Payloads).
4. Wählen Sie `Runtime Mode`:
   * `Async`, um Ihr Szenario nicht zu blockieren (gut für UI/fortlaufende Pipelines).
   * `Sync`, wenn Sie die Antwort sofort im selben Durchlauf benötigen.
5. (Optional) Fügen Sie `Response Path` hinzu, um einen verschachtelten Wert aus der JSON‑Antwort für nachgelagerte Logik zu extrahieren.
6. Triggern Sie den Aufruf, indem Sie `Enable` auf True setzen oder einen Booleschen Trigger von anderen Blöcken zuführen.

## 💡 Tipps und Tricks

* Bereiten Sie JSON‑Payloads mit dem Block `Data to JSON` vor, bevor Sie sie in `Payload` einspeisen, für sauberere Struktur und weniger Formatierungsfehler.
* Verwenden Sie nach `Response JSON` den Block `Parse Data Dictionary`, um Antwortfelder sicher zuzugreifen und weiterzuleiten.
* Protokollieren Sie Antworten oder periodische Ergebnisse mit `CSV Export`, um eine zeitgestempelte Aufzeichnung der API‑Antworten zu behalten.
* Zum Debuggen verbinden Sie `Error` oder `Response Text` mit `Debug Input`, um unerwartete Ausgaben zu inspizieren.
* Kombinieren Sie den Block mit `Logic Input` oder `Rising Edge`, um genau zu steuern, wann Anfragen gesendet werden (z. B. nur einmal pro Ereignis).

(hier vorgeschlagene Blöcke stammen aus der bereitgestellten Liste)

## 🛠️ Fehlersuche

* `Server Address` leer oder ungültig: Stellen Sie sicher, dass `Server Address` eine vollständige URL ist (inkl. Protokoll, falls erforderlich).
* Anfrage läuft ins Timeout: Erhöhen Sie `Timeout (s)` oder prüfen Sie die Netzwerkverbindung zum Server.
* SSL‑Verifikationsfehler in Testumgebungen: Deaktivieren Sie `Verify SSL` nur vorübergehend, wenn Sie dem Ziel vertrauen.
* Unerwartetes JSON‑Parsing: Prüfen Sie zuerst `Response Text`; verwenden Sie eine JSON‑gültige Payload und setzen Sie `Body Mode` auf `json`, wenn Sie strukturierte Daten senden.
* Keine extrahierten Daten: Überprüfen Sie die Struktur durch Inspektion von `Response JSON` und passen Sie `Response Path` mit Punkt-/Indexnotation an (z. B. `items[0].id`).

## 🔒 Datenschutz & Sicherheit

Seien Sie vorsichtig mit sensiblen Daten in `Headers` oder `Payload` (API‑Keys, Passwörter). Beim Protokollieren oder Exportieren von Daten sollten vertrauliche Felder geschwärzt werden.

## 🧭 Beispiel‑Workflows

* Senden Sie periodisch Sensordaten an einen Webservice und protokollieren Sie Erfolgs-/Fehlerzähler mit `CSV Export`.
* Posten Sie ein strukturiertes JSON‑Objekt, erstellt mit `Data to JSON`, und verwenden Sie `Extracted Data` für eine Entscheidungs‑Logik (`Logic Input` / Schwellen).
* Nutzen Sie `Debug Input`, um Serverfehler während der Entwicklung zu inspizieren, bevor Sie auf Produktionslogging umstellen.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.augelab.com/german/function-blocks/input-output/communication/rest-api-request.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
