KI BMS

WebSocket-Transport

Optional: gleiche CRUD-Oberfläche plus Live-Events über einen Socket.

WebSockets sind optional. Die HTTP-API deckt jede Operation alleine ab - wenn dir das genügt, kannst du diese Seite überspringen. Der WebSocket-Transport ist da, wenn du Live-Events möchtest (kein Polling) oder wenn du den TLS-Handshake nur einmal für viele Operationen zahlen willst. Verbinde dich mit /xapi2/ch, übergib dasselbe Bearer-Token wie bei der HTTP-API und führe jede CRUD-Operation (list, read, create, update, delete) plus subscribe über denselben Socket aus. Auth, Scopes, Anfragelimits, Audit und Zugriffsprüfungen sind identisch zu HTTP - nur der Transport unterscheidet sich.

So funktioniert's

Handshake

Mit /xapi2/ch?token=<jwt-oder-pat> verbinden oder Token via Sec-WebSocket-Protocol: bearer, <token> Header senden. Server antwortet bei Annahme mit einem hello Frame.

Live-Events

{ op: "subscribe", id, dataType } senden, um event-Frames zu erhalten, sobald eine Zeile dieses Typs erstellt, aktualisiert oder gelöscht wird - server-seitig nach deinem Lesezugriff gefiltert.

Streaming-Listen

WS list streamt Ergebnisse als list_chunk Frames (Standard 25/Seite, harte Obergrenze 10k Zeilen gesamt) gefolgt von einem list_done mit denselben Metadaten wie HTTP's meta Block. Nützlich für große Erstabfragen.

Beispiele

const ws = new WebSocket(
`wss://${location.host}/xapi2/ch?token=${encodeURIComponent(token)}`,
)
ws.onopen = () => {
// Receive live created/updated/deleted events for this type.
ws.send(JSON.stringify({ op: "subscribe", id: "sub-1", dataType: "application" }))
}
ws.onmessage = (msg) => {
const frame = JSON.parse(msg.data)
if (frame.op === "event") console.log(frame.event, frame.dataType, frame.object ?? frame.id)
}