Adicionando Validação de Solicitação a implantações de API

Descubra como impedir que solicitações inválidas sejam enviadas para serviços de back-end, validando solicitações de entrada em uma política de solicitação de validação com o Gateway de API.

Normalmente, você deseja evitar colocar carga desnecessária em serviços de back-end enviando apenas solicitações válidas para esses serviços. Para evitar que solicitações inválidas sejam enviadas a serviços de back-end, você pode usar um gateway de API para validar solicitações recebidas em relação a uma política de solicitação de validação. Se uma solicitação não atender aos requisitos da política de validação, você poderá configurar o gateway de API para rejeitar a solicitação em vez de transmiti-la para o serviço de back-end direcionado. Em vez disso, o gateway de API envia uma resposta de código de erro 4xx ao cliente de API que enviou a solicitação.

Usando um gateway de API, você pode configurar políticas de solicitação de validação para verificar se:

  • a solicitação inclui cabeçalhos específicos
  • a solicitação inclui parâmetros de consulta específicos
  • o corpo da solicitação é de um tipo de conteúdo específico

Você pode controlar como um gateway de API aplica uma política de solicitação de validação especificando um modo de validação para a política:

  • No modo Impondo, o gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end. O gateway de API não envia solicitações que falham na validação para o serviço de back-end. O gateway de API envia uma resposta de código de erro 4xx para um cliente de API enviando uma solicitação que falha na validação. O gateway de API inclui entradas nos logs de execução para erros de validação.
  • No modo Permissivo, o gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação. Observe que as solicitações com falha na validação ainda são enviadas ao serviço de back-end. O gateway de API inclui entradas nos logs de execução para erros de validação. Use o modo Permissivo para avaliar o impacto provável da aplicação de uma política de solicitação de validação a um sistema já em produção, sem afetar os clientes da API que estão enviando as solicitações no momento.
  • No modo Desativado, o gateway de API não valida solicitações na política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

O gateway de API aplica políticas de solicitação de validação após políticas de solicitação CORS e após políticas de solicitação de autenticação e autorização, mas antes de políticas de solicitação de transformação.

Você pode adicionar políticas de solicitação de validação a uma especificação de implantação de API fazendo o seguinte:

  • usando a Console
  • editando um arquivo JSON

Usando a Console para Adicionar Políticas de Solicitação de Validação

Para adicionar políticas de solicitação de validação a uma especificação de implantação de API usando a Console:

  1. Crie ou atualize uma implantação de API usando a Console. Selecione a opção Totalmente Nova e insira os detalhes na página Informações Básicas.

    Para obter mais informações, consulte Implantando uma API em um Gateway de API por meio da Criação de uma Implantação de API e Atualizando um Gateway de API.

  2. Selecione Próximo e especifique opções de autenticação na página Autenticação.

    Para obter mais informações sobre opções de autenticação, consulte Adicionando Autenticação e Autorização às Implantações de API.

  3. Selecione Próximo e informe detalhes para rotas individuais na implantação de API na página Rotas.

  4. Na página Rotas, selecione a rota para a qual deseja especificar políticas de solicitação de validação.
  5. Selecione Mostrar Políticas de Solicitação de Rota.
  6. Para validar os cabeçalhos incluídos em uma solicitação ao gateway de API para a rota atual criando uma política de solicitação de validação de cabeçalho:
    1. Selecione o botão Adicionar ao lado de Validações de Cabeçalho e especifique os detalhes do primeiro cabeçalho na solicitação a ser validada:
      • Nome do Cabeçalho: O nome de um cabeçalho na solicitação a ser validada. Por exemplo, X-Username .
      • Obrigatório: Se o cabeçalho especificado deve estar presente na solicitação para que a solicitação seja considerada válida.
    2. (Opcional) Selecione Outro Cabeçalho e especifique cabeçalhos adicionais na solicitação a ser validada.
    3. Selecione Mostrar Opções Avançadas e selecione um Modo para especificar como a política de solicitação de validação de cabeçalho é aplicada:
      • Impondo: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam na validação para o serviço de back-end.
      • Permissivo: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação.
      • Desativado: O gateway de API não valida nenhuma solicitação em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

      Observe que Impondo é o modo de validação padrão.

    4. Selecione Adicionar Validações.
  7. Para validar os parâmetros de consulta incluídos em uma solicitação ao gateway de API para a rota atual criando uma política de solicitação de validação de parâmetro de consulta:
    1. Selecione o botão Adicionar ao lado de Validações de Parâmetro de Consulta e especifique detalhes do primeiro parâmetro de consulta na solicitação a ser validada:
      • Nome do Parâmetro: O nome de um parâmetro de consulta na solicitação a ser validada. Por exemplo, state .
      • Obrigatório: Se o parâmetro de consulta especificado deve estar presente na solicitação para que a solicitação seja considerada válida.
    2. (Opcional) Selecione Outro Parâmetro e especifique parâmetros de consulta adicionais na solicitação a ser validada.
    3. Selecione Mostrar Opções Avançadas e selecione um Modo para especificar como a política de solicitação de validação do parâmetro de consulta é aplicada:
      • Impondo: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam na validação para o serviço de back-end.
      • Permissivo: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação.
      • Desativado: O gateway de API não valida nenhuma solicitação em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

      Observe que Impondo é o modo de validação padrão.

    4. Selecione Adicionar Validações.
  8. Para validar o conteúdo no corpo de uma solicitação ao gateway de API para a rota atual criando uma política de solicitação de validação do corpo:
    1. Selecione o botão Adicionar ao lado de Validação do Corpo e especifique:
      • Obrigatório: Se o corpo de uma solicitação deve ser um dos tipos de conteúdo especificados para que a solicitação seja considerada válida.
      • Tipo de Mídia: Um tipo de conteúdo válido para o corpo de uma solicitação. Por exemplo, application/json, application/xml.
    2. (Opcional) Selecione Outro Tipo de Mídia e especifique tipos de conteúdo válidos adicionais para o corpo da solicitação.

      Se você especificar vários tipos de conteúdo, o corpo da solicitação deverá ser um dos tipos de conteúdo permitidos especificados para que a solicitação seja considerada válida.

    3. Selecione Mostrar Opções Avançadas e selecione um Modo para especificar como a política de solicitação de validação do corpo é aplicada:
      • Impondo: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam na validação para o serviço de back-end.
      • Permissivo: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação.
      • Desativado: O gateway de API não valida nenhuma solicitação em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

      Observe que Impondo é o modo de validação padrão.

    4. Selecione Adicionar Validações.
  9. Selecione Próximo para revisar os detalhes informados para rotas individuais.
  10. Selecione Criar ou Salvar Alterações para criar ou atualizar a implantação de API.
  11. (Opcional) Confirme se a API foi implantada com êxito, chamando-a (consulte Chamando uma API Implantada em um Gateway de API).

Editando um Arquivo JSON para Adicionar Políticas de Solicitação de Validação

Para adicionar políticas de solicitação de validação a uma especificação de implantação de API em um arquivo JSON:

  1. Usando seu editor JSON preferido, edite a especificação de implantação de API existente à qual você deseja adicionar políticas de solicitação de validação ou crie uma nova especificação de implantação de API (consulte Criando uma Especificação de Implantação de API).

    Por exemplo, a seguinte especificação básica de implantação de API define uma função simples sem servidor Hello World no OCI Functions como um único back-end:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. Insira uma seção requestPolicies após a seção backend da rota à qual você deseja que a política de solicitação de validação seja aplicada. Por exemplo:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {}
        }
      ]
    }
  3. Para validar os cabeçalhos incluídos em uma solicitação ao gateway de API para a rota atual, especifique uma política de solicitação de validação headerValidations:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerValidations": {
              "headers": {
                "name": "<header-name>",
                "required": <true|false>
              },
              "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>"
            }
          }
        }
      ]
    }

    em que:

    • "name":"<header-name>" é um cabeçalho na solicitação a ser validada. O nome especificado não faz distinção entre maiúsculas e minúsculas. Por exemplo, X-Username.
    • "required": <true|false> indica se o cabeçalho especificado por "name":"<header-name>" deve estar presente na solicitação para que a solicitação seja considerada válida.
    • "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>" indica como o gateway de API valida solicitações na política de solicitação de validação de cabeçalho, da seguinte forma:

      • ENFORCING: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end.
      • PERMISSIVE: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação.
      • DISABLED: O gateway de API não valida solicitações na política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

      Por exemplo, "validationMode": "PERMISSIVE". Observe que ENFORCING será usado como o modo de validação padrão se você não incluir "validationMode".

    Por exemplo:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerValidations": {
              "headers": {
                "name": "X-Username",
                "required": true
              },
              "validationMode": "ENFORCING"
            }
          }
        }
      ]
    }

    Neste exemplo, para que a solicitação seja considerada válida, a solicitação deve incluir o cabeçalho X-Username. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end.

  4. Para validar os parâmetros de consulta incluídos em uma solicitação ao gateway de API para a rota atual, especifique uma política de solicitação de validação queryParameterValidations:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterValidations": {
              "parameters": {
                "name": "<query-parameter-name>",
                "required": <true|false>
              },
              "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>"
            }
          }
        }
      ]
    }

    em que:

    • "name":"<query-parameter-name>" é um parâmetro de consulta na solicitação a ser validada. O nome especificado não faz distinção entre maiúsculas e minúsculas. Por exemplo, state.
    • "required": <true|false> indica se o parâmetro de consulta especificado por "name":"<query-parameter-name>" deve estar presente na solicitação para que a solicitação seja considerada válida.
    • "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>" indica como o gateway de API valida solicitações em relação à política de solicitação de validação de parâmetro de consulta, da seguinte forma:

      • ENFORCING: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end.
      • PERMISSIVE: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação.
      • DISABLED: O gateway de API não valida solicitações na política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

      Por exemplo, "validationMode": "PERMISSIVE". Observe que ENFORCING será usado como o modo de validação padrão se você não incluir "validationMode".

    Por exemplo:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterValidations": {
              "parameters": {
                "name": "state",
                "required": false
              },
              "validationMode": "ENFORCING"
            }
          }
        }
      ]
    }

    Neste exemplo, para que a solicitação seja considerada válida, a solicitação pode incluir opcionalmente o parâmetro de consulta state. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end.

  5. Para validar o conteúdo no corpo de uma solicitação ao gateway de API para a rota atual, especifique uma política de solicitação de validação bodyValidation:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "bodyValidation": {
              "required": true,
              "content": {
                "<media-type-1>": {
                  "validationType": "NONE"
                },
                "<media-type-2>": {
                  "validationType": "NONE"
                }            
              },
              "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>"
            }
          }
        }
      ]
    }

    em que:

    • "required": true indica que o tipo de conteúdo do corpo da solicitação deve ser um dos tipos de conteúdo especificados.
    • "content": {"<media-type-1>": {"validationType": "NONE"}, "<media-type-2>": {"validationType": "NONE"}} indica um ou mais tipos de conteúdo permitidos para o corpo da solicitação. O corpo da solicitação deve ser um dos tipos de conteúdo especificados. Por exemplo, application/json, application/xml. Somente NONE é suportado no momento para "validationType".
    • "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>" indica como o gateway de API valida solicitações na política de solicitação de validação do corpo, da seguinte forma:

      • ENFORCING: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end.
      • PERMISSIVE: O gateway de API valida todas as solicitações em relação à política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end, independentemente de elas passarem ou falharem na validação.
      • DISABLED: O gateway de API não valida solicitações na política de solicitação de validação. O gateway de API envia todas as solicitações ao serviço de back-end.

      Por exemplo, "validationMode": "PERMISSIVE". Observe que ENFORCING será usado como o modo de validação padrão se você não incluir "validationMode".

    Por exemplo:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "bodyValidation": {
              "required": true,
              "content": {
                "application/json": {
                  "validationType": "NONE"
                },
                "application/xml": {
                  "validationType": "NONE"
                }
              },
              "validationMode": "ENFORCING"
            }
          }
        }
      ]
    }

    Neste exemplo, para que a solicitação seja considerada válida, o tipo de conteúdo do corpo da solicitação deve ser application/json ou application/xml. O gateway de API só envia solicitações que passam pela validação para o serviço de back-end.

  6. Salve o arquivo JSON que contém a especificação de implantação de API.
  7. Use a especificação de implantação de API ao criar ou atualizar uma implantação de API das seguintes formas:

    • especificando o arquivo JSON na Console quando você selecionar a opção Carregar uma API existente
    • especificando o arquivo JSON em uma solicitação à API REST do serviço API Gateway

    Para obter mais informações, consulte Implantando uma API em um Gateway de API por meio da Criação de uma Implantação de API e Atualizando um Gateway de API.

  8. (Opcional) Confirme se a API foi implantada com êxito, chamando-a (consulte Chamando uma API Implantada em um Gateway de API).