Configurar uma rota $connect que requer um subprotocolo de WebSocket - Amazon API Gateway

Configurar uma rota $connect que requer um subprotocolo de WebSocket

Os clientes podem usar o campo Sec-WebSocket-Protocol para solicitar um subprotocolo WebSocket durante a conexão com sua API WebSocket. É possível configurar uma integração para a rota $connect para permitir conexões somente se um cliente solicitar um subprotocolo compatível com sua API.

A função demonstrativa do Lambda a seguir retorna o cabeçalho Sec-WebSocket-Protocol aos clientes. A função só estabelecerá uma conexão com sua API se o cliente especificar o subprotocolo myprotocol.

Para obter um modelo do AWS CloudFormation que cria essa API de exemplo e integração de proxy do Lambda, consulte ws-subprotocol.yaml.

export const handler = async (event) => { if (event.headers != undefined) { const headers = toLowerCaseProperties(event.headers); if (headers['sec-websocket-protocol'] != undefined) { const subprotocolHeader = headers['sec-websocket-protocol']; const subprotocols = subprotocolHeader.split(','); if (subprotocols.indexOf('myprotocol') >= 0) { const response = { statusCode: 200, headers: { "Sec-WebSocket-Protocol" : "myprotocol" } }; return response; } } } const response = { statusCode: 400 }; return response; }; function toLowerCaseProperties(obj) { var wrapper = {}; for (var key in obj) { wrapper[key.toLowerCase()] = obj[key]; } return wrapper; }

Você só poderá usar wscat para testar se sua API permite conexões se um cliente solicitar um subprotocolo compatível com sua API. Os comandos a seguir usam o sinalizador -s para especificar subprotocolos durante a conexão.

O comando a seguir tenta uma conexão com um subprotocolo incompatível. Como o cliente especificou o subprotocolo chat1, a integração do Lambda retorna um erro 400 e a conexão não obtém êxito.

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1 error: Unexpected server response: 400

O comando a seguir inclui um subprotocolo compatível na solicitação de conexão. A integração do Lambda permite a conexão.

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1,myprotocol connected (press CTRL+C to quit)

Para saber mais sobre como invocar APIs WebSocket, consulte Invocar APIs de WebSocket.