UIAP HTTP/REST Binding
UIAP HTTP/REST Binding v0.1
Abschnitt betitelt „UIAP HTTP/REST Binding v0.1“| Feld | Wert |
|---|---|
| Status | Draft |
| Version | 0.1 |
| Datum | 2026-03-27 |
| Abhängigkeiten | [UIAP-CORE] |
| Editoren | Patrick |
1. Zweck
Abschnitt betitelt „1. Zweck“Dieses Dokument definiert ein optionales, bewusst eingeschränktes HTTP/REST Binding für UIAP.
Das Binding ist für request/response-dominierte Integrationen geeignet, ist aber nicht das primäre Referenzbinding für stark event-getriebene, interaktive UIAP-Laufzeiten.
2. Kennung
Abschnitt betitelt „2. Kennung“const UIAP_HTTP_MEDIA_TYPE = "application/uiap+json";3. Einordnung
Abschnitt betitelt „3. Einordnung“[email protected] ist ein konservatives Zusatzbinding.
Es eignet sich für:
- kontrollierte Backend-Integrationen,
- Desktop- oder lokale Host-Setups,
- Deployments, in denen WebSocket organisatorisch oder infrastrukturell unerwünscht ist,
- einfache Controller-zu-Runtime-Kommunikation.
Es ist weniger geeignet für dichte Eventströme wie:
action.progressuiap.workflow.progressweb.state.deltaweb.signal- aggressive Heartbeat-Nutzung
Für solche Fälle SOLLTE [email protected] bevorzugt werden.
4. Empfohlenes Ressourcenmodell
Abschnitt betitelt „4. Empfohlenes Ressourcenmodell“interface HTTPBindingConfig { baseUrl: string;
sessionPath?: string; // default RECOMMENDED: "/uiap/sessions" messagePathTemplate?: string; // default RECOMMENDED: "/uiap/sessions/{sessionId}/messages" eventStreamPathTemplate?: string; // default RECOMMENDED: "/uiap/sessions/{sessionId}/events"
eventDelivery?: "sse"; // v0.1 RECOMMENDED and effectively normative reconnect?: ReconnectPolicy;}- Die konkrete URI-Struktur ist deployment-spezifisch, MUSS aber dokumentiert werden.
- Das oben gezeigte Modell ist RECOMMENDED.
- Neue Sessions SOLLTEN über
POST {sessionPath}mit einersession.initialize-Envelope erzeugt werden. - Laufende Sessions SOLLTEN über
POST {messagePathTemplate}adressiert werden. - Server-initiierte Events SOLLTEN über
GET {eventStreamPathTemplate}als Server-Sent Events (SSE) geliefert werden.
5. Verbindungsaufbau und -abbau
Abschnitt betitelt „5. Verbindungsaufbau und -abbau“- Der Client sendet
session.initializeper HTTPPOST. - Der Server antwortet mit genau einer UIAP-Envelope, typischerweise
session.initializedodererror. - Nach erfolgreicher Initialisierung SOLLTE der Client den Event-Stream der Session öffnen.
- Danach DÜRFEN weitere UIAP-Requests über den Message-Endpunkt gesendet werden.
- Eine geordnete Session-Beendigung SOLLTE per
session.terminateerfolgen. - Ein Server KANN zusätzlich
DELETE /uiap/sessions/{sessionId}anbieten, MUSS dies aber intern aufsession.terminate-Semantik abbilden. - Das bloße Schließen einer einzelnen HTTP-Verbindung beendet die UIAP-Session nicht automatisch.
6. Framing
Abschnitt betitelt „6. Framing“6.1 Request/Response-Kanal
Abschnitt betitelt „6.1 Request/Response-Kanal“- Eine HTTP-Request-Body MUSS genau eine UIAP-Envelope enthalten.
- Eine HTTP-Response-Body MUSS genau eine UIAP-Envelope enthalten.
- Das Media Type SOLLTE
application/uiap+jsonsein. - Wenn dieses Media Type nicht praktikabel ist, DARF
application/jsonverwendet werden, solange exakt eine UIAP-Envelope im Body steht. - Mehrere UIAP-Envelopes in einem einzigen HTTP-Body SIND nicht konform.
- Eine leere 202/204-Antwort ohne UIAP-Envelope ist für allgemeine UIAP-Requests nicht interoperabel genug und SOLLTE vermieden werden.
6.2 SSE-Event-Kanal
Abschnitt betitelt „6.2 SSE-Event-Kanal“- Jedes SSE-Event MUSS genau eine UIAP-Envelope enthalten.
- Das Event-Feld SOLLTE
uiapsein. - Der
data:-Inhalt MUSS eine JSON-serialisierte UIAP-Envelope sein. - Das
id:-Feld SOLLTE einen monotonen Stream-Cursor oder Event-Identifier tragen, damit Reconnect nachvollziehbar ist. action.progress,action.result,uiap.workflow.progress,web.state.delta,web.signalund ähnliche server-initiierte Nachrichten SOLLTEN über diesen Kanal gesendet werden.
Beispiel: SSE
Abschnitt betitelt „Beispiel: SSE“event: uiapid: ev_1042data: {"uiap":"0.1","kind":"event","type":"action.progress","id":"msg_79","sessionId":"sess_123","ts":"2026-03-27T10:03:00.020Z","source":{"role":"bridge","id":"http-runtime"},"payload":{"actionHandle":"act_991","stage":"executing"}}7. Fehlerbehandlung
Abschnitt betitelt „7. Fehlerbehandlung“- HTTP-Fehler vor erfolgreicher UIAP-Verarbeitung, etwa Auth-Fehler, unbekannter Endpoint, falscher Content-Type, Body zu groß oder nicht parsebares JSON, SIND Transport-Fehler.
- Sobald ein Request als gültige UIAP-Envelope akzeptiert wurde, SOLLTE die fachliche oder protokollseitige Antwort als UIAP-
responseoder UIAP-errorim Body geliefert werden. - HTTP-Statuscodes SOLLTEN primär Transport-, Gateway- und Vorverarbeitungsfehler ausdrücken.
- UIAP-Fehlercodes wie
invalid_message,bad_request,unknown_session,session_not_activeoderpermission_deniedgehören in die UIAP-error-Envelope. - Wenn der SSE-Stream abbricht, ist das zunächst ein Transportproblem des Event-Kanals, nicht automatisch das Ende der Session.
8. Sicherheitsanforderungen
Abschnitt betitelt „8. Sicherheitsanforderungen“https://SOLLTE Standard sein.- Reines
http://DARF nur für Loopback, lokale Entwicklung oder gleichwertig geschützte interne Umgebungen verwendet werden. - Authentisierung MUSS pro Deployment geregelt werden, etwa über Bearer-Token, Cookies oder mTLS.
- Wenn Browser-Clients mit Cookies arbeiten, SOLLTEN CORS- und CSRF-Schutzmechanismen explizit berücksichtigt werden.
resumeTokenDARF NICHT in URL-Pfaden, Query-Strings oder SSE-Cursorn transportiert werden.- Event-Streams DÜRFEN nur für berechtigte Session-Teilnehmer zugänglich sein.
9. Reconnect und Session-Resume
Abschnitt betitelt „9. Reconnect und Session-Resume“- Der Verlust einer einzelnen HTTP-Verbindung bedeutet nicht automatisch Session-Verlust.
- Fällt nur der SSE-Stream aus, SOLLTE der Client ihn mit derselben
sessionIdund dem letzten bekannten Event-Cursor erneut öffnen. - Wenn der Server signalisiert, dass der Stream-Cursor nicht mehr fortsetzbar ist oder die Session nicht mehr aktiv ist, SOLLTE der Client
session.resumeüber den Message-Endpunkt senden. - Schlägt
session.resumefehl, MUSS eine neue Session mitsession.initializebegonnen werden. - In-flight Requests mit unbekanntem Zustell- oder Ausführungsstatus DÜRFEN nicht blind automatisch wiederholt werden.
10. Minimaler Ablauf
Abschnitt betitelt „10. Minimaler Ablauf“POST /uiap/sessionsBody = session.initialize<- session.initialized
GET /uiap/sessions/sess_123/events<- SSE stream with action.progress / web.state.delta / workflow.progress
POST /uiap/sessions/sess_123/messagesBody = action.request<- action.accepted
... weitere Progress-/Result-/Signal-Nachrichten über SSE ...11. Klare Designentscheidung
Abschnitt betitelt „11. Klare Designentscheidung“Ein „REST Binding” für UIAP ist nur dann sauber, wenn man ehrlich zugibt, dass UIAP eben nicht bloß aus statischen CRUD-Operationen besteht. Session-Lifecycle, Progress-Events, Deltas, Resume und Heartbeats verlangen mindestens einen ergänzenden Event-Kanal. Darum ist [email protected] in dieser Form HTTP request/response plus SSE, nicht romantisierte JSON-POST-Folklore.
Normative Begriffe
Abschnitt betitelt „Normative Begriffe“Die Schlüsselwörter MUSS, DARF NICHT, SOLLTE, KANN in diesem Dokument sind normativ gemäss RFC 2119 und BCP 14 zu interpretieren, wenn und nur wenn sie in GROSSBUCHSTABEN erscheinen.
Normative Referenzen
Abschnitt betitelt „Normative Referenzen“- [UIAP-CORE] UIAP Core v0.1
- [RFC2119] Key words for use in RFCs to Indicate Requirement Levels, BCP 14
- [RFC7231] Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
- [W3C-SSE] Server-Sent Events, W3C Recommendation
Security Considerations
Abschnitt betitelt „Security Considerations“- HTTPS SOLLTE für alle Produktiv-Deployments verwendet werden.
- Authentisierung MUSS pro Deployment geregelt werden (Bearer-Token, Cookies, mTLS).
resumeTokenDARF NICHT in URLs oder Query-Strings transportiert werden.- SSE-Event-Streams DÜRFEN nur für autorisierte Session-Teilnehmer zugänglich sein.
- CORS- und CSRF-Schutzmechanismen SOLLTEN für Browser-Clients explizit konfiguriert werden.
Changelog
Abschnitt betitelt „Changelog“| Version | Datum | Änderungen |
|---|---|---|
| 0.1 | 2026-03-27 | Initialer Entwurf |