Solicitar validação para APIs de WebSocket no API Gateway - Amazon API Gateway

Solicitar validação para APIs de WebSocket no API Gateway

É possível configurar o API Gateway para realizar a validação em uma solicitação de rota antes de prosseguir com a solicitação de integração. Se a validação falhar, o API Gateway falhará na solicitação sem chamar seu backend, enviará uma resposta de gateway “Corpo de solicitação incorreto” ao cliente e publicará os resultados da validação no CloudWatch Logs. Usar a validação dessa forma reduz chamadas desnecessárias para o backend da API.

Expressões de seleção de modelo

Você pode usar uma expressão de seleção de modelo para validar solicitações dinamicamente dentro da mesma rota. A validação de modelos ocorrerá se você fornecer uma expressão de seleção de modelo para integrações proxy ou não proxy. Talvez seja necessário definir o modelo $default como um fallback quando nenhum modelo correspondente for encontrado. Se não houver nenhum modelo correspondente e $default não estiver definido, a validação falhará. A expressão de seleção é semelhante a Route.ModelSelectionExpression e é avaliada como a chave de Route.RequestModels.

Ao definir uma rota para uma API WebSocket, você pode especificar uma expressão de seleção de modelo. Esta expressão é avaliada para selecionar o modelo a ser usado para a validação do corpo quando uma solicitação é recebida. A expressão é avaliada como uma das entradas em de uma rota requestmodels.

Um modelo é expresso como um esquema JSON e descreve a estrutura de dados do corpo da solicitação. A natureza dessa expressão de seleção permite que você escolha dinamicamente o modelo para validar com base no tempo de execução para uma rota específica. Para obter informações sobre como criar um modelo, consulte Modelos de dados para APIs REST.

Configurar a validação de solicitação usando o console do API Gateway

O seguinte exemplo mostra como configurar a validação da solicitação em uma rota.

Primeiro, crie um modelo e depois crie uma rota. Em seguida, configure a validação da solicitação na rota criada. Por fim, implante e teste a API. Para concluir este tutorial, você precisa de uma API de WebSocket com $request.body.action como a expressão de seleção de rota e um endpoint de integração para sua nova rota.

Você também precisa que o wscat se conecte à sua API. Para ter mais informações, consulte Use wscat para se conectar a uma API do WebSocket e enviar mensagens a ela.

Como criar um modelo
  1. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

  2. Escolha uma API de WebSocket.

  3. No painel de navegação principal, selecione Modelos.

  4. Escolha Criar modelo.

  5. Em Nome, digite emailModel.

  6. Em Tipo de conteúdo, insira application/json.

  7. Em Esquema do modelo, insira o seguinte modelo:

    { "$schema": "http://json-schema.org/draft-04/schema#", "type" : "object", "required" : [ "address"], "properties" : { "address": { "type": "string" } } }

    Este modelo exige que a solicitação contenha um endereço de e-mail.

  8. Escolha Salvar.

Nesta etapa, você cria uma rota para a API de WebSocket.

Para criar uma rota
  1. No painel de navegação principal, selecione Rotas.

  2. Escolha Create route (Criar rota).

  3. Em Route key (Chave de rota), insira sendMessage.

  4. Escolha um tipo de integração e especifique um endpoint de integração. Para ter mais informações, consulte Integrações para a API de WebSocket no API Gateway.

  5. Escolha Create route (Criar rota).

Nesta etapa, você configura a validação da solicitação para a rota sendMessage.

Para configurar a validação da solicitação
  1. Na guia Solicitação de rota, em Configurações de solicitação de rota, escolha Editar.

  2. Em Expressão de seleção de modelos, insira ${request.body.messageType}.

    O API Gateway usa a propriedade messageType para validar a solicitação de entrada.

  3. Escolha Adicionar modelo de solicitação.

  4. Em Chave do modelo, insira email.

  5. Em Modelo, escolha emailModel.

    O API Gateway valida as mensagens de entrada com a propriedade messageType definida como email em relação a este modelo.

    nota

    Se o API Gateway não combinar a expressão de seleção de modelo com uma chave do modelo, ele selecionará o modelo $default. Se não houver nenhum modelo $default, a validação falhará. Para APIs de produção, recomendamos que você crie um modelo $default.

  6. Escolha Salvar alterações.

Nesta etapa, você implanta e testa a API.

Para implantar e testar sua API
  1. Escolha Implantar API.

  2. Escolha o estágio desejado na lista suspensa ou insira o nome de um novo estágio.

  3. Escolha Implantar.

  4. No painel de navegação principal, selecione Estágios.

  5. Copie o URL WebSocket da API. O URL deve ser semelhante a wss://abcdef123.execute-api.us-east-2.amazonaws.com/production.

  6. Abra um novo terminal e execute o comando wscat com os parâmetros a seguir.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. Use o comando a seguir para testar a API.

    {"action": "sendMessage", "messageType": "email"}
    {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}

    O API Gateway falhará na solicitação.

    Use o próximo comando para enviar uma solicitação válida para sua API.

    {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}