Verwenden der @connections-Befehle in Ihrem Backend-Service - Amazon API Gateway

Verwenden der @connections-Befehle in Ihrem Backend-Service

Ihr Backend-Service kann die folgenden WebSocket-HTTP-Verbindungsanforderungen zum Senden einer Rückrufnachricht an einen verbundenen Client, zum Abrufen von Verbindungsinformationen oder zum Trennen der Clientverbindung nutzen.

Wichtig

Da für diese Anfragen die IAM-Autorisierung erforderlich ist, müssen Sie sich mit Signature Version 4 (SigV4) anmelden. Dazu können Sie die API Gateway-Verwaltungs-API verwenden. Weitere Informationen finden Sie unter ApiGatewayManagementApi.

Im folgenden Befehl müssen Sie {api-id} durch die tatsächliche API-ID ersetzen, die in der API-Gateway-Konsole angezeigt, oder vom AWS CLI-Befehl create-api zurückgegeben wird. Die Verbindung muss hergestellt werden, bevor Sie diesen Befehl ausführen können.

Um eine Rückrufnachricht zum Client zu senden, verwenden Sie Folgendes:

POST https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}

Sie können diese Anforderung mithilfe von Postman oder durch Aufruf von awscurl wie im folgenden Beispiel testen:

awscurl --service execute-api -X POST -d "hello world" https://{prefix}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}

Sie müssen den Befehl wie im folgenden Beispiel URL-codieren:

awscurl --service execute-api -X POST -d "hello world" https://aabbccddee.execute-api.us-east-1.amazonaws.com/prod/%40connections/R0oXAdfD0kwCH6w%3D

Zum Abrufen des neuesten Verbindungsstatus des Clients verwenden Sie:

GET https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}

Zum Trennen der Verbindung mit dem Client verwenden Sie:

DELETE https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}

Sie können mittels der $context-Variablen in Ihrer Integration eine Rückruf-URL dynamisch erstellen. Wenn Sie zum Beispiel die Lambda-Proxy-Integration mit einer Node.js-Lambda-Funktion verwenden, können Sie die URL wie folgt aufbauen und eine Nachricht an einen verbundenen Client senden:

import { ApiGatewayManagementApiClient, PostToConnectionCommand, } from "@aws-sdk/client-apigatewaymanagementapi"; export const handler = async (event) => { const domain = event.requestContext.domainName; const stage = event.requestContext.stage; const connectionId = event.requestContext.connectionId; const callbackUrl = `https://${domain}/${stage}`; const client = new ApiGatewayManagementApiClient({ endpoint: callbackUrl }); const requestParams = { ConnectionId: connectionId, Data: "Hello!", }; const command = new PostToConnectionCommand(requestParams); try { await client.send(command); } catch (error) { console.log(error); } return { statusCode: 200, }; };

Wenn Sie einen benutzerdefinierten Domainnamen für Ihre WebSocket-API verwenden, entfernen Sie die stage-Variable aus Ihrem Funktionscode.

Wenn Sie eine Rückrufnachricht senden, muss Ihre Lambda-Funktion über die Berechtigung verfügen, die API-Gateway-Management-API aufzurufen. Möglicherweise erhalten Sie eine Fehlermeldung mit dem Inhalt GoneException, wenn Sie eine Nachricht veröffentlichen, bevor die Verbindung hergestellt wurde oder nachdem der Client die Verbindung getrennt hat.