Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Služba Web PubSub doručuje události klienta do upstreamového webhooku pomocí vazby protokolu HTTP CloudEvents.
Data odeslaná ze služby Web PubSub na server jsou vždy ve formátu CloudEvents binary .
- Ověření webhooku
- Rozšíření atributů Web PubSub CloudEvents
- Události
- Blokování událostí
- Odblokování událostí
Ověření webhooku
Ověření webhooku se řídí CloudEvents. Požadavek vždy obsahuje WebHook-Request-Origin: xxx.webpubsub.azure.com v hlavičce.
Pokud cíl doručení povoluje doručení událostí, musí odpovědět na požadavek zahrnutím WebHook-Allowed-Origin hlavičky, například:
WebHook-Allowed-Origin: *
Nebo:
WebHook-Allowed-Origin: xxx.webpubsub.azure.com
Prozatím se nepodporuje funkce WebHook-Request-Rate a WebHook-Request-Callback.
Rozšíření atributů Web PubSub CloudEvents
Také jsme si poznamenali, že specifikace HTTP nyní sleduje podobný vzor tím, že už nenavrhuje, aby hlavičky HTTP rozšíření byly předpony X-.
Toto rozšíření definuje atributy používané web pubSub pro každou událost, kterou vytvoří.
Atributy
| Name | Typ | Popis | Příklad |
|---|---|---|---|
userId |
string |
Uživatel, který připojení autoroval | |
hub |
string |
Centrum, do které připojení patří | |
connectionId |
string |
ID připojení je jedinečné pro připojení klienta. | |
eventName |
string |
Název události bez předpony | |
subprotocol |
string |
Dílčí souhrn, který klient používá, pokud existuje | |
connectionState |
string |
Definuje stav připojení. Stejnou hlavičku odpovědi můžete použít k resetování hodnoty stavu. Více connectionState záhlaví není povoleno. Do base64 kódovat řetězcovou hodnotu, pokud obsahuje složité znaky uvnitř, base64(jsonString) například předat komplexní objekt pomocí tohoto atributu. |
|
signature |
string |
Podpis upstreamového webhooku, který ověří, jestli příchozí požadavek pochází z očekávaného původu. Služba vypočítá hodnotu pomocí primárního přístupového klíče i sekundárního přístupového HMAC klíče jako klíče: Hex_encoded(HMAC_SHA256(accessKey, connectionId)). Upstream by měl před zpracováním zkontrolovat, jestli je požadavek platný. |
Událost
Existují dva typy událostí. Jedna blokuje události, které služba čeká na pokračování odpovědi události. Jedním z nich je odblokování událostí, které služba nečeká na odpověď takové události před zpracováním další zprávy.
- Blokování událostí
- Odblokování událostí
Systémová connect událost
ce-type:azure.webpubsub.sys.connectContent-Type:application/json
Formát požadavku:
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-----"
}
]
}
Formát odpovědi na úspěch:
Hlavička
ce-connectionState: Pokud tato hlavička existuje, stav připojení tohoto připojení se aktualizuje na hodnotu hlavičky. Stav připojení může aktualizovat pouze blokující události. Následující ukázka používá řetězec JSON kódovaný v base64 k uložení komplexního stavu připojení.Stavový kód:
204: Úspěch bez obsahu.200: Úspěch, obsah by měl být formát JSON s následujícími povolenými vlastnostmi:subprotocolsUdálost
connectpředá subprotocol a ověřovací informace do upstreamu z klienta. Služba Web PubSub používá stavový kód k určení, jestli se požadavek upgraduje na protokol WebSocket.Pokud požadavek obsahuje
subprotocolsvlastnost, měl by server vrátit jeden dílčí souhrn, který podporuje. Pokud server nechce používat žádné dílčí souhrny, nemělsubprotocolby odeslat vlastnost v odpovědi. Odeslání prázdné hlavičky je neplatné.userId:{auth-ed user ID}Protože služba umožňuje anonymní připojení, je
connectzodpovědností události informovat službu o ID uživatele připojení klienta. Pokud existuje, služba načte ID uživatele z datové částiuserIdodpovědi. Připojení se zahodí, pokud ID uživatele nelze číst z deklarací identity požadavku aniconnectdatové části odpovědi události.groups:{groups to join}Vlastnost poskytuje pohodlný způsob, jak uživatel přidat toto připojení k jedné nebo více skupinám. Tímto způsobem není potřeba mít další volání pro přidání tohoto připojení do určité skupiny.
roles:{roles the client has}Vlastnost poskytuje způsob, jak upstream Webhook autorizovat klienta. Existují různé role k udělení počátečních oprávnění pro klienty PubSub WebSocket. Podrobnosti o oprávněních jsou popsány v oprávněních klienta.
HTTP/1.1 200 OK
ce-connectionState: eyJrZXkiOiJhIn0=
{
"groups": [],
"userId": "",
"roles": [],
"subprotocol": ""
}
Formát odpovědi na chybu:
4xx: Chyba, odpověď z upstreamu bude vrácena jako odpověď pro požadavek klienta.
HTTP/1.1 401 Unauthorized
Systémová connected událost
Služba volá upstream, když klient dokončí metodu handshake protokolu WebSocket a úspěšně se připojí.
ce-type:azure.webpubsub.sys.connectedContent-Type:application/jsonce-connectionState:eyJrZXkiOiJhIn0=
Text požadavku je prázdný JSON.
Formát požadavku:
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=
{}
Formát odpovědi:
2xx: odpověď na úspěch.
connected je asynchronní událost, pokud stavový kód odpovědi není úspěšný, služba zaznamená chybu.
HTTP/1.1 200 OK
Systémová disconnected událost
disconnected událost se vždy aktivuje, když se požadavek klienta dokončí, pokud událost připojení vrátí 2xx stavový kód.
ce-type:azure.webpubsub.sys.disconnectedContent-Type:application/json
Formát požadavku:
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}"
}
reasonPopisuje
reasondůvod, proč se klient odpojí.
Formát odpovědi:
2xx: odpověď na úspěch.
disconnected je asynchronní událost, pokud stavový kód odpovědi není úspěšný, služba zaznamená chybu.
HTTP/1.1 200 OK
Událost message uživatele pro jednoduché klienty WebSocket
Služba vyvolá upstream obslužné rutiny události pro každý rámec zprávy WebSocket.
ce-type:azure.webpubsub.user.messageContent-Type:application/octet-streampro binární rámec;text/plainpro textový rámec;
UserPayload je to, co klient odesílá.
Formát požadavku:
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
Formát odpovědi na úspěch
- Stavový kód
204: Úspěch bez obsahu.200: Úspěch, formát odpovědiUserResponsePayloadzávisí naContent-Typeodpovědi.
Content-Type:application/octet-streampro binární rámec;text/plainpro textový rámec;- Hlavička
Content-Type:application/octet-streampro binární rámeček;text/plainpro textový rámeček; - Hlavička
ce-connectionState: Pokud tato hlavička existuje, stav připojení tohoto připojení se aktualizuje na hodnotu hlavičky. Stav připojení může aktualizovat pouze blokující události. Následující ukázka používá řetězec JSON kódovaný v base64 k uložení složitého stavu připojení.
Pokud je application/octet-stream, Content-Type služba odešle UserResponsePayload klientovi pomocí binary rámce WebSocket. Pokud je text/plain, Content-Type služba odešle UserResponsePayload klientovi pomocí text rámce WebSocket.
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
Formát odpovědi na chybu
Pokud stavový kód není úspěšný, považuje se za chybovou odpověď. Pokud stavový kód odpovědi nebude úspěšný, připojení se zahodímessage.
Vlastní událost {custom_event} uživatele pro klienty PubSub WebSocket
Služba volá webhook obslužné rutiny události pro každou platnou vlastní zprávu události.
Případ 1: Odeslání události s textovými daty:
{
"type": "event",
"event": "<event_name>",
"dataType" : "text",
"data": "text data"
}
Co obslužná rutina upstreamové události přijímá jako v následujícím příkladu Content-Type , pro požadavek HTTP CloudEvents je text/plain určený 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
Případ 2: Odeslání události s daty JSON:
{
"type": "event",
"event": "<event_name>",
"dataType" : "json",
"data": {
"hello": "world"
},
}
Co obslužná rutina upstreamové události přijímá jako v následujícím příkladu Content-Type , pro požadavek HTTP CloudEvents je application/json určený 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"
}
Případ 3: Odeslání události s binárními daty:
{
"type": "event",
"event": "<event_name>",
"dataType" : "binary",
"data": "aGVsbG8gd29ybGQ=" // base64 encoded binary
}
Co obslužná rutina upstreamové události přijímá jako v následujícím příkladu Content-Type , pro požadavek HTTP CloudEvents je application/octet-stream určený 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>
Formát odpovědi na úspěch
HTTP/1.1 200 OK
Content-Type: application/octet-stream | text/plain | application/json
Content-Length: nnnn
UserResponsePayload
- Stavový kód
204: Úspěch bez obsahu.200: Úspěch, odesílání dat do klienta PubSub WebSocket závisí naContent-Type;
- Hlavička
ce-connectionState: Pokud tato hlavička existuje, stav připojení tohoto připojení se aktualizuje na hodnotu hlavičky. Stav připojení může aktualizovat pouze blokující události. Následující ukázka používá řetězec JSON kódovaný v base64 k uložení komplexního stavu připojení. - Pokud je hlavička
Content-Type, služba odešleUserResponsePayloadzpět klientovi, který používádataTypejakobinarys kódováním base64 datovéapplication/octet-streamčásti. Ukázková odpověď:{ "type": "message", "from": "server", "dataType": "binary", "data" : "aGVsbG8gd29ybGQ=" } - Pokud je
text/plaintomu takContent-Type, služba odešleUserResponsePayloadklientovi jakodataTypetexts řetězcem datové části. - Pokud je
application/json,Content-Typeslužba odešleUserResponsePayloadklientovi pomocídataType=jsontokenudatahodnoty jako tělo datové části odpovědi.
Formát odpovědi na chybu
Pokud stavový kód není úspěšný, považuje se za chybovou odpověď. Pokud stavový kód odpovědi nebude úspěšný, připojení se zahodí{custom_event}.
Další kroky
Pomocí těchto prostředků můžete začít vytvářet vlastní aplikaci: