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, comcurladicione-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
requestrecebido pelo proxy da API - Mensagem de resposta: o
responsedevolvido 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
addressna mensagem personalizada para o valor do parâmetro de consultaaddydo 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.