Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat Dokumentasi Apigee Edge.
Ringkasan
Kebijakan DataCapture mengambil data (seperti payload, header HTTP, dan parameter kueri atau jalur) dari proxy API untuk digunakan di Analytics. Anda dapat menggunakan data yang diambil dalam laporan Analytics khusus, serta untuk menerapkan monetisasi, dan pemantauan aturan.
Kebijakan ini merupakan Kebijakan yang dapat diperluas dan penggunaan kebijakan ini mungkin menimbulkan biaya atau implikasi penggunaan, bergantung pada lisensi Apigee Anda. Untuk mengetahui informasi tentang jenis kebijakan dan implikasi penggunaan, lihat Jenis kebijakan.
Resource pengumpul data
Untuk menggunakan kebijakan DataCapture
, Anda harus membuat dahulu
pengumpul data. Untuk mengetahui langkah-langkah membuat resource pengumpul data menggunakan UI Apigee dan
Apigee API, lihat
Membuat pengumpul 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
pengambilan data. Elemen ini memiliki dua elemen turunan yang diperlukan:
-
<DataCollector>
, yang menentukan resource REST pengumpul data. Dalam hal ini, resource diberi namadc_data_collector
. - Elemen
<Collect>
, yang menentukan cara untuk mengambil data.
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
pengambilan data dari berbagai sumber melalui
elemen turunan.
Lihat Contoh untuk mengetahui contoh lainnya 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 sama untuk semua kebijakan:
Atribut | Default | Wajib? | Deskripsi |
---|---|---|---|
name |
T/A | Wajib |
Nama internal kebijakan. Nilai atribut Atau, gunakan elemen |
continueOnError |
false | Opsional | Setel ke false untuk menampilkan error jika kebijakan gagal. Ini adalah perilaku yang wajar untuk sebagian besar kebijakan. Setel ke true agar eksekusi alur tetap berlanjut bahkan setelah kebijakan gagal. Lihat juga:
|
enabled |
true | Opsional | Setel ke true untuk menerapkan kebijakan. Setel ke false untuk menonaktifkan kebijakan. Kebijakan tidak akan diterapkan meskipun tetap melekat pada alur. |
async |
false | Tidak digunakan lagi | Atribut ini sudah tidak digunakan lagi. |
Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan dari
<DataCapture>
.
Elemen Turunan | Wajib | Deskripsi |
---|---|---|
<Capture> |
Wajib | Mengambil data untuk variabel tertentu. |
Contoh
Contoh berikut menggambarkan berbagai cara untuk menggunakan DataCapture
lebih lanjut.
Mengambil data untuk variabel built-in
Contoh kode di bawah ini mengilustrasikan cara mengambil data
untuk variabel built-in, message.content
, yang berisi
isi permintaan, respons, atau pesan error. Lihat
Variabel flow untuk
informasi lebih lanjut tentang variabel built-in.
<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 adalah
bernama "message.content"
.
Contoh ini mengambil data dengan elemen <Capture>
,
yang juga berisi elemen <DataCollector>
yang menentukan
nama resource kolektor data.
Merekam 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 yang menjadi tempat pengambilan nilai variabel. - Tujuan
Elemen
<JSONPath>
menentukan jalur JSON yang digunakan untuk mengekstrak nilai dari pesan, yang dalam hal ini adalah$.results[0].currency
.
Sebagai ilustrasi, anggaplah nilai yang diekstraksi pada saat itu
pesan yang diterima adalah 1120
. Selanjutnya
entri yang dihasilkan dan akan dikirim ke Analytics
{ "dc_data_collector": "1120" }
<Capture>
Elemen <Capture>
menentukan cara pengambilan data.
<Capture />
Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan dari
<Capture>
.
Elemen Turunan | Wajib? | Deskripsi |
---|---|---|
<DataCollector> |
Wajib | Menentukan resource kolektor data. |
<Collect> |
Wajib | Menentukan cara untuk mengambil data. |
<DataCollector>
Elemen <DataCollector>
menentukan
resource pengumpul data.
<DataCollector>dc_data_collector</DataCollector>
<DataCollector>
.
Atribut | Deskripsi | Default | Wajib? | Jenis |
---|---|---|---|---|
cakupan |
Tentukan atribut ini dan tetapkan nilai ke |
T/A | Opsional | String |
Isi elemen <DataCollector>
berisi nama elemen
resource pengumpul data.
<Collect>
Elemen <Collect>
menentukan cara mengambil data.
<Collect ref="existing-variable" default="0"/>
Tabel berikut menjelaskan atribut elemen <Collect>
.
Atribut | Deskripsi | Default | Wajib? | Jenis |
---|---|---|---|---|
referensi |
Variabel yang datanya Anda ambil. |
T/A | Opsional—Jika ref dihilangkan, tepat satu dari
hal 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 variabelnya
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 <Collect>
Tabel berikut memberikan deskripsi tingkat tinggi tentang elemen turunan dari
<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 pada pesan sumber permintaan. |
<Header> |
Opsional | Mengekstrak nilai dari header HTTP yang ditentukan untuk pesan respons atau permintaan yang ditentukan. |
<FormParam> |
Opsional | Mengekstrak nilai dari parameter formulir yang ditentukan untuk pesan respons atau permintaan yang ditentukan. |
<JSONPayload> |
Opsional | Menentukan pesan berformat JSON yang menjadi tempat pengambilan nilai variabel. |
<XMLPayload> |
Opsional | Menentukan pesan berformat XML tempat nilai variabel akan diekstrak. |
<Source>
Menentukan variabel yang akan diuraikan. Nilai dari
<Source>
ditetapkan secara default ke message
. Nilai message
peka konteks. Dalam alur permintaan, message
me-resolve ke pesan permintaan. Di beberapa
alur respons, message
akan me-resolve ke pesan respons.
Meskipun Anda sering menggunakan kebijakan ini untuk mengekstrak informasi dari pesan permintaan atau respons, Anda
dapat menggunakannya untuk mengekstrak
informasi dari variabel apa pun. Misalnya, Anda dapat
menggunakannya untuk mengekstrak
informasi dari entitas yang dibuat oleh kebijakan AccessEntity, dari data
ditampilkan oleh kebijakan ServiceInfo, atau mengekstrak informasi dari objek XML atau JSON.
Jika <Source>
tidak dapat di-resolve, atau di-resolve menjadi jenis bukan pesan,
kebijakan akan gagal direspons.
Nilai Default | T/A |
Wajib? | Opsional |
Jenis | String |
Elemen Induk |
<Collect> |
Elemen Turunan | T/A |
Atribut
Atribut | Deskripsi | Default | Wajib? | Jenis |
---|---|---|---|---|
clearPayload |
Tetapkan ke true jika Anda ingin menghapus payload yang ditentukan di
Gunakan opsi |
salah |
Opsional | Boolean |
<Source clearPayload="true|false">request</Source>
<URIPath>
Mengekstrak nilai
dari proxy.pathsuffix
pesan sumber request
. Jalur yang diterapkan ke
polanya adalah proxy.pathsuffix
, yang tidak menyertakan jalur dasar untuk proxy API. Jika
pesan sumber me-resolve ke jenis pesan response
, elemen tidak 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. |
salah |
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 untuk pesan sumber request
. Jika
pesan sumber di-resolve menjadi jenis pesan response
, elemen melakukannya
tidak terjadi apa-apa.
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 sama, gunakan referensi terindeks, yang menunjukkan tidak memiliki indeks, yang kedua berada pada indeks 2, yang ketiga pada indeks 3, dst. |
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
yang unik, tetapi pola pertama yang cocok akan
untuk permintaan tertentu.
<Header>
Mengekstrak nilai
dari header HTTP yang ditentukan dari request
yang ditentukan atau
response
pesan. Jika beberapa {i>header
<i}memiliki
dengan nama yang sama, nilainya
disimpan dalam sebuah {i>array<i}.
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 lebih dari satu
memiliki nama yang sama, gunakan {i>index.<i}
yang diindeks, di mana instance pertama
header tidak memiliki indeks, yang kedua adalah pada indeks 2, yang ketiga pada indeks 3, dst.
.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 {i>header<i} memiliki nama yang sama, gunakan indeks untuk mereferensikan masing-masing {i>header<i} di kolom array:
<Collect> <Header name="my_header.2"> <Pattern ignoreCase="true">{$}</Pattern> </Header> </Collect>
Atau perintah berikut untuk menampilkan semua header dalam array:
<Collect> <Header name="my_header.values"> <Pattern ignoreCase="true">{$}</Pattern> </Header> </Collect>
<FormParam>
Mengekstrak nilai
dari parameter formulir yang ditentukan untuk request
atau response
yang ditentukan
untuk membuat pesan email baru. Parameter formulir
hanya dapat diekstrak jika header Content-Type
dari pesan yang ditentukan
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 atribut
Pesan berformat JSON yang menjadi asal dari nilai variabel yang akan diekstrak. JSON
ekstraksi data hanya dilakukan saat header Content-Type
pesan
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 wajib dari elemen <JSONPayload>
. Menentukan atribut
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 atribut
Pesan berformat XML tempat nilai variabel akan diekstrak. Payload XML
diekstrak hanya 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 dari
<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. Contohnya.
<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 menghilangkan atau menjadikan
<Namespaces>
, seperti yang ditunjukkan contoh berikut:
<Collect> <XMLPayload> <!-- <Namespaces/> --> <XPath>/Directions/route/leg/name</XPath> </XMLPayload> </Collect>
<Namespace>
Menentukan satu namespace dan awalan terkait untuk digunakan dalam ekspresi XPath. Contohnya.
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. Awalan ini tidak boleh sama dengan 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>
menjelaskan apa yang terjadi saat pengambilan gambar
mencapai batas jumlah variabel atau ukuran maksimum variabel. Lihat
Menerapkan batas pengambilan.
Nilai <ThrowExceptionOnLimit>
dapat berupa salah satu dari yang berikut:
false
: Data untuk variabel dikirim ke Analytics.true
: Pesan error adalah ditampilkan, dan data tidak dikirim ke Analytics.
Referensi Error
Error runtime
Tabel di bawah ini menjelaskan error runtime, yang dapat terjadi saat kebijakan dijalankan.
Kode kesalahan | Penyebab |
---|---|
DataCollectorTypeMismatch |
Nilai yang akan diambil tidak cocok dengan jenis |
ExtractionFailure |
Ekstraksi data gagal. |
UnresolvedVariable |
Variabel tidak ada. |
VariableCountLimitExceeded |
Jumlah variabel yang diambil melampaui batas jumlah variabel sebesar 100 variabel |
VariableValueLimitExceeded |
Ukuran nilai yang direkam 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 menjadi sebuah nilai. |
PrivateVariableAccess |
Upaya untuk mengakses variabel pribadi gagal. |
XPathEvaluationFailed |
XPath gagal di-resolve ke sebuah nilai. |
Error runtime ditampilkan dengan dua cara:
- Respons error kembali ke klien (
continueOnError=false
)Jika atribut
continueOnError
kebijakan disetel kefalse
, error yang terjadi selama eksekusi kebijakan akan membatalkan pemrosesan pesan dan menampilkan pesan error deskriptif. Kebijakan ini akan berupaya menangkap semua error yang relevan dalam kebijakan pengambilan data sebelum mengembalikan pesan. DataCapture
kolom analisis errorKolom
dataCapturePolicyErrors
berisi daftar semua error yang telah terjadi. Contoh tampilan ini dalam peta data analisis adalah yang ditampilkan di bawah ini:# Example payload [ { errorType: TypeMismatch, policyName: MyDataCapturePolicy-1, dataCollector: purchaseValue }, { errorType: MaxValueSizeLimitReached, policyName: MyDataCapturePolicy-1, dataCollector: purchasedItems }, ]
Kolom ini tunduk kepada batas ukuran variabel 400 byte.
Error saat deployment
Kode kesalahan | Penyebab |
---|---|
DeploymentAssertionError |
DataCollector yang dirujuk dalam kebijakan tidak dapat ditemukan di organisasi selama deployment. |
JsonPathCompilationFailed |
Gagal mengompilasi dengan JSONPath yang ditentukan. |
XPathCompilationFailed |
Jika awalan atau nilai yang digunakan dalam elemen XPath bukan bagian dari awalan atau nilai
dari salah satu
namespace yang dideklarasikan dalam kebijakan, kemudian deployment proxy API
gagal. |
PatternCompilationFailed |
Kompilasi pola gagal. |
Menemukan DataCapture
Error di alat Debug
Variabel dataCapturePolicyErrors
tersedia di alat Debug.
Ini adalah alat tambahan yang dapat Anda gunakan untuk menemukan error tanpa membuka Analytics.
Misalnya, Anda dapat menangkap error yang terjadi jika Anda mengupgrade versi runtime hybrid
dan secara tidak sengaja merusak analisis
dalam proxy yang telah di-deploy.
Menerapkan batas pengambilan gambar
Apigee menerapkan batasan 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 di konteks pesan:
- Jika batas jumlah variabel telah tercapai, variabel baru akan dihapus.
- Jika batas ukuran variabel telah tercapai, nilai akan dipangkas agar sesuai dalam batas yang diinginkan.
Dalam kedua kasus:
- Pesan debug akan dicatat di log Pemroses Pesan.
- Pesan error
limit reached
akan ditambahkan kedataCapturePolicyErrors
, yang akan tersedia di Analytics dan Debug. Catatan: Hanya satu pesan error yang akan ditambahkan karena mencapai jumlah maksimum variabel yang diizinkan. - Jika <ThrowExceptionOnLimit> adalah
true
, data tidak dikirim ke Analytics dan sebaliknya, pesan {i>error<i} akan dikembalikan ke klien.