Kebijakan DataCapture

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat dokumentasi Apigee Edge.

Ikon DataCapture

Ringkasan

Kebijakan DataCapture mengambil data (seperti payload, header HTTP, dan parameter jalur atau kueri) dari proxy API untuk digunakan di Analytics. Anda dapat menggunakan data yang diambil dalam laporan Analytics kustom, serta untuk menerapkan aturan monetisasi dan pemantauan.

Kebijakan ini adalah Kebijakan yang dapat diperluas dan penggunaan kebijakan ini mungkin memiliki implikasi biaya atau penggunaan, bergantung pada lisensi Apigee Anda. Untuk informasi tentang jenis kebijakan dan implikasi penggunaan, lihat Jenis kebijakan.

Resource kolektor data

Untuk menggunakan kebijakan DataCapture, Anda harus membuat resource pengumpul data terlebih dahulu. Untuk mengetahui langkah-langkah membuat resource pengumpulan data menggunakan UI Apigee dan Apigee API, lihat Membuat pengumpulan data.

<DataCapture>

Elemen <DataCapture> menentukan kebijakan DataCapture.

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

Berikut adalah contoh kebijakan DataCapture:

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

Elemen utama kebijakan DataCapture adalah elemen <Capture>, yang menentukan cara mengambil data. Tag ini memiliki dua elemen turunan yang diperlukan:

Dalam contoh sederhana ini, data diekstrak dari variabel bernama my_data_variable, yang telah dibuat di tempat lain dalam proxy. Variabel ditentukan oleh atribut ref.

Elemen <Collect> juga menyediakan beberapa cara lain untuk mengambil data dari berbagai sumber melalui elemen turunannya. Lihat Contoh untuk mengetahui contoh selengkapnya tentang pengambilan data dengan kebijakan DataCapture.

Elemen DataCapture memiliki sintaksis berikut.

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

Elemen ini memiliki atribut berikut yang umum untuk semua kebijakan:

Atribut Default Wajib? Deskripsi
name T/A Wajib

Nama internal kebijakan. Nilai atribut name dapat berisi huruf, angka, spasi, tanda hubung, garis bawah, dan titik. Nilai ini tidak boleh melebihi 255 karakter.

Secara opsional, gunakan elemen <DisplayName> untuk memberi label pada kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.

continueOnError false Opsional Tetapkan ke false untuk menampilkan error saat kebijakan gagal. Perilaku ini wajar terjadi untuk sebagian besar kebijakan. Tetapkan ke true agar eksekusi alur berlanjut meskipun setelah kebijakan gagal. Lihat juga:
enabled benar Opsional Tetapkan ke true untuk menerapkan kebijakan. Tetapkan ke false untuk menonaktifkan kebijakan. Kebijakan tidak akan diterapkan meskipun tetap terlampir ke alur.
async   false Tidak digunakan lagi Atribut ini tidak digunakan lagi.

Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan <DataCapture>.

Elemen Turunan Wajib Deskripsi
<Capture> Wajib Merekam data untuk variabel yang ditentukan.

Contoh

Contoh berikut mengilustrasikan berbagai cara untuk menggunakan kebijakan DataCapture.

Mengambil data untuk variabel bawaan

Contoh kode di bawah ini mengilustrasikan cara mengambil data untuk variabel bawaan, message.content, yang berisi konten permintaan, respons, atau pesan error. Lihat Variabel alur untuk mengetahui informasi selengkapnya tentang variabel bawaan.

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

Dalam kode di atas, atribut ref dari elemen </Collect> menentukan variabel yang akan diambil, yang dalam contoh ini bernama "message.content".

Contoh ini mengambil data dengan elemen <Capture>, yang juga berisi elemen <DataCollector> yang menentukan nama resource pengumpulan data.

Mengambil data secara inline

Contoh berikutnya menunjukkan cara mengambil data secara inline menggunakan <JSONPayload>, elemen turunan dari elemen <Collect>.

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

Dalam kode di atas:

  • Elemen <JSONPayload> menentukan pesan berformat JSON tempat nilai variabel diekstrak.
  • Elemen <JSONPath> menentukan jalur JSON yang digunakan untuk mengekstrak nilai dari pesan, yang dalam hal ini adalah $.results[0].currency.

Sebagai ilustrasi, misalkan nilai yang diekstrak pada saat pesan diterima adalah 1120. Kemudian, entri yang dihasilkan dan dikirim ke Analytics akan menjadi

{
    "dc_data_collector": "1120"
}

<Capture>

Elemen <Capture> menentukan cara mengambil data.

<Capture />

Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan <Capture>.

Elemen Turunan Wajib? Deskripsi
<DataCollector> Wajib Menentukan resource pengumpulan data.
<Collect> Wajib Menentukan cara pengambilan data.

<DataCollector>

Elemen <DataCollector> menentukan resource pengumpulan data.

<DataCollector>dc_data_collector</DataCollector>
Tabel berikut menjelaskan atribut elemen <DataCollector>.
Atribut Deskripsi Default Wajib? Jenis
cakupan

Tentukan atribut ini dan tetapkan nilainya ke monetization jika Anda ingin mengambil variabel monetisasi. Untuk informasi selengkapnya tentang variabel monetisasi yang dapat Anda rekam, lihat Merekam data monetisasi.

T/A Opsional String

Isi elemen <DataCollector> berisi nama resource pengumpulan data.

<Collect>

Elemen <Collect> menentukan cara pengambilan data.

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

Tabel berikut menjelaskan atribut elemen <Collect>.

Atribut Deskripsi Default Wajib? Jenis
ref

Variabel yang datanya Anda ambil.

T/A Opsional—Jika ref dihilangkan, tepat salah satu dari berikut harus ditentukan: QueryParam, Header, FormParam, URIPath, JSONPayload, atau XMLPayload. String
default Menentukan nilai yang dikirim ke Analytics jika nilai variabel tidak diisi saat runtime. Misalnya, jika Anda menetapkan default="0", nilai yang dikirim ke Analytics adalah 0. Jika Anda tidak menentukan nilai default, dan nilai variabel tidak diisi saat runtime, nilai yang dikirim ke Analytics adalah null untuk variabel numerik atau "Not set" untuk variabel string. Wajib String

Data dapat diambil dari variabel yang ada menggunakan atribut ref, atau oleh elemen turunan <Collect>.

Elemen turunan dari <Collect>

Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan <Collect>:

Elemen Turunan Wajib? Deskripsi
<Source> Opsional Menentukan variabel yang akan diuraikan.
<URIPath> Opsional Mengekstrak nilai dari proxy.pathsuffix pesan sumber permintaan.
<QueryParam> Opsional Mengekstrak nilai dari parameter kueri yang ditentukan dari pesan sumber permintaan.
<Header> Opsional Mengekstrak nilai dari header HTTP yang ditentukan dari pesan permintaan atau respons yang ditentukan.
<FormParam> Opsional Mengekstrak nilai dari parameter formulir yang ditentukan dari pesan permintaan atau respons yang ditentukan.
<JSONPayload> Opsional Menentukan pesan berformat JSON tempat nilai variabel akan diekstrak.
<XMLPayload> Opsional Menentukan pesan berformat XML tempat nilai variabel akan diekstrak.

<Source>

Menentukan variabel yang menamai pesan yang akan diuraikan. Nilai <Source> secara default adalah message. Nilai message peka konteks. Dalam alur permintaan, message di-resolve ke pesan permintaan. Dalam alur respons, message di-resolve ke pesan respons.

Jika variabel yang ditentukan di <Source> tidak dapat di-resolve, atau di-resolve ke jenis non-pesan, kebijakan akan gagal merespons.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <Collect>
Elemen Turunan T/A
<Source >request</Source>

<URIPath>

Mengekstrak nilai dari proxy.pathsuffix pesan sumber request. Jalur yang diterapkan ke pola adalah proxy.pathsuffix, yang tidak menyertakan jalur dasar untuk proxy API. Jika pesan sumber me-resolve ke jenis pesan response, elemen tidak akan melakukan apa pun.

Nilai Default T/A
Wajib? Opsional
Jenis Kompleks
Elemen Induk <Collect>
Elemen Turunan <Pattern>

Atribut

Atribut Deskripsi Default Wajib? Jenis
ignoreCase Menentukan untuk mengabaikan huruf besar/kecil saat mencocokkan pola.

false

Opsional Boolean
<Collect>
    <URIPath>
        <Pattern ignoreCase="false">/foo/{$}</Pattern>
    </URIPath>
</Collect>

Anda dapat menggunakan beberapa elemen <Pattern>:

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

<QueryParam>

Mengekstrak nilai dari parameter kueri yang ditentukan dari pesan sumber request. Jika pesan sumber me-resolve ke jenis pesan response, elemen tersebut tidak melakukan apa pun.

Nilai Default T/A
Wajib? Opsional
Jenis Kompleks
Elemen Induk <Collect>
Elemen Turunan <Pattern>

Atribut

Atribut Deskripsi Default Wajib? Jenis
nama Menentukan nama parameter kueri. Jika beberapa parameter kueri memiliki nama yang sama, gunakan referensi yang diindeks, dengan instance pertama parameter kueri tidak memiliki indeks, instance kedua di indeks 2, instance ketiga di indeks 3, dll.

T/A

Wajib String
<Collect>
    <QueryParam name="code">
        <Pattern ignoreCase="true">{$}</Pattern>
    </QueryParam>
</Collect>

Jika beberapa parameter kueri memiliki nama yang sama, gunakan indeks untuk mereferensikan parameter:

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

Catatan: Anda harus menentukan satu variabel bernama {$}. Mungkin ada beberapa elemen Pattern unik, tetapi pola pencocokan pertama akan di-resolve untuk permintaan tertentu.

<Header>

Mengekstrak nilai dari header HTTP yang ditentukan dari pesan request atau response yang ditentukan. Jika beberapa header memiliki nama yang sama, nilainya akan disimpan dalam array.

Nilai Default T/A
Wajib? Opsional
Jenis Kompleks
Elemen Induk <Collect>
Elemen Turunan <Pattern>

Atribut

Atribut Deskripsi Default Wajib? Jenis
nama Menentukan nama header tempat Anda mengekstrak nilai. Jika beberapa header memiliki nama yang sama, gunakan referensi yang diindeks, dengan instance pertama header tidak memiliki indeks, instance kedua di indeks 2, instance ketiga di indeks 3, dll. Gunakan .values untuk mendapatkan semua header dalam array.

T/A

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

Jika beberapa header memiliki nama yang sama, gunakan indeks untuk mereferensikan setiap header dalam array:

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

Atau, kode berikut untuk mencantumkan semua header dalam array:

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

<FormParam>

Mengekstrak nilai dari parameter formulir yang ditentukan dari pesan request atau response yang ditentukan. Parameter formulir hanya dapat diekstrak jika header Content-Type pesan yang ditentukan adalah application/x-www-form-urlencoded.

Nilai Default T/A
Wajib? Opsional
Jenis Kompleks
Elemen Induk <Collect>
Elemen Turunan <Pattern>

Atribut

Atribut Deskripsi Default Wajib? Jenis
nama Nama parameter formulir tempat Anda mengekstrak nilai.

T/A

Opsional String
<Collect>
    <FormParam name="greeting">
        <Pattern>hello {$}</Pattern>
    </FormParam>
</Collect>

<JSONPayload>

Menentukan pesan berformat JSON tempat nilai variabel akan diekstrak. Ekstraksi JSON hanya dilakukan jika header Content-Type pesan adalah application/json.

Nilai Default T/A
Wajib? Opsional
Jenis Kompleks
Elemen Induk <Collect>
Elemen Turunan <JSONPath>
<Collect>
    <JSONPayload>
        <JSONPath>$.results[0].currency</JSONPath>
    </JSONPayload>
</Collect>

<JSONPath>

Elemen turunan yang diperlukan dari elemen <JSONPayload>. Menentukan jalur JSON yang digunakan untuk mengekstrak nilai dari pesan berformat JSON.

Nilai Default T/A
Wajib? Wajib
Jenis String
Elemen Induk <JSONPayload>
Elemen Turunan T/A
<JSONPath>$.rss.channel.title</JSONPath>

<XMLPayload>

Menentukan pesan berformat XML tempat nilai variabel akan diekstrak. Payload XML hanya diekstrak jika header Content-Type pesan adalah text/xml, application/xml, atau application/*+xml.

Nilai Default T/A
Wajib? Opsional
Jenis Kompleks
Elemen Induk <Collect>
Elemen Turunan <Namespaces>
<XPath>

Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan <XMLPayload>.

Elemen Turunan Wajib? Deskripsi
<Namespaces> Opsional Menentukan nol atau beberapa namespace yang akan digunakan dalam evaluasi XPath.
<XPath> Wajib Menentukan XPath yang ditentukan untuk variabel.
<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>

Menentukan kumpulan namespace yang dapat digunakan dalam ekspresi XPath. Contoh.

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

Jika tidak menggunakan namespace dalam ekspresi XPath, Anda dapat menghapus atau mengomentari elemen <Namespaces>, seperti yang ditunjukkan contoh berikut:

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

<Namespace>

Menentukan satu namespace dan awalan yang sesuai untuk digunakan dalam ekspresi XPath. Contoh.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <Namespaces>
Elemen Turunan T/A

Atribut

Atribut Deskripsi Default Wajib? Jenis
prefix

Awalan yang Anda gunakan untuk merujuk ke namespace dalam ekspresi xpath. Ini tidak harus sama dengan awalan yang digunakan dalam dokumen XML asli.

T/A

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

Elemen turunan yang diperlukan dari elemen XMLPayload. Menentukan XPath yang ditentukan untuk variabel. Hanya ekspresi XPath 1.0 yang didukung.

Nilai Default T/A
Wajib? Wajib
Jenis String
Elemen Induk <XMLPayload>
Elemen Turunan T/A
   <XPath>/test/example</XPath>

Catatan: Jika menggunakan namespace dalam ekspresi XPath, Anda harus mendeklarasikan namespace di bagian <XMLPayload><Namespaces> kebijakan.

<ThrowExceptionOnLimit>

Elemen <ThrowExceptionOnLimit> menentukan apa yang terjadi saat batas pengambilan pada jumlah variabel atau ukuran maksimum variabel tercapai. Lihat Menerapkan batas pengambilan.

Nilai <ThrowExceptionOnLimit> dapat berupa salah satu dari nilai berikut:

  • false: Data untuk variabel dikirim ke Analytics.
  • true: Pesan error ditampilkan, dan data tidak dikirim ke Analytics.

Referensi Error

Error runtime

Tabel di bawah menjelaskan error runtime, yang dapat terjadi saat kebijakan dieksekusi.

Kode kerusakan Penyebab
DataCollectorTypeMismatch

Nilai yang akan diambil tidak cocok dengan jenis DataCollector.

ExtractionFailure Ekstraksi data gagal.
UnresolvedVariable Variabel tidak ada.
VariableCountLimitExceeded Jumlah variabel yang diambil melebihi batas jumlah variabel sebesar 100 variabel
VariableValueLimitExceeded Ukuran nilai yang diambil melebihi batas variabel tunggal sebesar 400 byte.
MsgContentParsingFailed Konten pesan gagal diuraikan menjadi XML atau JSON.
InvalidMsgContentType Jenis konten pesan tidak cocok dengan jenis konten pesan yang diharapkan dalam klausa pengambilan kebijakan.
NonMsgVariable Nilai elemen <Source> tidak mereferensikan variabel pesan.
JSONPathQueryFailed Kueri JSONPath gagal di-resolve ke nilai.
PrivateVariableAccess Percobaan mengakses variabel pribadi gagal.
XPathEvaluationFailed XPath gagal me-resolve ke nilai.

Error runtime ditampilkan dengan dua cara:

  • Respons error kembali ke klien (continueOnError=false)

    Jika atribut continueOnError kebijakan ditetapkan ke false, error yang terjadi selama eksekusi kebijakan akan membatalkan pemrosesan pesan dan menampilkan pesan error deskriptif. Kebijakan ini akan mencoba menangkap semua error yang relevan dalam kebijakan pengambilan data sebelum menampilkan pesan.

  • Kolom analisis error DataCapture

    Kolom dataCapturePolicyErrors berisi daftar semua error yang telah terjadi. Contoh tampilannya di peta data analisis ditampilkan di bawah ini:

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

Kolom ini tunduk pada batas ukuran variabel 400 byte.

Error saat deployment

Kode kerusakan Penyebab
DeploymentAssertionError DataCollector yang dirujuk dalam kebijakan tidak dapat ditemukan di organisasi selama deployment.
JsonPathCompilationFailed Kompilasi dengan JSONPath yang ditentukan gagal.
XPathCompilationFailed Jika awalan atau nilai yang digunakan dalam elemen XPath bukan bagian dari salah satu namespace yang dideklarasikan dalam kebijakan, deployment proxy API akan gagal.
PatternCompilationFailed Kompilasi pola gagal.

Menemukan Error DataCapture di alat Debug

Variabel dataCapturePolicyErrors tersedia di alat Debug. Ini adalah alat tambahan yang dapat Anda gunakan untuk mendeteksi error tanpa membuka Analytics. Misalnya, Anda dapat menangkap error yang terjadi jika mengupgrade versi runtime campuran dan tidak sengaja merusak analisis di proxy yang telah di-deploy.

Menerapkan batas pengambilan

Apigee menerapkan batas berikut pada variabel dalam data yang diambil:

  • Jumlah variabel yang diizinkan adalah 100.
  • Ukuran maksimum setiap variabel (termasuk nilai daftar) adalah 400 byte.

Saat eksekusi Kebijakan Pengambilan Data, sebelum nilai ditambahkan ke peta pengambilan data dalam konteks pesan:

  • Jika batas jumlah variabel telah tercapai, variabel baru akan dihapus.
  • Jika batas ukuran variabel telah tercapai, nilai akan dipangkas agar sesuai dengan batas yang diinginkan.

Dalam kedua kasus tersebut:

  • Pesan debug akan dicatat ke log Message Processor.
  • Pesan error limit reached akan ditambahkan ke dataCapturePolicyErrors, yang akan tersedia di Analytics dan Debug. Catatan: Hanya satu pesan error untuk mencapai jumlah maksimum variabel yang diizinkan yang akan ditambahkan.
  • Jika <ThrowExceptionOnLimit> adalah true, data tidak akan dikirim ke Analytics, dan sebagai gantinya error akan ditampilkan ke klien.

Topik terkait