O quê
A política HTTPModifier pode alterar uma mensagem de pedido ou resposta existente.
A política permite-lhe realizar as seguintes ações nessas mensagens:
- Adicione novos parâmetros de formulário, cabeçalhos ou parâmetros de consulta a uma mensagem
- Remova cabeçalhos, parâmetros de consulta e parâmetros de formulário de uma mensagem
- Defina o valor das propriedades existentes numa mensagem
Com o HTTPModifier, pode adicionar, alterar ou remover propriedades do pedido ou da resposta. Em alternativa, pode usar o HTTPModifier para criar uma mensagem de pedido ou resposta personalizada e transmiti-la a um destino alternativo, conforme descrito no artigo Crie mensagens de pedido personalizadas.
A política HTTPModifier pode criar variáveis de fluxo com os seguintes elementos secundários:
A ordem pela qual organiza os elementos <Add>
, <Set>
e <Remove>
é importante. A política executa essas ações pela ordem em que aparecem na configuração da política. Se precisar de remover todos os cabeçalhos e, em seguida, definir um cabeçalho específico, deve incluir o elemento <Remove>
antes do elemento <Set>
.
Esta política é uma política padrão e pode ser implementada em qualquer tipo de ambiente. Para obter informações sobre os tipos de políticas e a disponibilidade com cada tipo de ambiente, consulte Tipos de políticas.
<HTTPModifier>
elemento
Define uma política HTTPModifier.
Valor predefinido | Consulte o separador Política predefinida abaixo |
Obrigatório? | Obrigatória |
Tipo | Objeto complexo |
Elemento principal | N/A |
Elementos subordinados |
<Add> <AssignTo> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
O elemento <HTTPModifier>
usa a seguinte sintaxe:
Sintaxe
O elemento <HTTPModifier>
usa a seguinte sintaxe:
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- All HTTPModifier child elements are optional --> <Add> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Can also be an empty array to remove all FormParams (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <!-- Can also be an empty array to remove all Headers (<Headers/>) --> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <Path>PATH</Path> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </HTTPModifier>
Política predefinida
O exemplo seguinte mostra as predefinições quando adiciona uma política HTTPModifier ao seu fluxo na IU do Apigee:
<HTTPModifier continueOnError="false" enabled="true" name="http-modifier-default"> <DisplayName>HTTP Modifier-1</DisplayName> <Properties/> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </HTTPModifier>
Quando insere uma nova política HTTPModifier na IU do Apigee, o modelo contém marcadores de posição para todas as operações possíveis. Normalmente, seleciona as operações que quer realizar com esta política e remove os restantes elementos secundários. Por exemplo, se quiser executar uma operação de adição, use o elemento <Add>
e remova <Remove>
e outros elementos secundários da política para a tornar mais legível.
Este elemento tem os seguintes atributos comuns a todas as políticas:
Atributo | Predefinição | Obrigatório? | Descrição |
---|---|---|---|
name |
N/A | Obrigatório |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
continueOnError |
falso | Opcional | Definido como false para devolver um erro quando uma política falha. Este comportamento é o esperado para a maioria das políticas. Definido como true para que a execução do fluxo continue mesmo depois de uma política falhar. Veja também:
|
enabled |
verdadeiro | Opcional | Defina como true para aplicar a política. Defina como false para desativar a política. A política não é aplicada, mesmo que permaneça anexada a um fluxo. |
async |
falso | Descontinuado | Este atributo foi descontinuado. |
A tabela seguinte fornece uma descrição geral dos elementos subordinados de
<HTTPModifier>
:
Elemento secundário | Obrigatório? | Descrição |
---|---|---|
Operações comuns | ||
<Add> |
Opcional | Adiciona informações ao objeto de mensagem especificado pelo elemento
<AssignTo> .
Para substituir cabeçalhos ou parâmetros existentes, use o elemento |
<Remove> |
Opcional | Elimina os elementos especificados da variável de mensagem especificada no elemento <AssignTo> . |
<Set> |
Opcional | Substitui os valores das propriedades existentes no pedido ou na resposta, que é especificado pelo elemento <AssignTo> .
|
Outros elementos secundários | ||
<AssignTo> |
Opcional | Especifica em que mensagem a política HTTPModifier opera. Pode ser o pedido ou a resposta padrão, ou pode ser uma nova mensagem personalizada. |
<IgnoreUnresolvedVariables> |
Opcional | Determina se o processamento é interrompido quando é encontrada uma variável não resolvida. |
Cada um destes elementos secundários é descrito nas secções que se seguem.
Exemplos
Os exemplos seguintes mostram algumas das formas como pode usar a política HTTPModifier:
1: Adicione um cabeçalho
O exemplo seguinte adiciona um cabeçalho ao pedido com o elemento
<Add>
. A variável VerifyAPIKey neste exemplo é gerada
pela política VerifyAPIKey:
<HTTPModifier name="HM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </HTTPModifier>
2: Modificar resposta
O exemplo seguinte modifica um objeto de resposta existente adicionando-lhe um cabeçalho:
<HTTPModifier name="HM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </HTTPModifier>
Este exemplo não cria uma nova mensagem. Em vez disso, modifica uma mensagem de resposta existente adicionando um cabeçalho HTTP.
Uma vez que este exemplo especifica response
como o nome da variável no elemento
<AssignTo>
, esta política modifica o objeto de resposta que foi originalmente
definido com os dados devolvidos pelo servidor de destino.
O cabeçalho HTTP adicionado à mensagem de resposta por esta política é derivado de uma variável preenchida pela política LookupCache. Por conseguinte, a mensagem de resposta modificada por esta política HTTPModifier contém um cabeçalho HTTP que indica se os resultados foram obtidos a partir da cache ou não. A definição de cabeçalhos na resposta pode ser útil para depurar e resolver problemas.
3: Remova o parâmetro de consulta
O exemplo seguinte remove o parâmetro de consulta apikey
do pedido:
<HTTPModifier name="HM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
É uma prática recomendada remover o parâmetro de consulta apikey
da mensagem de pedido quando usa a política VerifyAPIKey para autenticação do utilizador. Isto é feito para impedir que as informações importantes confidenciais sejam transmitidas ao destino de back-end.
Referência de elemento secundário
Esta secção descreve os elementos subordinados de <HTTPModifier>
.
<Add>
Adiciona informações ao pedido ou à resposta, que são especificadas pelo elemento <AssignTo>
.
O elemento <Add>
adiciona novas propriedades à mensagem que não existem na mensagem original. Tenha em atenção que o <Set>
também oferece esta funcionalidade. Para alterar os valores das propriedades existentes, use o elemento <Set>
.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento principal |
<HTTPModifier>
|
Elementos subordinados |
<FormParams> <Headers> <QueryParams> |
O elemento <Add>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Add> </HTTPModifier>
Exemplo 1
O exemplo seguinte usa o elemento <FormParams>
para obter os valores de
três parâmetros da string de consulta do pedido inicial e defini-los como parâmetros de formulário no
pedido do ponto final de destino:
<HTTPModifier name="HM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O exemplo seguinte usa o elemento <Headers>
para adicionar um cabeçalho partner-id
ao pedido que vai ser enviado para o ponto final de destino:
<HTTPModifier name="HM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 3
O exemplo seguinte usa o elemento <QueryParams>
para adicionar um único parâmetro de consulta com um valor estático ao pedido:
<HTTPModifier name="HM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </HTTPModifier>
Este exemplo usa <Add>
no fluxo prévio do pedido. Se analisar os resultados numa ferramenta, como a ferramenta de depuração, o pedido para https://example-target.com/get
torna-se https://example-target.com/get?myParam=42
.
Os elementos secundários de <Add>
suportam a substituição de strings dinâmicas, conhecida como
modelos de mensagens.
<FormParams>
(filho de <Add>
)
Adiciona novos parâmetros de formulário à mensagem de pedido. Este elemento não tem efeito numa mensagem de resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de <FormParam> elementos |
Elemento principal |
<Add>
|
Elementos subordinados |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo> </Add> </HTTPModifier>
Exemplo 1
O exemplo seguinte adiciona um único parâmetro de formulário (answer
) e um valor estático (42
) ao pedido:
<HTTPModifier name="HM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O exemplo seguinte obtém o valor do parâmetro de consulta name
e
adiciona-o ao pedido como um parâmetro de formulário e, em seguida, remove o parâmetro de consulta:
<HTTPModifier name="HM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name} </Add> <Remove> <QueryParam name="name"/> </Remove> </HTTPModifier>
Tenha em atenção que este exemplo não especifica um destino com <AssignTo>
. Esta política adiciona o parâmetro
apenas ao pedido.
Exemplo 3
O exemplo seguinte adiciona vários parâmetros de formulário ao pedido:
<HTTPModifier name="HM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Este exemplo obtém os parâmetros da string de consulta do pedido de origem e adiciona-os como parâmetros de formulário com nomes diferentes. Em seguida, remove os parâmetros de consulta originais. O Apigee envia o pedido modificado para o ponto final de destino.
Pode usar a ferramenta de depuração para analisar o fluxo. Vai ver que o corpo do pedido contém os dados do formulário codificados por URL, que foram originalmente transmitidos como parâmetros da string de consulta:
username=nick&zip_code=90210&default_language=en
Pode usar <FormParams>
apenas quando os seguintes critérios forem cumpridos:
- Verbos HTTP:
GET
,POST
- Tipo de mensagem: pedido
- Uma (ou ambas) das seguintes opções:
- Dados do formulário: definido para algum valor ou
""
(a string vazia). Por exemplo, comcurl
, adicione-d ""
ao seu pedido. - Cabeçalho
Content-Length
: definido como 0 (se não existirem dados no pedido original; caso contrário, o comprimento atual, em bytes). Por exemplo, comcurl
adicione-H "Content-Length: 0"
ao seu pedido.
- Dados do formulário: definido para algum valor ou
Por exemplo:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
Quando adiciona <FormParams>
, o Apigee define o cabeçalho Content-Type
do pedido como
application/x-www-form-urlencoded
antes de enviar a mensagem para o serviço de destino.
<Headers>
(filho de <Add>
)
Adiciona novos cabeçalhos ao pedido ou à resposta especificada, que é especificada pelo elemento <AssignTo>
.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de <Header> elementos |
Elemento principal |
<Add>
|
Elementos subordinados |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> </Add> </HTTPModifier>
Exemplo 1
O exemplo seguinte adiciona um cabeçalho partner-id
à mensagem de pedido e
atribui o valor da variável de fluxo verifyapikey.VAK-1.developer.app.partner-id
a esse cabeçalho.
<HTTPModifier name="HM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </HTTPModifier>
<QueryParams>
(filho de <Add>
)
Adiciona novos parâmetros de consulta ao pedido. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de <QueryParam> elementos |
Elemento principal |
<Add>
|
Elementos subordinados |
<QueryParam> |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Add> </HTTPModifier>
Exemplo 1
O exemplo seguinte adiciona o parâmetro de consulta myParam
ao pedido e atribui-lhe o valor
42
:
<HTTPModifier name="HM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </HTTPModifier>
Pode usar <QueryParams>
apenas quando os seguintes critérios forem cumpridos:
- Verbos HTTP:
GET
,POST
- Tipo de mensagem: pedido
Além disso, só pode definir parâmetros de consulta quando o atributo type
do elemento <AssignTo>
for uma mensagem de pedido. A definição destas no objeto de resposta não tem qualquer efeito.
Se definir uma matriz vazia de parâmetros de consulta na sua política
(<Add><QueryParams/></Add>
), a política não adiciona quaisquer parâmetros
de consulta. Isto é o mesmo que omitir <QueryParams>
.
<AssignTo>
Determina em que objeto a política HTTPModifier opera. As opções são as seguintes:
- Mensagem de pedido: o
request
recebido pelo proxy da API - Mensagem de resposta: o
response
devolvido pelo servidor de destino - Mensagem personalizada: um objeto de pedido ou resposta personalizado
Tenha em atenção que, em alguns casos, não pode alterar o objeto sobre o qual a política HTTPModifier atua.
Por exemplo, não pode usar <Add>
nem <Set>
para adicionar ou alterar parâmetros de consulta
(<QueryParams>
) ou parâmetros de formulário (<FormParams>
) na resposta. Só pode manipular os parâmetros de consulta e os parâmetros de formulário no pedido.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | String |
Elemento principal |
<HTTPModifier>
|
Elementos subordinados | Nenhum |
Se não especificar <AssignTo>
ou se especificar o elemento <AssignTo>
, mas não especificar um valor de texto para o elemento, a política atua no pedido ou na resposta predefinidos, que se baseiam no local onde a política é executada. Se a política for executada no fluxo de pedidos, afeta a mensagem de pedido. Se for executada no fluxo de respostas, a política afeta a resposta por predefinição.
O elemento <AssignTo>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo> </HTTPModifier>
Exemplo 1
O exemplo seguinte não especifica nenhuma mensagem no texto do elemento <AssignTo>
. Isto implica que a política vai agir na mensagem request
ou response
, consoante o local onde a política é executada.
<HTTPModifier name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/>-- no-op --> ... </HTTPModifier>
Se especificar createNew="false"
e não fornecer explicitamente um nome de mensagem, os outros atributos de <AssignTo>
são irrelevantes. Neste caso, é recomendável omitir completamente o elemento <AssignTo>
.
Exemplo 2
O exemplo seguinte cria um novo objeto de pedido, substituindo o objeto existente:
<HTTPModifier name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> ... </HTTPModifier>
Quando cria um novo objeto de pedido ou resposta, os outros elementos da política HTTPModifier (como <Add>
e <Set>
) atuam nesse novo objeto de pedido.
Pode aceder ao novo objeto de pedido noutras políticas mais tarde no fluxo ou enviar o novo objeto de pedido para um serviço externo com uma política ServiceCallout.
Exemplo 3
O exemplo seguinte cria um novo objeto de pedido denominado MyRequestObject
:
<HTTPModifier name="assignto-3"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> ... </HTTPModifier>
Quando cria um novo objeto de pedido ou resposta, os outros elementos da política HTTPModifier (como <Add>
e <Set>
) atuam nesse novo objeto de pedido.
Pode aceder ao novo objeto de pedido pelo nome noutras políticas mais tarde no fluxo ou enviar o novo objeto de pedido para um serviço externo com uma política ServiceCallout.
A tabela seguinte descreve os atributos de <AssignTo>
:
Atributo | Descrição | Obrigatório? | Tipo |
---|---|---|---|
createNew |
Determina se esta política cria uma nova mensagem quando atribui valores. Se Se
Se
|
Opcional | Booleano |
transport |
Especifica o tipo de transporte para o tipo de mensagem de pedido ou resposta. O valor predefinido é |
Opcional | String |
type |
Especifica o tipo da nova mensagem quando createNew é true . Os valores
válidos são request ou response .
O valor predefinido é |
Opcional | String |
<DisplayName>
Use em conjunto com o atributo name
para etiquetar a política no editor de proxy da IU de gestão com um nome diferente e mais natural.
O elemento <DisplayName>
é comum a todas as políticas.
Valor predefinido | N/A |
Obrigatório? | Opcional. Se omitir <DisplayName> , é usado o valor do atributo name da política. |
Tipo | String |
Elemento principal | <PolicyElement> |
Elementos subordinados | Nenhum |
O elemento <DisplayName>
usa a seguinte sintaxe:
Sintaxe
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Exemplo
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
O elemento <DisplayName>
não tem atributos nem elementos subordinados.
<IgnoreUnresolvedVariables>
Determina se o processamento é interrompido quando é encontrada uma variável não resolvida.
Valor predefinido | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento principal |
<HTTPModifier>
|
Elementos subordinados | Nenhum |
Definido como true
para ignorar as variáveis não resolvidas e continuar o processamento; caso contrário
false
. O valor predefinido é false
.
Definir <IgnoreUnresolvedVariables>
como true
é diferente de definir o <HTTPModifier>
's
continueOnError
como true
, uma vez que é específico para definir e obter valores de
variáveis. Se definir continueOnError
como true
, o Apigee ignora todos os erros e não apenas os erros encontrados ao usar variáveis.
O elemento <IgnoreUnresolvedVariables>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </HTTPModifier>
Exemplo 1
O exemplo seguinte define <IgnoreUnresolvedVariables>
como true
:
<HTTPModifier name="HM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </HTTPModifier>
Uma vez que <IgnoreUnresolvedVariables>
está definido como true
, se
a variável possibly-defined-variable
não estiver definida, esta política
não gera uma falha.
<Remove>
Remove cabeçalhos, parâmetros de consulta ou parâmetros de formulário de uma mensagem. Uma etiqueta vazia remove todos os parâmetros correspondentes, incluindo cabeçalhos, formparams e queryparams.
A mensagem afetada pode ser um pedido ou uma resposta. Especifica a mensagem sobre a qual o <Remove>
atua através do elemento <AssignTo>
.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento principal |
<HTTPModifier>
|
Elementos subordinados |
<FormParams> <Headers> <QueryParams> |
Um exemplo de utilização comum para <Remove>
é eliminar um parâmetro de consulta ou um cabeçalho que contenha informações confidenciais do objeto de pedido recebido para evitar transmiti-lo ao servidor de back-end.
O elemento <Remove>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Can also be an empty array to remove all FormParams (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <!-- Can also be an empty array to remove all Headers (<Headers/>) --> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Remove> </HTTPModifier>
Exemplo 1
O exemplo seguinte remove todos os parâmetros de formulário e um parâmetro de consulta do objeto request
:
<HTTPModifier name="HM-remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O exemplo seguinte remove tudo de um objeto de mensagem:
<HTTPModifier name="HM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </HTTPModifier>
Normalmente, só o faz se for usar o elemento <Set>
para
definir alguns valores de substituição na mensagem.
<FormParams>
(filho de <Remove>
)
Remove os parâmetros de formulário especificados do pedido. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <FormParam> ou uma matriz vazia |
Elemento principal |
<Remove>
|
Elementos subordinados |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Can also be an empty array to remove all FormParams (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> </Remove> </HTTPModifier>
Exemplo 1
O exemplo seguinte remove três parâmetros de formulário do pedido:
<HTTPModifier name="HM-remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O exemplo seguinte remove todos os parâmetros de formulário do pedido:
<HTTPModifier name="HM-remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 3
Se existirem vários parâmetros de formulário com o mesmo nome, use a seguinte sintaxe:
<HTTPModifier name="HM-remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Este exemplo remove f1
, f2
e o segundo valor de f3
. Se f3
tiver apenas um valor, não é removido.
Pode usar <FormParams>
apenas quando os seguintes critérios forem cumpridos:
- Tipo de mensagem: pedido
Content-Type
:application/x-www-form-urlencoded
<Headers>
(filho de <Remove>
)
Remove os cabeçalhos HTTP especificados do pedido ou da resposta, que são especificados pelo elemento <AssignTo>
.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <Header> ou uma matriz vazia |
Elemento principal |
<Remove>
|
Elementos subordinados |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Can also be an empty array to remove all Headers (<Headers/>) --> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> </Remove> </HTTPModifier>
Exemplo 1
O exemplo seguinte remove o cabeçalho user-agent
do pedido:
<HTTPModifier name="HM-remove-one-header"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O exemplo seguinte remove todos os cabeçalhos do pedido:
<HTTPModifier name="HM-remove-all-headers"> <Remove> <Headers/> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 3
Se existirem vários cabeçalhos com o mesmo nome, use a seguinte sintaxe:
<HTTPModifier name="HM-remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Este exemplo remove h1
, h2
e o segundo valor de h3
do pedido. Se h3
tiver apenas um valor, não é removido.
<QueryParams>
(filho de <Remove>
)
Remove os parâmetros de consulta especificados do pedido. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <QueryParam> ou uma matriz vazia |
Elemento principal |
<Remove>
|
Elementos subordinados |
<QueryParam> |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Remove> </HTTPModifier>
Exemplo 1
O exemplo seguinte remove um único parâmetro de consulta do pedido:
<HTTPModifier name="HM-remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O exemplo seguinte remove todos os parâmetros de consulta do pedido:
<HTTPModifier name="HM-remove-queryparams-2"> &tl;Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 3
Se existirem vários parâmetros de consulta com o mesmo nome, use a seguinte sintaxe:
<HTTPModifier name="HM-remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Este exemplo remove qp1
, qp2
e o segundo valor de qp3
do pedido. Se
qp3
tiver apenas um valor, não é removido.
Exemplo 4
O exemplo seguinte remove o parâmetro de consulta apikey
do pedido:
<HTTPModifier name="HM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </HTTPModifier>
Pode usar <QueryParams>
apenas quando os seguintes critérios forem cumpridos:
- Verbos HTTP:
GET
,POST
- Tipo de mensagem: pedido
<Set>
Define informações na mensagem de pedido ou resposta, que é especificada pelo elemento <AssignTo>
. <Set>
substitui os cabeçalhos ou os parâmetros de consulta ou de formulário que já existem na mensagem original, ou adiciona novos se não existirem.
Os cabeçalhos e os parâmetros de consulta e de formulário numa mensagem HTTP podem conter vários valores. Para adicionar
valores adicionais para um cabeçalho ou um parâmetro, use o elemento <Add>
.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento principal |
<HTTPModifier>
|
Elementos subordinados |
<FormParams> <Headers> <Path> <QueryParams> <StatusCode> <Verb> <Version> |
O elemento <Set>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <Path>PATH</Path> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </HTTPModifier>
Exemplo
O exemplo seguinte define um cabeçalho específico. Quando esta política é anexada no fluxo de pedidos, permite que o sistema a montante receba um cabeçalho adicional que não foi incluído no pedido de entrada original.
<HTTPModifier name="HM-Set-Header"> <Set> <Headers> <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header> </Headers> </Set> <AssignTo>request</AssignTo> </HTTPModifier>
<FormParams>
(filho de <Set>
)
Substitui os parâmetros de formulário existentes num pedido e substitui-os pelos novos valores que especificar com este elemento. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de <FormParam> elementos |
Elemento principal |
<Set>
|
Elementos subordinados |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> </Set> </HTTPModifier>
Exemplo 1
O exemplo seguinte define um parâmetro de formulário denominado myparam
com o valor da variável request.header.myparam
num novo pedido personalizado:
<HTTPModifier name="HM-set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request>>MyCustomRequest</AssignTo> </HTTPModifier>
Pode usar <FormParams>
apenas quando os seguintes critérios forem cumpridos:
- Verbo HTTP:
POST
- Tipo de mensagem: pedido
Se definir parâmetros de formulário vazios na sua política
(<Add><FormParams/></Add>
), a política não adiciona parâmetros
de formulário. Isto é o mesmo que omitir o <FormParams>
.
<Set>
altera o Content-Type
da mensagem para application/x-www-form-urlencoded
antes de a enviar para o ponto final de destino.
<Headers>
(filho de <Set>
)
Substitui os cabeçalhos HTTP existentes no pedido ou na resposta, que é especificado pelo elemento <AssignTo>
.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de <Header> elementos |
Elemento principal |
<Set>
|
Elementos subordinados |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> </Set> </HTTPModifier>
Exemplo 1
O exemplo seguinte define o cabeçalho x-ratelimit-remaining
para o valor da variável ratelimit.Quota-1.available.count
:
<HTTPModifier name="HM-Set-RateLimit-Header"> <Set> <Headers> <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header> </Headers> </Set> <AssignTo>response</AssignTo> </HTTPModifier>
Se definir cabeçalhos vazios na sua política (<Set><Headers/></Set>
), a política não define cabeçalhos. Isto
tem o mesmo efeito que omitir <Headers>
.
<Path>
(filho de <Set>
)
<QueryParams>
(filho de <Set>
)
Substitui os parâmetros de consulta existentes no pedido por novos valores. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | Matriz de <QueryParam> elementos |
Elemento principal |
<Set>
|
Elementos subordinados |
<QueryParam> |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Set> </HTTPModifier>
Exemplo 1
O exemplo seguinte define o parâmetro de consulta address
para o valor da variável request.header.address
:
<HTTPModifier name="HM-set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </HTTPModifier>
Pode usar <QueryParams>
apenas quando os seguintes critérios forem cumpridos:
- Verbos HTTP:
GET
,POST
- Tipo de mensagem: pedido
Se definir parâmetros de consulta vazios na sua política
(<Set><QueryParams/></Set>
), a política não define parâmetros de consulta. Isto é o mesmo que omitir <QueryParams>
.
<StatusCode>
(filho de <Set>
)
Define o código de estado na resposta. Este elemento não tem efeito num pedido.
Valor predefinido | "200" (quando o atributo createNew de <AssignTo> está definido como "true") |
Obrigatório? | Opcional |
Tipo | String ou VARIABLE |
Elemento principal |
<Set>
|
Elementos subordinados | Nenhum |
O elemento <StatusCode>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode> </Set> </HTTPModifier>
Exemplo 1
O exemplo seguinte define um código de estado simples:
<HTTPModifier name="HM-set-statuscode-404"> <Set> <StatusCode>404<<StatusCode> </Set> <AssignTo>response</AssignTo> </HTTPModifier>
Exemplo 2
O conteúdo de <StatusCode>
é tratado como um modelo de mensagem. Isto significa que um nome de variável entre chavetas será substituído no momento da execução pelo valor da variável referenciada, como mostra o exemplo seguinte:
<HTTPModifier name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo>response</AssignTo> </HTTPModifier>
Pode usar <StatusCode>
apenas quando os seguintes critérios forem cumpridos:
- Tipo de mensagem: resposta
<Verb>
(filho de <Set>
)
Define o verbo HTTP no pedido. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | String ou VARIABLE |
Elemento principal |
<Set>
|
Elementos subordinados | Nenhum |
O elemento <Verb>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </HTTPModifier>
Exemplo 1
O exemplo seguinte define um verbo simples no pedido:
<HTTPModifier name="HM-set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo>request</AssignTo> </HTTPModifier>
Exemplo 2
O conteúdo de <Verb>
é tratado como um modelo de mensagem. Isto significa que um nome de variável
entre chavetas é substituído no momento da execução pelo valor da variável
referenciada.
O exemplo seguinte usa uma variável para preencher um verbo:
<HTTPModifier name="HM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </HTTPModifier>
Pode usar <Verb>
apenas quando os seguintes critérios forem cumpridos:
- Tipo de mensagem: pedido
<Version>
(filho de <Set>
)
Define a versão HTTP num pedido. Este elemento não tem efeito numa resposta.
Valor predefinido | N/A |
Obrigatório? | Opcional |
Tipo | String ou VARIABLE |
Elemento principal |
<Set>
|
Elementos subordinados | Nenhum |
O elemento <Version>
usa a seguinte sintaxe:
Sintaxe
<HTTPModifier continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </HTTPModifier>
Exemplo 1
O exemplo seguinte define o número da versão como 1.1
:
<HTTPModifier name="HM-set-version-1"> <Set> <Version>1.1</Version> </Set> </HTTPModifier>
Exemplo 2
O exemplo seguinte usa uma variável entre chavetas para definir o número da versão:
<HTTPModifier name="HM-set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo>request</AssignTo> </HTTPModifier>
O conteúdo de <Version>
é tratado como um modelo de mensagem. Isto significa que um nome de variável entre chavetas é substituído no momento da execução pelo valor da variável referenciada.
Pode usar <Version>
apenas quando os seguintes critérios forem cumpridos:
- Tipo de mensagem: pedido
Crie mensagens de pedido personalizadas
Pode usar o HTTPModifier para criar uma mensagem de pedido personalizada. Depois de criar um pedido personalizado, pode usá-lo das seguintes formas:
- Aceder às respetivas variáveis noutras políticas
- Transmiti-la a um serviço externo
Para criar uma mensagem de pedido personalizada, use o elemento <AssignTo>
na sua política HTTPModifier. Defina createNew
como true
e especifique o nome da nova mensagem no corpo do elemento, como mostra o exemplo seguinte:
<HTTPModifier name="assignto-3"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> ... </HTTPModifier>
Por predefinição, o Apigee não faz nada com a mensagem de pedido personalizada. Depois de o criar, o Apigee continua o fluxo com o pedido original. Para usar o pedido personalizado, adicione uma política que use a mensagem de pedido e faça referência explícita à mensagem de pedido criada recentemente na configuração dessa política. Isto permite-lhe transmitir o pedido personalizado para um ponto final de serviço externo.
Os exemplos seguintes criam mensagens de pedido personalizadas:
Exemplo 1
O exemplo seguinte cria um objeto de pedido personalizado com HTTPModifier:
<HTTPModifier name="HTTPModifier-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </HTTPModifier>
Este exemplo:
- Cria um novo objeto de mensagem de pedido denominado
MyCustomRequest
. - No MyCustomRequest, esta política:
- Define o parâmetro de consulta
address
na mensagem personalizada para o valor do parâmetro de consultaaddy
do pedido recebido. - Define o verbo HTTP como
GET
.
- Define o parâmetro de consulta
- Define
<IgnoreUnresolvedVariables>
comofalse
. Quando<IgnoreUnresolvedVariables>
éfalse
, se uma das variáveis referenciadas na configuração da política não existir, o Apigee entra no estado de falha no fluxo da API.
Exemplo 2
Segue-se outro exemplo que demonstra como criar um objeto de pedido personalizado com HTTPModifier:
<HTTPModifier name="HTTPModifier-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> </Set> </HTTPModifier>
Este exemplo cria um novo pedido personalizado denominado partner.request
. Em seguida, define o
<Verb>
no novo pedido.
Pode aceder às várias propriedades de uma mensagem personalizada noutra política HTTPModifier que ocorre mais tarde no fluxo. O exemplo seguinte obtém o valor de um cabeçalho de uma resposta personalizada denominada e coloca-o num novo cabeçalho na mensagem de pedido:
<HTTPModifier name="HM-Set-Header"> <AssignTo>request</AssignTo> <Set> <Headers> <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header> </Headers> </Set> </HTTPModifier>
Códigos de erro
Esta secção descreve os códigos de falha e as mensagens de erro devolvidas, bem como as variáveis de falha definidas pelo Apigee quando esta política aciona um erro. Estas informações são importantes para saber se está a desenvolver regras de falhas para tratar falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e o artigo Processamento de falhas.
Erros de tempo de execução
Estes erros podem ocorrer quando a política é executada.
Código de falha | Estado de HTTP | Causa | Corrigir |
---|---|---|---|
entities.UnresolvedVariable |
500 |
A variável do modelo de mensagem está indefinida ou fora do âmbito. | |
steps.httpmodifier.InvalidStatusCode |
500 |
O valor resolvido do código de estado não é válido. Consulte a string de falha para mais informações. | build |
Erros de implementação
Estes erros podem ocorrer quando implementa um proxy que contém esta política.
Nome do erro | Causa | Corrigir |
---|---|---|
InvalidIndex |
Se o índice especificado nos elementos <Remove> da política HTTPModifier for 0 ou um número negativo, a implementação do proxy de API falha. |
build |
Variáveis de falha
Estas variáveis são definidas quando esta política aciona um erro no tempo de execução. Para mais informações, consulte o artigo O que precisa de saber sobre os erros de políticas.
Variáveis | Onde | Exemplo |
---|---|---|
httpmodifier.POLICY_NAME.failed |
POLICY_NAME é o nome especificado pelo utilizador da política que gerou a falha. | httpmodifier.HM-SetResponse.failed = true |
Exemplo de resposta de erro
{ "fault":{ "detail":{ "errorcode":"steps.httpmodifier.InvalidStatusCode" }, "faultstring":"HTTPModifier[HM-SetResponse]: Invalid status code bad_request" } }
Exemplo de regra de falha
<FaultRule name="HTTPModifier Faults"> <Step> <Name>HM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "InvalidStatusCode")</Condition> </Step> <Condition>(httpmodifier.failed = true)</Condition> </FaultRule>
Esquemas
Cada tipo de política é definido por um esquema XML (.xsd
). Para referência,
os esquemas de políticas
estão disponíveis no GitHub.