Uso de comandos de @connections en el servicio de backend - Amazon API Gateway

Uso de comandos de @connections en el servicio de backend

El servicio de backend puede utilizar las siguientes solicitudes HTTP de conexión de WebSocket para enviar un mensaje de devolución de llamada a un cliente conectado, obtener información sobre la conexión o desconectar el cliente.

importante

Estas solicitudes utilizan la autorización de IAM, por lo que debe firmarlas con Signature Version 4 (SigV4). Para hacerlo, puede usar la API de administración de API Gateway. Para obtener más información, consulte ApiGatewayManagementApi.

En el siguiente comando, tiene que sustituir {api-id} por el ID real de la API, que se muestra en la consola de API Gateway o se obtiene mediante el comando create-api de la AWS CLI. Debe establecer la conexión antes de utilizar este comando.

Para enviar un mensaje de devolución de llamada al cliente, utilice:

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

Puede probar esta solicitud mediante Postman o llamando a awscurl, tal y como se muestra en el siguiente ejemplo:

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

Tiene que codificar el comando como URL, tal y como se muestra en el siguiente ejemplo:

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

Para obtener el estado de conexión más reciente del cliente, utilice:

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

Para desconectar el cliente, utilice:

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

Puede crear una URL de devolución de llamada dinámicamente mediante el uso de las variables $context de su integración. Por ejemplo, si utiliza la integración de proxy de Lambda con una función de Lambda Node.js, puede crear la URL y enviar un mensaje a un cliente conectado como se indica a continuación:

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, }; };

Al enviar un mensaje de devolución de llamada, la función de Lambda debe tener permiso para llamar a la API de administración de puertas de enlace de API. Es posible que reciba un mensaje de error que contiene GoneException si publica un mensaje antes de que se establezca la conexión o después de que el cliente se haya desconectado.