Esta página se aplica à Apigee e à Apigee híbrida.
  
    Confira a documentação da 
    Apigee Edge.
  
  
       
  
Visão geral
A política do DataCapture captura os dados, como payload, cabeçalhos HTTP e parâmetros de caminho ou consulta, de um proxy de API para uso no Analytics. É possível usar os dados capturados nos relatórios personalizados do Analytics e implementar as regras de monetização e monitoramento.
Esta é uma Política extensível. O uso dela pode ter implicações no custo ou na utilização, dependendo da sua licença da Apigee. Para informações sobre tipos de política e implicações de uso, consulte Tipos de política.
Recurso Coletor de dados
Para usar a política DataCapture, crie primeiro um
    recurso REST do
Coletor de dados. Para ver as etapas de criação de um recurso coletor de dados usando a IU da Apigee e
    a API Apigee, consulte
    Como criar um coletor de dados.
<DataCapture>
  O elemento <DataCapture> define uma política DataCapture.
<DataCapture async="true" continueOnError="true" enabled="true" name="DC">
Aqui está um exemplo de uma política DataCapture:
<DataCapture name="DC-1"> <Capture> <DataCollector>dc_data_collector</DataCollector> <Collect ref="my_data_variable" /> </Capture> </DataCapture>
O principal elemento da política DataCapture é o elemento <Capture>, que especifica os meios de captura dos dados. Ela tem dois elementos filhos obrigatórios:
- O elemento <DataCollector>, que especifica um recurso REST do coletor de dados. Neste caso, o recurso é chamado dedc_data_collector.
- O elemento <Collect>, que especifica os meios de captura dos dados.
Neste exemplo simples, os dados são extraídos de uma variável chamada my_data_variable, que foi criada em outro lugar no proxy.
      A variável é especificada pelo atributo ref.
O elemento <Collect> também fornece outras maneiras de capturar dados de várias fontes por meio dos elementos filhos.
   Consulte os Exemplos para ver mais maneiras de como capturar dados com a política DataCapture.
O elemento DataCapture tem a seguinte sintaxe.
<DataCapture name="capturepayment" continueOnError="false" enabled="true"> <DisplayName>Data-Capture-Policy-1</DisplayName> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <ThrowExceptionOnLimit>false</ThrowExceptionOnLimit> <!-- Existing Variable --> <Capture> <Collect ref="existing-variable" default="0"></Collect> <DataCollector>dc_1</DataCollector> </Capture> <!-- JSONPayload --> <Capture> <DataCollector>dc_2</DataCollector> <Collect default="0"> <Source>request</Source> <JSONPayload> <JSONPath>result.var</JSONPath> </JSONPayload> </Collect> </Capture> <!-- URIPath --> <Capture> <DataCollector>dc_3</DataCollector> <Collect default="0"> <URIPath> <!-- All patterns must specify a single variable to extract named $ --> <Pattern ignoreCase="false">/foo/{$}</Pattern> <Pattern ignoreCase="false">/foo/bar/{$}</Pattern> </URIPath> </Collect> </Capture> </DataCapture>
Este elemento tem os seguintes atributos comuns a todas as políticas:
| Atributo | Padrão | Obrigatório? | Descrição | 
|---|---|---|---|
| name | N/A | Valor | O nome interno da política. O valor do atributo  Opcionalmente, use o elemento  | 
| continueOnError | falso | Opcional | Defina como falsepara retornar um erro quando uma política falhar. Esse é o comportamento esperado para
          a maioria das políticas. Defina comotruepara que a execução do fluxo continue, mesmo depois que uma política
            falhar. Consulte também: | 
| enabled | true | Opcional | Defina como truepara aplicar a política. Defina comofalsepara desativar a política. A política não será aplicada mesmo que permaneça vinculada a um fluxo. | 
| async | falso | Obsoleto | Esse atributo está obsoleto. | 
A tabela a seguir fornece uma descrição de alto nível dos elementos filhos de <DataCapture>.
| Elemento filho | Obrigatório | Descrição | 
|---|---|---|
| <Capture> | Obrigatório | Captura os dados de uma variável especificada. | 
Exemplos
Os exemplos a seguir ilustram várias maneiras de usar a política DataCapture.
Como capturar dados para uma variável incorporada
O exemplo de código abaixo ilustra como capturar dados para uma variável incorporada, message.content, que contém o conteúdo da solicitação, da resposta ou da mensagem de erro. Consulte Variáveis de fluxo para obter mais informações sobre variáveis incorporadas.
<DataCapture name="DC-FullMessage">
    <Capture>
        <DataCollector>dc_data_collector</DataCollector>
        <Collect ref="message.content" />
    </Capture>
</DataCapture>No código acima, o atributo ref do elemento </Collect> especifica a variável a ser capturada, que, neste exemplo, é chamada de "message.content".
  
A amostra captura os dados com um elemento <Capture>,
  que também contém um elemento <DataCollector>
  que especifica o nome do recurso do coletor de dados.
Como capturar dados in-line
O próximo exemplo mostra como capturar dados in-line usando <JSONPayload>, um elemento filho do elemento <Collect>.
<DataCapture name="DC-Currency"> <Capture> <DataCollector>dc_data_collector<DataCollector> <Collect> <JSONPayload> <JSONPath>$.results[0].currency</JSONPath> </JSONPayload> </Collect> </Capture> </DataCapture>
No código acima:
- O elemento <JSONPayload>especifica a mensagem formatada em JSON da qual o valor da variável será extraído.
- O elemento <JSONPath>especifica o caminho JSON usado para extrair o valor da mensagem, que neste caso é$.results[0].currency.
Para ilustrar, suponha que o valor extraído quando a mensagem foi recebida tenha sido 1120. Desse modo, a entrada resultante enviada ao Analytics seria
{
    "dc_data_collector": "1120"
}<Capture>
O elemento <Capture> especifica os meios de captura dos dados.
<Capture />
A tabela a seguir fornece uma descrição de alto nível dos elementos filhos de <Capture>.
| Elemento filho | Obrigatório? | Descrição | 
|---|---|---|
| <DataCollector> | Obrigatório | Especifica o recurso Coletor de dados. | 
| <Collect> | Obrigatório | Especifica os meios de captura dos dados. | 
<DataCollector>
O elemento <DataCollector> especifica o
recurso coletor de dados.
<DataCollector>dc_data_collector</DataCollector>
<DataCollector>.
  | Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| escopo | Especifique esse atributo e defina o valor como  | N/A | Opcional | String | 
O corpo do elemento <DataCollector> contém o nome do
  recurso Coletor de dados.
<Collect>
O elemento <Collect> especifica os meios de captura dos dados.
<Collect ref="existing-variable" default="0"/>
A tabela a seguir descreve os atributos do elemento <Collect>.
| Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| ref | A variável para que você está capturando os dados. | N/A | Opcional: se reffor omitido, exatamente um dos itens a seguir precisa ser especificado:QueryParam,Header,FormParameURIPath,JSONPayloadouXMLPayload. | String | 
| padrão | Especifica o valor que será enviado ao Analytics caso o valor da variável não seja preenchido no ambiente de execução. Por exemplo, se você definir default="0", o valor enviado ao Analytics será 0. | Se você não especificar o valor de defaulte o valor da variável não for preenchido no ambiente de execução, o valor enviado ao Analytics seránullpara uma variável numérica ou"Not set"para uma variável de string. | Obrigatório | String | 
É possível capturar os dados de uma variável atual usando o atributo ref ou pelos elementos filhos <Collect>.
Elementos filhos de <Collect>
  A tabela a seguir fornece uma descrição de alto nível dos elementos filhos de <Collect>:
| Elemento filho | Obrigatório? | Descrição | 
|---|---|---|
| <Source> | Opcional | Especifica a variável a ser analisada. | 
| <URIPath> | Opcional | Extrai um valor de proxy.pathsuffixde uma mensagem de origem request. | 
| <QueryParam> | Opcional | Extrai um valor do parâmetro de consulta especificado de uma mensagem de origem request. | 
| <Header> | Opcional | Extrai um valor do cabeçalho HTTP especificado da mensagem request ou response especificada. | 
| <FormParam> | Opcional | Extrai um valor do parâmetro de formulário especificado da mensagem request ou response especificada. | 
| <JSONPayload> | Opcional | Especifica a mensagem formatada em JSON da qual o valor da variável será extraído. | 
| <XMLPayload> | Opcional | Especifica a mensagem em formato XML da qual o valor da variável será extraído. | 
<Source>
Especifica uma variável que nomeia a mensagem a ser analisada. O valor de
  <Source> é definido por padrão como message. O valor message
  diferencia o contexto. Em um fluxo de solicitação, message resolve a mensagem de solicitação. Em
  um fluxo de resposta, message é resolvido para a mensagem de resposta.
  Se a variável especificada em <Source> não puder ser resolvida ou se for resolvida para um tipo que não seja de mensagem,
  a política não vai responder.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | String | 
| Elemento pai | <Collect> | 
| Elemento filho | N/A | 
<Source >request</Source>
<URIPath>
Extrai um valor de proxy.pathsuffix de uma mensagem de origem request. O caminho aplicado ao
  padrão é o proxy.pathsuffix, que não inclui o caminho base para o proxy de API. Se a mensagem de origem for resolvida como um tipo de mensagem de response, o elemento não fará nada.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | Complexo | 
| Elemento pai | <Collect> | 
| Elemento filho | <pattern> | 
Atributos
| Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| ignoreCase | Especifica para ignorar a correspondência de maiúsculas e minúsculas. | falso | Opcional | Booleano | 
<Collect> <URIPath> <Pattern ignoreCase="false">/foo/{$}</Pattern> </URIPath> </Collect>
É possível usar vários elementos <Pattern>:
<URIPath> <Pattern ignoreCase="false">/foo/{$}</Pattern> <Pattern ignoreCase="false">/foo/bar/{$}</Pattern> </URIPath>
<QueryParam>
Extrai um valor do parâmetro de consulta especificado de uma mensagem de origem de request. Se a mensagem de origem for resolvida como um tipo de mensagem de response, o elemento não fará nada.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | Complexo | 
| Elemento pai | <Collect> | 
| Elemento filho | <pattern> | 
Atributos
| Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| name | Especifica o nome do parâmetro de consulta. Se vários parâmetros de consulta tiverem o mesmo nome, use a referência indexada, em que a primeira instância do parâmetro de consulta não tem índice, a segunda está no índice 2, a terceira no índice 3 etc. | N/A | Obrigatório | String | 
<Collect> <QueryParam name="code"> <Pattern ignoreCase="true">{$}</Pattern> </QueryParam> </Collect>
Se vários parâmetros de consulta tiverem o mesmo nome, use índices para referenciar os parâmetros:
<Collect> <QueryParam name="code.2"> <Pattern ignoreCase="true">{$}</Pattern> </QueryParam> </Collect>
Observação: é necessário especificar uma única variável chamada {$}.
Pode haver vários elementos Pattern exclusivos, mas o primeiro padrão correspondente será resolvido para uma solicitação específica.
<Header>
Extrai um valor do cabeçalho HTTP especificado da mensagem request ou response especificada. Se vários cabeçalhos tiverem o mesmo nome, os valores serão armazenados em uma matriz.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | Complexo | 
| Elemento pai | <Collect> | 
| Elemento filho | <pattern> | 
Atributos
| Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| name | Especifica o nome do cabeçalho a partir daquele que você extrai o valor. Se vários
        cabeçalhos tiverem o mesmo nome, use a referência indexada, em que a primeira instância do
        cabeçalho não tem índice, a segunda está no índice 2, a terceira no índice 3 etc. Use .valuespara receber todos os cabeçalhos na matriz. | N/A | Obrigatório | String | 
<Collect>
    <Header name="my_header">
        <Pattern ignoreCase="false">Bearer {$}</Pattern>
    </Header>
</Collect>Se vários cabeçalhos tiverem o mesmo nome, use índices para referenciar cabeçalhos individuais na matriz:
<Collect>
    <Header name="my_header.2">
        <Pattern ignoreCase="true">{$}</Pattern>
    </Header>
</Collect>Ou o seguinte para listar todos os cabeçalhos na matriz:
<Collect>
    <Header name="my_header.values">
        <Pattern ignoreCase="true">{$}</Pattern>
    </Header>
</Collect><FormParam>
Extrai um valor do parâmetro de formulário especificado da mensagem request ou response especificada. Os parâmetros de formulário podem ser extraídos somente quando o cabeçalho Content-Type da mensagem especificada for application/x-www-form-urlencoded.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | Complexo | 
| Elemento pai | <Collect> | 
| Elemento filho | <pattern> | 
Atributos
| Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| name | O nome do parâmetro de formulário do quem você extrai o valor. | N/A | Opcional | String | 
<Collect> <FormParam name="greeting"> <Pattern>hello {$}</Pattern> </FormParam> </Collect>
<JSONPayload>
Especifica a  mensagem formatada em JSON da qual o valor da variável será extraído. A extração  de JSON é realizada somente quando o cabeçalho Content-Type da mensagem for application/json.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | Complexo | 
| Elemento pai | <Collect> | 
| Elemento filho | <JSONPath> | 
<Collect> <JSONPayload> <JSONPath>$.results[0].currency</JSONPath> </JSONPayload> </Collect>
<JSONPath>
Elemento filho obrigatório do elemento <JSONPayload>. Especifica o caminho JSON usado para extrair um valor de uma mensagem formatada em JSON. 
| Valor padrão | N/A | 
| Obrigatório? | Obrigatório | 
| Tipo | String | 
| Elemento pai | <JSONPayload> | 
| Elemento filho | N/A | 
<JSONPath>$.rss.channel.title</JSONPath>
<XMLPayload>
Especifica a mensagem em formato XML da qual o valor da variável será extraído.  Os payloads XML são extraídos somente quando o cabeçalho Content-Type da mensagem for text/xml, application/xml ou application/*+xml.
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | Complexo | 
| Elemento pai | <Collect> | 
| Elemento filho | <Namespaces><XPath> | 
A tabela a seguir fornece uma descrição de alto nível dos elementos filhos de <XMLPayload>.
| Elemento filho | Obrigatório? | Descrição | 
|---|---|---|
| <Namespaces> | Opcional | Especifica zero ou mais namespaces a serem usados na avaliação de XPath. | 
| <XPath> | Obrigatório | Especifica o XPath definido para a variável. | 
<Collect> <XMLPayload> <Namespaces> <Namespace prefix="soap">http://schemas.xmlsoap.org/soap/envelope/</Namespace> <Namespace prefix="ns1">http://ns1.example.com/operations</Namespace> </Namespaces> <!-- get the local name of the SOAP operation --> <XPath>local-name(/soap:Envelope/soap:Body/ns1:*[1])</XPath> </XMLPayload> </Collect>
<Namespaces>
Especifica o conjunto de namespaces que podem ser usados na expressão XPath. Por exemplo:
<Collect> <XMLPayload> <Namespaces> <Namespace prefix="maps">http://maps.example.com</Namespace> <Namespace prefix="places">http://places.example.com</Namespace> </Namespaces> <XPath>/maps:Directions/maps:route/maps:leg/maps:endpoint/places:name</XPath> </XMLPayload> </Collect>
Se você não estiver usando namespaces nas expressões XPath, omita ou comente o
  elemento <Namespaces>, como no exemplo a seguir:
<Collect> <XMLPayload> <!-- <Namespaces/> --> <XPath>/Directions/route/leg/name</XPath> </XMLPayload> </Collect>
<Namespace>
Especifica um namespace e um prefixo correspondente para uso dentro da expressão XPath. Por exemplo:
| Valor padrão | N/A | 
| Obrigatório? | Opcional | 
| Tipo | String | 
| Elemento pai | <Namespaces> | 
| Elemento filho | N/A | 
Atributos
| Atributo | Descrição | Padrão | Obrigatório? | Tipo | 
|---|---|---|---|---|
| prefix | O prefixo que você usa para se referir ao namespace na expressão xpath. Ele não precisa ser o mesmo prefixo usado no documento XML original. | N/A | Obrigatório | String | 
<Collect> <XMLPayload> <Namespaces> <Namespace prefix="maps">http://maps.example.com</Namespace> </Namespaces> <XPath>/maps:Directions/maps:route/maps:leg/maps:endpoint</XPath> </XMLPayload> </Collect>
<XPath>
Elemento filho obrigatório do elemento XMLPayload. Especifica o XPath definido para a variável. Somente expressões XPath 1.0 são compatíveis.
| Valor padrão | N/A | 
| Obrigatório? | Obrigatório | 
| Tipo | String | 
| Elemento pai | <XMLPayload> | 
| Elemento filho | N/A | 
<XPath>/test/example</XPath>
Observação: se você usar namespaces nas suas expressões XPath, declare os namespaces na seção <XMLPayload><Namespaces>da política.
<ThrowExceptionOnLimit>
O elemento <ThrowExceptionOnLimit> especifica o que acontece quando os limites
  de captura sobre o número de variáveis ou o tamanho máximo de uma variável são atingidos. Consulte
   Como aplicar limites de captura.
O valor de <ThrowExceptionOnLimit> pode ser um dos seguintes:
- false: os dados das variáveis são enviados ao Google Analytics.
- true: uma mensagem de erro é retornada, e os dados não são enviados ao Google Analytics.
Referência de erros
Erros de execução
A tabela abaixo descreve os erros no ambiente de execução, que podem ocorrer ao executar a política.
| Código de falha | Causa | 
|---|---|
| DataCollectorTypeMismatch | O valor a ser capturado não corresponde ao tipo  | 
| ExtractionFailure | Falha na extração de dados. | 
| UnresolvedVariable | A variável não existe. | 
| VariableCountLimitExceeded | O número de variáveis capturadas excedeu o limite de 100 variáveis. | 
| VariableValueLimitExceeded | O tamanho de um valor capturado excedeu o limite de 400 bytes. | 
| MsgContentParsingFailed | Não foi possível analisar o conteúdo da mensagem em XML ou JSON. | 
| InvalidMsgContentType | O tipo de conteúdo da mensagem não corresponde ao tipo de conteúdo esperado na cláusula de captura de políticas. | 
| NonMsgVariable | O valor do elemento <Source>não fazia referência a uma variável de mensagem. | 
| JSONPathQueryFailed | A consulta JSONPathfalhou na resolução de um valor. | 
| PrivateVariableAccess | Falha ao tentar acessar uma variável particular. | 
| XPathEvaluationFailed | Falha na resolução de um valor para XPath. | 
Os erros no ambiente de execução são retornados de duas maneiras:
- Resposta de erro para o cliente (continueOnError=false)Se o atributo continueOnErrorda política estiver definido comofalse, os erros que ocorrerem durante a execução da política cancelarão o processamento da mensagem e retornarão uma mensagem de erro descritiva. A política tentará capturar todos os erros relevantes na política de captura de dados antes de retornar a mensagem.
- DataCapturecampo de análise de erros- O campo - dataCapturePolicyErrorscontém uma lista de todos os erros que ocorreram. Veja abaixo um exemplo de como isso apareceria no mapa de dados do Analytics:- # Example payload [ { errorType: TypeMismatch, policyName: MyDataCapturePolicy-1, dataCollector: purchaseValue }, { errorType: MaxValueSizeLimitReached, policyName: MyDataCapturePolicy-1, dataCollector: purchasedItems }, ] 
Este campo está sujeito ao limite de tamanho da variável de 400 bytes.
Erros na implantação
| Código de falha | Causa | 
|---|---|
| DeploymentAssertionError | O DataCollector referido na política não foi encontrado na organização durante a implantação. | 
| JsonPathCompilationFailed | Falha ao compilar com o JSONPathespecificado. | 
| XPathCompilationFailed | Se o prefixo ou o valor usado no elemento XPathnão fizer parte de nenhum dos namespaces declarados na política, a implantação do proxy de API falhará. | 
| PatternCompilationFailed | Falha na compilação do padrão. | 
Como encontrar erros DataCapture na ferramenta de depuração
A variável dataCapturePolicyErrors está disponível na ferramenta de depuração.
Essa é uma ferramenta adicional que pode ser usada para identificar erros sem acessar o Analytics.
Por exemplo, é possível capturar um erro que ocorre quando você faz upgrade da versão do ambiente de execução híbrido e interrompe inadvertidamente o Analytics em um proxy já implantado.
Como aplicar limites de captura
A Apigee aplica os seguintes limites às variáveis nos dados capturados:
- O número permitido de variáveis é 100.
- O tamanho máximo de cada variável (incluindo valores de lista) é de 400 bytes.
Quando a execução da política de captura de dados, antes de um valor ser adicionado ao mapa de captura de dados no contexto da mensagem:
- Se o limite de número de variáveis for atingido, a nova variável será descartada.
- Se o limite de tamanho das variáveis for atingido, o valor será cortado para se ajustar aos limites desejados.
Nos dois casos:
- Uma mensagem de depuração será exibida no registro do processador de mensagens.
- Uma mensagem de erro limit reachedserá anexada ao arquivodataCapturePolicyErrors, disponível no Analytics e no Debug. Observação: somente uma mensagem de erro será atingida se o número máximo de variáveis permitidas for anexado.
- Se <ThrowExceptionOnLimit> for true, os dados não serão enviados ao Google Analytics e, em vez disso, um erro será retornado ao cliente.