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
requestPolicies
após a seçãobackend
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": {} } ] }
-
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 queENFORCING
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. -
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 queENFORCING
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. -
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
. SomenteNONE
é 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 queENFORCING
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.
- 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).