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:
- 
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. 
- 
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. 
- 
Selecione Próximo e informe detalhes para rotas individuais na implantação de API na página Rotas. 
- Na página Rotas, selecione a rota para a qual deseja especificar políticas de solicitação de validação.
- Selecione Mostrar Políticas de Solicitação de Rota.
- 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:- 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.
 
- Nome do Cabeçalho: O nome de um cabeçalho na solicitação a ser validada. Por exemplo, 
- (Opcional) Selecione Outro Cabeçalho e especifique cabeçalhos adicionais na solicitação a ser validada.
- 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. 
- Selecione Adicionar Validações.
 
- 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:
- 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:- 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.
 
- Nome do Parâmetro: O nome de um parâmetro de consulta na solicitação a ser validada. Por exemplo, 
- (Opcional) Selecione Outro Parâmetro e especifique parâmetros de consulta adicionais na solicitação a ser validada.
- 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. 
- Selecione Adicionar Validações.
 
- 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:
- 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:- 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.
 
- (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. 
- 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. 
- Selecione Adicionar Validações.
 
- Selecione o botão Adicionar ao lado de Validação do Corpo e especifique:
- Selecione Próximo para revisar os detalhes informados para rotas individuais.
- Selecione Criar ou Salvar Alterações para criar ou atualizar a implantação de API.
- (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:
- 
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" } } ] }
- 
Insira uma seção requestPoliciesapós a seçãobackendda 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": {} } ] }
- 
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 queENFORCINGserá 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.
- 
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 queENFORCINGserá 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.
- 
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": trueindica 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 queENFORCINGserá 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. 
- Salve o arquivo JSON que contém a especificação de implantação de API.
- 
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. 
- (Opcional) Confirme se a API foi implantada com êxito, chamando-a (consulte Chamando uma API Implantada em um Gateway de API).