CloudEvents-bővítmény az Azure Web PubSub eseménykezelőhöz HTTP-protokollal
A Web PubSub szolgáltatás a CloudEvents HTTP protokollkötésével kézbesíti az ügyféleseményeket a felsőbb rétegbeli webhooknak.
A Web PubSub szolgáltatásból a kiszolgálóra küldött adatok mindig CloudEvents formátumúak binary
.
- Webhook ellenőrzése
- Web PubSub CloudEvents attribútumbővítmény
- Események
- Események blokkolása
- Események blokkolásának feloldása
Webhook ellenőrzése
A Webhook érvényesítése a CloudEventst követi. A kérés mindig tartalmazza WebHook-Request-Origin: xxx.webpubsub.azure.com
a fejlécet.
Ha és csak akkor, ha a kézbesítési cél engedélyezi az események kézbesítését, akkor a kérésre a fejlécet is beleértve WebHook-Allowed-Origin
kell válaszolnia, például:
WebHook-Allowed-Origin: *
Vagy:
WebHook-Allowed-Origin: xxx.webpubsub.azure.com
A WebHook-Request-Rate és a WebHook-Request-Callback egyelőre nem támogatott.
Web PubSub CloudEvents attribútumbővítmény
Azt is megjegyezték, hogy a HTTP-specifikáció most már hasonló mintát követ, mivel már nem utal arra, hogy a bővítmény HTTP-fejlécei X-előtaggal legyenek elnevezve.
Ez a bővítmény a Web PubSub által használt attribútumokat határozza meg minden általa létrehozott eseményhez.
Attribútumok
Név | Típus | Leírás | Példa |
---|---|---|---|
userId |
string |
A kapcsolat hitelesítésével rendelkező felhasználó | |
hub |
string |
Az a központ, amelyhez a kapcsolat tartozik | |
connectionId |
string |
A connectionId egyedi az ügyfélkapcsolathoz | |
eventName |
string |
Az esemény neve előtag nélkül | |
subprotocol |
string |
Az ügyfél által használt alprotocol, ha van ilyen | |
connectionState |
string |
Meghatározza a kapcsolat állapotát. Ugyanezzel a válaszfejléccel alaphelyzetbe állíthatja az állapot értékét. Több connectionState fejléc nem engedélyezett. A base64 kódolja a sztringértéket, ha összetett karaktereket tartalmaz, például base64(jsonString) összetett objektumot szeretne átadni ezzel az attribútummal. |
|
signature |
string |
A felsőbb rétegbeli webhook aláírása annak ellenőrzéséhez, hogy a bejövő kérés a várt forrásból származik-e. A szolgáltatás az elsődleges hozzáférési és a másodlagos hozzáférési kulcs használatával is kiszámítja az értéket kulcsként HMAC : Hex_encoded(HMAC_SHA256(accessKey, connectionId)) . A felsőbb rétegnek ellenőriznie kell, hogy a kérés érvényes-e a feldolgozás előtt. |
esemény
Kétféle esemény létezik. Az egyik az események blokkolása , amelyeket a szolgáltatás vár az esemény válaszának folytatására. Az egyik az események blokkolásának feloldása , amelyeket a szolgáltatás nem vár meg az ilyen esemény válaszára a következő üzenet feldolgozása előtt.
- Események blokkolása
- Események blokkolásának feloldása
Rendszeresemény connect
ce-type
:azure.webpubsub.sys.connect
Content-Type
:application/json
Kérelem formátuma:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.sys.connect
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: connect
{
"claims": {},
"query": {},
"headers": {},
"subprotocols": [],
"clientCertificates": [
{
"thumbprint": "<certificate SHA-1 thumbprint>",
"content": "-----BEGIN CERTIFICATE-----\r\n...\r\n-----END CERTIFICATE-----"
}
]
}
Sikeres válasz formátuma:
Fejléc
ce-connectionState
: Ha ez az élőfej létezik, a kapcsolat kapcsolati állapota a fejléc értékére frissül. Csak a blokkoló események frissíthetik a kapcsolat állapotát. Az alábbi minta base64 kódolású JSON-sztringet használ a kapcsolat összetett állapotának tárolásához.Állapotkód:
204
: Siker tartalom nélkül.200
: Sikeres, a tartalomnak JSON formátumúnak kell lennie, és a következő tulajdonságok engedélyezettek:subprotocols
Az
connect
esemény továbbítja az alprotocol és a hitelesítési adatokat az ügyfélről a felsőbb rétegbe. A Web PubSub szolgáltatás az állapotkód használatával állapítja meg, hogy a kérés frissítve lesz-e a WebSocket protokollra.Ha a kérelem tartalmazza a
subprotocols
tulajdonságot, a kiszolgálónak egy támogatott alprojektet kell visszaadnia. Ha a kiszolgáló nem szeretne alprotocolokat használni, nem szabad válaszként elküldenie asubprotocol
tulajdonságot. Az üres fejléc küldése érvénytelen.userId
:{auth-ed user ID}
Mivel a szolgáltatás névtelen kapcsolatokat tesz lehetővé, az
connect
esemény felelőssége, hogy a szolgáltatásnak az ügyfélkapcsolat felhasználói azonosítóját adja meg. A szolgáltatás beolvassa a felhasználói azonosítót a válasz hasznos adataibóluserId
, ha létezik. A kapcsolat megszakad, ha a felhasználói azonosító nem olvasható be a kérés jogcímeiből és azconnect
esemény válaszainak hasznos adataiból.groups
:{groups to join}
A tulajdonság kényelmes módot biztosít arra, hogy a felhasználó ezt a kapcsolatot egy vagy több csoporthoz adja hozzá. Ily módon nincs szükség másik hívásra, hogy ezt a kapcsolatot hozzáadja egy csoporthoz.
roles
:{roles the client has}
A tulajdonság lehetővé teszi a felsőbb rétegbeli webhook számára az ügyfél engedélyezését. A PubSub WebSocket-ügyfelek kezdeti engedélyeinek megadásához különböző szerepkörök tartoznak. Az engedélyekkel kapcsolatos részleteket az ügyfélengedélyek ismertetik.
HTTP/1.1 200 OK
ce-connectionState: eyJrZXkiOiJhIn0=
{
"groups": [],
"userId": "",
"roles": [],
"subprotocol": ""
}
Hibaválasz formátuma:
4xx
: Hiba, a rendszer a felsőbb réteg válaszát adja vissza az ügyfélkérés válaszaként.
HTTP/1.1 401 Unauthorized
Rendszeresemény connected
A szolgáltatás meghívja a felsőbb réteget, amikor az ügyfél befejezi a WebSocket kézfogását, és sikeresen csatlakozik.
ce-type
:azure.webpubsub.sys.connected
Content-Type
:application/json
ce-connectionState
:eyJrZXkiOiJhIn0=
A kérelem törzse üres JSON.
Kérelem formátuma:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.sys.connected
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: connected
ce-subprotocol: abc
ce-connectionState: eyJrZXkiOiJhIn0=
{}
Válaszformátum:
2xx
: sikeres válasz.
connected
aszinkron esemény, ha a válasz állapotkódja nem sikeres, a szolgáltatás hibát naplóz.
HTTP/1.1 200 OK
Rendszeresemény disconnected
disconnected
az esemény mindig akkor aktiválódik, amikor az ügyfélkérés befejeződik, ha a kapcsolódási esemény állapotkódot ad 2xx
vissza.
ce-type
:azure.webpubsub.sys.disconnected
Content-Type
:application/json
Kérelem formátuma:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.sys.disconnected
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: disconnected
ce-subprotocol: abc
ce-connectionState: eyJrZXkiOiJhIn0=
{
"reason": "{Reason}"
}
reason
Ez
reason
a cikk azt ismerteti, hogy az ügyfél miért bontja le a kapcsolatot.
Válaszformátum:
2xx
: sikeres válasz.
disconnected
aszinkron esemény, ha a válasz állapotkódja nem sikeres, a szolgáltatás hibát naplóz.
HTTP/1.1 200 OK
Felhasználói esemény message
az egyszerű WebSocket-ügyfelek számára
A szolgáltatás minden WebSocket-üzenetkerethez meghívja az eseménykezelőt.
ce-type
:azure.webpubsub.user.message
Content-Type
:application/octet-stream
bináris kerethez;text/plain
szövegkerethez;
A UserPayload az, amit az ügyfél küld.
Kérelem formátuma:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/octet-stream | text/plain | application/json
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.message
ce-source: /hubs/{hub}/client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub}
ce-eventName: message
ce-connectionState: eyJrZXkiOiJhIn0=
UserPayload
Sikeres válasz formátuma
- Állapotkód
204
: Siker tartalom nélkül.200
: Sikeresség, aUserResponsePayload
formátum a választól függContent-Type
.
Content-Type
:application/octet-stream
bináris kerethez;text/plain
szövegkerethez;- Fejléc
Content-Type
:application/octet-stream
bináris kerethez;text/plain
szövegkerethez; - Fejléc
ce-connectionState
: Ha ez az élőfej létezik, a kapcsolat kapcsolati állapota a fejléc értékére frissül. Csak a blokkoló események frissíthetik a kapcsolat állapotát. Az alábbi minta base64 kódolású JSON-sztringet használ a kapcsolat összetett állapotának tárolásához.
Ha igen Content-Type
application/octet-stream
, a szolgáltatás WebSocket-kerettel binary
küldi el UserResponsePayload
az ügyfelet. Ha igen Content-Type
text/plain
, a szolgáltatás WebSocket-kerettel text
küldi el UserResponsePayload
az ügyfelet.
HTTP/1.1 200 OK
Content-Type: application/octet-stream (for binary frame) or text/plain (for text frame)
Content-Length: nnnn
ce-connectionState: eyJrZXkiOiJhIn0=
UserResponsePayload
Hibaválasz formátuma
Ha az állapotkód nem sikeres, a rendszer hibaválasznak tekinti. A kapcsolat megszakadna, ha a message
válasz állapotkódja nem sikerül.
Egyéni felhasználói esemény {custom_event}
PubSub WebSocket-ügyfelek számára
A szolgáltatás minden érvényes egyéni eseményüzenethez meghívja az eseménykezelő webhookját.
1. eset: esemény küldése szöveges adatokkal:
{
"type": "event",
"event": "<event_name>",
"dataType" : "text",
"data": "text data"
}
Amit a felsőbb rétegbeli eseménykezelő az alábbihoz hasonlóan kap, a Content-Type
CloudEvents HTTP-kérése a text/plain
következőre vonatkozik: dataType
=text
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: text/plain
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
ce-subprotocol: json.webpubsub.azure.v1
ce-connectionState: eyJrZXkiOiJhIn0=
text data
2. eset: esemény küldése JSON-adatokkal:
{
"type": "event",
"event": "<event_name>",
"dataType" : "json",
"data": {
"hello": "world"
},
}
Amit a felsőbb rétegbeli eseménykezelő az alábbihoz hasonlóan kap, a Content-Type
CloudEvents HTTP-kérése a application/json
következőre vonatkozik: dataType
=json
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
ce-subprotocol: json.webpubsub.azure.v1
ce-connectionState: eyJrZXkiOiJhIn0=
{
"hello": "world"
}
3. eset: esemény küldése bináris adatokkal:
{
"type": "event",
"event": "<event_name>",
"dataType" : "binary",
"data": "aGVsbG8gd29ybGQ=" // base64 encoded binary
}
Amit a felsőbb rétegbeli eseménykezelő az alábbihoz hasonlóan kap, a Content-Type
CloudEvents HTTP-kérése a application/octet-stream
következőre vonatkozik: dataType
=binary
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/octet-stream
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
ce-subprotocol: json.webpubsub.azure.v1
<binary data>
Sikeres válasz formátuma
HTTP/1.1 200 OK
Content-Type: application/octet-stream | text/plain | application/json
Content-Length: nnnn
UserResponsePayload
- Állapotkód
204
: Siker tartalom nélkül.200
: Sikeresség, a PubSub WebSocket-ügyfélnek küldött adatok azContent-Type
;
- Fejléc
ce-connectionState
: Ha ez az élőfej létezik, a kapcsolat kapcsolati állapota a fejléc értékére frissül. Csak a blokkoló események frissíthetik a kapcsolat állapotát. Az alábbi minta base64 kódolású JSON-sztringet használ a kapcsolat összetett állapotának tárolásához. - Ha a fejléc
Content-Type
azapplication/octet-stream
, a szolgáltatás a base64-kódolt hasznos adatokkalbinary
dataType
együtt küldUserResponsePayload
vissza az ügyfélnek. Mintaválasz:{ "type": "message", "from": "server", "dataType": "binary", "data" : "aGVsbG8gd29ybGQ=" }
- Ha igen
Content-Type
text/plain
, a szolgáltatás a hasznos adatsztring használatávaltext
dataType
küldi elUserResponsePayload
az ügyfélnek. - Ha igen
Content-Type
application/json
, a szolgáltatás a válasz hasznos adattörzseként érték jogkivonattaldata
küldiUserResponsePayload
el az ügyfelet=dataType
json
.
Hibaválasz formátuma
Ha az állapotkód nem sikeres, a rendszer hibaválasznak tekinti. A kapcsolat megszakadna, ha a {custom_event}
válasz állapotkódja nem sikerül.
Következő lépések
Használja ezeket az erőforrásokat a saját alkalmazás létrehozásához: