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
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. {api-id}
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.