Criterio Data Capture

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Icona Data Capture

Panoramica

Il criterio Data Capture acquisisce dati (ad esempio payload, intestazioni HTTP e percorsi o parametri di ricerca) da un proxy API per l'utilizzo in Analytics. Puoi utilizzare i dati acquisiti nei report personalizzati di Analytics e per implementare regole di rilevamento, monetizzazione e monitoraggio.

Questo criterio è un criterio estendibile e il suo utilizzo potrebbe avere implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni di utilizzo, consulta Tipi di criteri.

Risorsa raccoglitore dati

Per utilizzare il criterio DataCapture, devi prima creare una risorsa di raccoglitore dati. Per la procedura di creazione di una risorsa di raccoglitore dati utilizzando l'interfaccia utente di Apigee e l'API Apigee, consulta Creazione di un raccoglitore dati.

<DataCapture>

L'elemento <DataCapture> definisce un criterio DataCapture.

<DataCapture async="true" continueOnError="true" enabled="true" name="DC">

Ecco un esempio di criterio DataCapture:

<DataCapture name="DC-1">
    <Capture>
        <DataCollector>dc_data_collector</DataCollector>
        <Collect ref="my_data_variable" />
    </Capture>
</DataCapture>

L'elemento principale del criterio DataCapture è l'elemento <Capture>, che specifica i metodi per acquisire i dati. Ha due elementi secondari obbligatori:

In questo semplice esempio, i dati vengono estratti da una variabile denominata my_data_variable, che è stata creata altrove nel proxy. La variabile è specificata dall'attributo ref.

L'elemento <Collect> offre anche diversi altri modi per acquisire dati da varie origini tramite i suoi elementi secondari. Consulta gli esempi per ulteriori esempi di acquisizione di dati con il criterio DataCapture.

La sintassi dell'elemento DataCapture è la seguente.

<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>

Questo elemento ha i seguenti attributi comuni a tutti i criteri:

Attributo Predefinito Obbligatorio? Descrizione
name N/A Obbligatorio

Il nome interno del criterio. Il valore dell'attributo name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Facoltativamente, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

continueOnError falso Facoltativo Imposta su false per restituire un errore in caso di errore del criterio. Questo è un comportamento previsto per la maggior parte dei criteri. Imposta su true per continuare l'esecuzione del flusso anche dopo un errore nel criterio. Vedi anche:
enabled true Facoltativo Imposta su true per applicare il criterio. Imposta su false per disattivare il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso.
async   falso Deprecato Questo attributo è stato ritirato.

La tabella seguente fornisce una descrizione generale degli elementi secondari di <DataCapture>.

Elemento secondario Obbligatorio Descrizione
<Capture> Obbligatorio Acquisisce i dati per una variabile specificata.

Esempi

I seguenti esempi illustrano vari modi di utilizzare il criterio DataCapture.

Acquisizione di dati per una variabile integrata

L'esempio di codice riportato di seguito illustra come acquisire i dati per una variabile integrata, message.content, che include i contenuti della richiesta, della risposta o del messaggio di errore. Consulta Variabili di flusso per ulteriori informazioni sulle variabili integrate.

<DataCapture name="DC-FullMessage">
    <Capture>
        <DataCollector>dc_data_collector</DataCollector>
        <Collect ref="message.content" />
    </Capture>
</DataCapture>

Nel codice precedente, l'attributo ref dell'elemento </Collect> specifica la variabile da acquisire, che in questo esempio è denominata "message.content".

L'esempio acquisisce i dati con un elemento <Capture>, che contiene anche un elemento <DataCollector> che specifica il nome della risorsa raccoglitore dati.

Acquisizione di dati in linea

L'esempio successivo mostra come acquisire i dati in linea utilizzando <JSONPayload>, un elemento secondario dell'elemento <Collect>.

<DataCapture name="DC-Currency">
    <Capture>
        <DataCollector>dc_data_collector<DataCollector>
        <Collect>
            <JSONPayload>
                <JSONPath>$.results[0].currency</JSONPath>
            </JSONPayload>
        </Collect>
    </Capture>
</DataCapture>

Nel codice riportato sopra:

  • L'elemento <JSONPayload> specifica il messaggio in formato JSON da cui viene estratto il valore della variabile.
  • L'elemento <JSONPath> specifica il percorso JSON utilizzato per estrarre il valore dal messaggio, che in questo caso è $.results[0].currency.

Ad esempio, supponiamo che il valore estratto al momento della ricezione del messaggio sia 1120. La voce risultante inviata ad Analytics

{
    "dc_data_collector": "1120"
}

<Acquisizione>

L'elemento <Capture> specifica il metodo di acquisizione dei dati.

<Capture />

La tabella seguente fornisce una descrizione generale degli elementi secondari di <Capture>.

Elemento secondario Obbligatorio? Descrizione
<DataCollector> Obbligatorio Specifica la risorsa del raccoglitore dati.
<Collect> Obbligatorio Specifica le modalità di acquisizione dei dati.

<DataCollector>

L'elemento <DataCollector> specifica la risorsa raccoglitore dati.

<DataCollector>dc_data_collector</DataCollector>
La tabella seguente descrive gli attributi dell'elemento <DataCollector>.
Attributo Descrizione Predefinito Obbligatorio? Tipo
ambito

Specifica questo attributo e imposta il valore su monetization se vuoi acquisire le variabili di monetizzazione. Per ulteriori informazioni sulle variabili di monetizzazione che puoi acquisire, consulta la pagina Acquisizione dei dati di monetizzazione.

N/A Facoltativo Stringa

Il corpo dell'elemento <DataCollector> contiene il nome della risorsa raccoglitore dati.

<Raccogli>

L'elemento <Collect> specifica le modalità di acquisizione dei dati.

<Collect ref="existing-variable" default="0"/>

La tabella seguente descrive gli attributi dell'elemento <Collect>.

Attributo Descrizione Predefinito Obbligatorio? Tipo
rif

La variabile per la quale stai acquisendo i dati.

N/A Facoltativo: se ref viene omesso, deve essere specificato esattamente uno dei seguenti elementi: QueryParam, Header, FormParam, URIPath, JSONPayload o XMLPayload. Stringa
predefinito Specifica il valore che viene inviato ad Analytics se il valore della variabile non viene compilato in fase di runtime. Ad esempio, se imposti default="0", il valore inviato ad Analytics sarà 0. Se non specifichi il valore di default e il valore della variabile non viene completato in fase di runtime, il valore inviato ad Analytics è null per una variabile numerica o "Not set" per una variabile stringa. Obbligatorio Stringa

I dati possono essere acquisiti da una variabile esistente utilizzando l'attributo ref o dagli elementi secondari <Collect>.

Elementi secondari di <Collect>

La seguente tabella fornisce una descrizione generale degli elementi secondari di <Collect>:

Elemento secondario Obbligatorio? Descrizione
<Source> Facoltativo Specifica la variabile da analizzare.
<URIPath> Facoltativo Estrae un valore da proxy.pathsuffix di un messaggio di origine della richiesta.
<QueryParam> Facoltativo Estrae un valore dal parametro di query specificato di un messaggio di origine della richiesta.
<Header> Facoltativo Estrae un valore dall'intestazione HTTP specificata del messaggio di richiesta o risposta specificato.
<FormParam> Facoltativo Estrae un valore dal parametro di modulo specificato per il messaggio di richiesta o risposta specificato.
<JSONPayload> Facoltativo Specifica il messaggio in formato JSON da cui verrà estratto il valore della variabile.
<XMLPayload> Facoltativo Specifica il messaggio in formato XML da cui verrà estratto il valore della variabile.

<Fonte>

Specifica la variabile da analizzare. Il valore predefinito di <Source> è message. Il valore message è sensibile al contesto. In un flusso di richiesta, message si risolve nel messaggio di richiesta. In un flusso di risposta, message si risolve nel messaggio di risposta.

Questo criterio viene utilizzato spesso per estrarre informazioni da una richiesta o da un messaggio di risposta, ma puoi utilizzarlo per estrarre informazioni da qualsiasi variabile. Ad esempio, puoi utilizzarlo per estrarre informazioni da un'entità creata dal criterio AccessEntity, dai dati restituiti dal criterio ServiceCallout o estrarre informazioni da un oggetto XML o JSON.

Se <Source> non può essere risolto o si risolve in un tipo non di messaggio, il criterio non risponderà.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <Collect>
Elementi secondari N/A

Attributi

Attributo Descrizione Predefinito Obbligatorio? Tipo
clearPayload

Imposta il valore su true se vuoi cancellare il payload specificato in <Source> dopo aver estratto i dati da quest'ultimo.

Utilizza l'opzione <clearPayload> solo se il messaggio di origine non è richiesto dopo l'esecuzione di ExtractVariables. Impostando il valore true, la memoria utilizzata dal messaggio viene liberata.

false

Facoltativo Booleano
<Source clearPayload="true|false">request</Source>

<URIPath>

Estrae un valore da proxy.pathsuffix di un messaggio di origine request. Il percorso applicato al pattern è proxy.pathsuffix, che non include il percorso di base per il proxy API. Se il messaggio di origine si risolve in un tipo di messaggio di response, l'elemento non fa nulla.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Complesso
Elemento principale <Collect>
Elementi secondari <Sequenza>

Attributi

Attributo Descrizione Predefinito Obbligatorio? Tipo
ignoreCase Specifica di ignorare le maiuscole/minuscole quando si crea una corrispondenza con il pattern.

false

Facoltativo Booleano
<Collect>
    <URIPath>
        <Pattern ignoreCase="false">/foo/{$}</Pattern>
    </URIPath>
</Collect>

Puoi utilizzare più elementi <Pattern>:

<URIPath>
   <Pattern ignoreCase="false">/foo/{$}</Pattern>
   <Pattern ignoreCase="false">/foo/bar/{$}</Pattern>
</URIPath>

<QueryParam>

Estrae un valore dal parametro di query specificato di un messaggio di origine request. Se il messaggio di origine si risolve in un tipo di messaggio di response, l'elemento non fa nulla.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Complesso
Elemento principale <Collect>
Elementi secondari <Sequenza>

Attributi

Attributo Descrizione Predefinito Obbligatorio? Tipo
comune Specifica il nome del parametro di query. Se più parametri di ricerca hanno lo stesso nome, utilizza i riferimenti indicizzati, in cui la prima istanza del parametro di query non ha un indice, la seconda si trova all'indice 2, la terza all'indice 3 e così via.

N/A

Obbligatorio Stringa
<Collect>
    <QueryParam name="code">
        <Pattern ignoreCase="true">{$}</Pattern>
    </QueryParam>
</Collect>

Se più parametri di ricerca hanno lo stesso nome, utilizza gli indici per fare riferimento ai parametri:

<Collect>
    <QueryParam name="code.2">
        <Pattern ignoreCase="true">{$}</Pattern>
    </QueryParam>
</Collect>

Nota:devi specificare una singola variabile denominata {$}. Potrebbero esserci più elementi Pattern univoci, ma il primo pattern corrispondente verrà risolto per una determinata richiesta.

<Header>

Estrae un valore dall'intestazione HTTP specificata del messaggio request o response specificato. Se più intestazioni hanno lo stesso nome, i relativi valori vengono archiviati in un array.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Complesso
Elemento principale <Collect>
Elementi secondari <Sequenza>

Attributi

Attributo Descrizione Predefinito Obbligatorio? Tipo
comune Specifica il nome dell'intestazione da cui estrai il valore. Se più intestazioni hanno lo stesso nome, utilizza i riferimenti indicizzati, in cui la prima istanza dell'intestazione non ha un indice, la seconda all'indice 2, la terza all'indice 3 e così via. Utilizza .values per ottenere tutte le intestazioni dell'array.

N/A

Obbligatorio Stringa
<Collect>
    <Header name="my_header">
        <Pattern ignoreCase="false">Bearer {$}</Pattern>
    </Header>
</Collect>

Se più intestazioni hanno lo stesso nome, utilizza gli indici per fare riferimento alle singole intestazioni nell'array:

<Collect>
    <Header name="my_header.2">
        <Pattern ignoreCase="true">{$}</Pattern>
    </Header>
</Collect>

In alternativa, per elencare tutte le intestazioni dell'array:

<Collect>
    <Header name="my_header.values">
        <Pattern ignoreCase="true">{$}</Pattern>
    </Header>
</Collect>

<FormParam>

Estrae un valore dal parametro di modulo specificato del messaggio request o response specificato. I parametri del modulo possono essere estratti solo quando l'intestazione Content-Type del messaggio specificato è application/x-www-form-urlencoded.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Complesso
Elemento principale <Collect>
Elementi secondari <Sequenza>

Attributi

Attributo Descrizione Predefinito Obbligatorio? Tipo
comune Il nome del parametro di modulo da cui estrai il valore.

N/A

Facoltativo Stringa
<Collect>
    <FormParam name="greeting">
        <Pattern>hello {$}</Pattern>
    </FormParam>
</Collect>

<JSONPayload>

Specifica il messaggio in formato JSON da cui verrà estratto il valore della variabile. L'estrazione JSON viene eseguita solo quando l'intestazione Content-Type del messaggio è application/json.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Complesso
Elemento principale <Collect>
Elementi secondari <JSONPath>
<Collect>
    <JSONPayload>
        <JSONPath>$.results[0].currency</JSONPath>
    </JSONPayload>
</Collect>

<JSONPath>

Elemento secondario obbligatorio dell'elemento <JSONPayload>. Specifica il percorso JSON utilizzato per estrarre un valore da un messaggio in formato JSON.

Valore predefinito N/A
Obbligatorio? Obbligatorio
Tipo Stringa
Elemento principale <JSONPayload>
Elementi secondari N/A
<JSONPath>$.rss.channel.title</JSONPath>

<XMLPayload>

Specifica il messaggio in formato XML da cui verrà estratto il valore della variabile. I payload XML vengono estratti solo quando l'intestazione Content-Type del messaggio è text/xml, application/xml o application/*+xml.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Complesso
Elemento principale <Collect>
Elementi secondari <Namespaces>
<XPath>

La tabella seguente fornisce una descrizione generale degli elementi secondari di <XMLPayload>.

Elemento secondario Obbligatorio? Descrizione
<Namespaces> Facoltativo Specifica zero o più spazi dei nomi da utilizzare nella valutazione XPath.
<XPath> Obbligatorio Specifica l'XPath definito per la variabile.
<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>

Specifica l'insieme di spazi dei nomi che possono essere utilizzati nell'espressione XPath. Un esempio.

<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 non utilizzi gli spazi dei nomi nelle espressioni XPath, puoi omettere o commentare l'elemento <Namespaces>, come illustrato nell'esempio seguente:

<Collect>
    <XMLPayload>
        <!-- <Namespaces/> -->
        <XPath>/Directions/route/leg/name</XPath>
    </XMLPayload>
</Collect>

<Namespace>

Specifica uno spazio dei nomi e un prefisso corrispondente da utilizzare nell'espressione XPath. Un esempio.

Valore predefinito N/A
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <Namespaces>
Elementi secondari N/A

Attributi

Attributo Descrizione Predefinito Obbligatorio? Tipo
prefix

Il prefisso che utilizzi per fare riferimento allo spazio dei nomi nell'espressione xpath. Questo non deve necessariamente essere lo stesso prefisso utilizzato nel documento XML originale.

N/A

Obbligatorio Stringa
<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 secondario obbligatorio dell'elemento XMLPayload. Specifica il valore XPath definito per la variabile. Sono supportate solo espressioni XPath 1.0.

Valore predefinito N/A
Obbligatorio? Obbligatorio
Tipo Stringa
Elemento principale <XMLPayload>
Elementi secondari N/A
   <XPath>/test/example</XPath>

Nota: se utilizzi spazi dei nomi nelle espressioni XPath, devi dichiararli nella sezione <XMLPayload><Namespaces> del criterio.

<ThrowExceptionOnLimit>

L'elemento <ThrowExceptionOnLimit> specifica cosa succede quando viene raggiunto il limite del numero di variabili o la dimensione massima di una variabile per l'acquisizione. Consulta la sezione Applicazione dei limiti di acquisizione.

Il valore di <ThrowExceptionOnLimit> può essere uno dei seguenti:

  • false: i dati relativi alle variabili vengono inviati ad Analytics.
  • true: viene restituito un messaggio di errore e i dati non vengono inviati ad Analytics.

Riferimento errore

Errori di runtime

La tabella seguente descrive gli errori di runtime, che possono verificarsi quando il criterio viene eseguito.

Codice di errore Causa
DataCollectorTypeMismatch

Il valore da acquisire non corrisponde al tipo DataCollector.

ExtractionFailure Estrazione dei dati non riuscita.
UnresolvedVariable La variabile non esiste.
VariableCountLimitExceeded Il numero di variabili acquisite ha superato il limite di 100 variabili
VariableValueLimitExceeded Le dimensioni di un valore acquisito hanno superato il limite di singola variabile di 400 byte.
MsgContentParsingFailed Impossibile analizzare i contenuti del messaggio in XML o JSON.
InvalidMsgContentType Il tipo di contenuto del messaggio non corrisponde a quello previsto nella clausola di acquisizione dei criteri.
NonMsgVariable Il valore dell'elemento <Source> non faceva riferimento a una variabile messaggio.
JSONPathQueryFailed La query JSONPath non è riuscita a restituire un valore.
PrivateVariableAccess Tentativo di accesso a una variabile privata non riuscito.
XPathEvaluationFailed Impossibile risolvere XPath in un valore.

Gli errori di runtime vengono restituiti in due modi:

  • Risposta di errore al client (continueOnError=false)

    Se l'attributo continueOnError del criterio viene impostato su false, gli errori che si verificano durante l'esecuzione del criterio interromperanno l'elaborazione del messaggio e restituiranno un messaggio di errore descrittivo. Il criterio tenterà di acquisire tutti gli errori pertinenti nel criterio di acquisizione dei dati prima di restituire il messaggio.

  • DataCapture campo di analisi degli errori

    Il campo dataCapturePolicyErrors contiene un elenco di tutti gli errori che si sono verificati. Di seguito è riportato un esempio di come apparirebbe nella mappa dati di analisi:

    # Example payload
    [
         {
             errorType: TypeMismatch,
             policyName: MyDataCapturePolicy-1,
             dataCollector: purchaseValue
         },
         {
             errorType: MaxValueSizeLimitReached,
             policyName: MyDataCapturePolicy-1,
             dataCollector: purchasedItems
         },
    ]

Questo campo è soggetto al limite di dimensioni variabili di 400 byte.

Errori di deployment

Codice di errore Causa
DeploymentAssertionError Impossibile trovare il DataCollector a cui viene fatto riferimento nel criterio nell'organizzazione durante il deployment.
JsonPathCompilationFailed Compilazione con l'elemento JSONPath specificato non riuscita.
XPathCompilationFailed Se il prefisso o il valore utilizzato nell'elemento XPath non fa parte di nessuno degli spazi dei nomi dichiarati nel criterio, il deployment del proxy API non va a buon fine.
PatternCompilationFailed Compilazione del pattern non riuscita.

Ricerca di DataCapture errori nello strumento di debug

La variabile dataCapturePolicyErrors è disponibile nello strumento di debug. Si tratta di uno strumento aggiuntivo che puoi utilizzare per individuare gli errori senza accedere ad Analytics. Ad esempio, puoi rilevare un errore che si verifica se esegui l'upgrade della tua versione del runtime ibrido e interrompi inavvertitamente l'analisi in un proxy di cui è già stato eseguito il deployment.

Applicazione dei limiti di acquisizione

Apigee applica i seguenti limiti alle variabili nei dati acquisiti:

  • Il numero di variabili consentite è 100.
  • La dimensione massima di ogni variabile (inclusi i valori dell'elenco) è 400 byte.

Quando l'esecuzione del criterio di acquisizione dati, prima che venga aggiunto un valore alla mappa di acquisizione dati nel contesto del messaggio:

  • Se è stato raggiunto il limite relativo al numero di variabili, la nuova variabile verrà eliminata.
  • Se è stato raggiunto il limite di dimensioni delle variabili, il valore verrà ridotto per rientrare nei limiti desiderati.

In entrambi i casi:

  • Verrà registrato un messaggio di debug nel log del processore di messaggi.
  • Un messaggio di errore limit reached verrà aggiunto a dataCapturePolicyErrors, che sarà disponibile sia in Analytics che in Debug. Nota:verrà aggiunto un solo messaggio di errore per il raggiungimento del numero massimo di variabili consentite.
  • Se <ThrowExceptionOnLimit> è true, i dati non vengono inviati ad Analytics e viene restituito un errore al client.

Argomenti correlati