Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Baca dokumentasi Apigee Edge.
Apa
Kebijakan ProvideMessage dapat mengubah permintaan atau pesan respons yang sudah ada, atau membuat permintaan baru atau pesan respons selama Flow proxy API. Kebijakan ini memungkinkan Anda melakukan tindakan berikut pada pesan tersebut:
- Menambahkan parameter formulir, header, atau parameter kueri baru ke pesan
- Menyalin properti yang ada dari satu pesan ke pesan lainnya
- Hapus header, parameter kueri, parameter formulir, dan payload pesan dari pesan
- Menetapkan nilai properti dalam pesan
TetapkanMessage juga memungkinkan Anda menetapkan variabel konteks arbitrer, terlepas dari operasi di atas yang mungkin berlaku untuk pesan.
Dengan ProvideMessage, Anda dapat menambahkan, mengubah, atau menghapus properti permintaan atau respons. Sebagai alternatif, Anda dapat menggunakan ReplaceMessage untuk membuat pesan respons atau permintaan kustom dan meneruskannya ke target alternatif, seperti yang dijelaskan dalam Membuat pesan permintaan kustom.
Kebijakan ini merupakan Kebijakan yang dapat diperluas, dan penggunaan kebijakan ini mungkin memiliki implikasi biaya atau pemanfaatan, bergantung pada lisensi Apigee Anda. Untuk mengetahui informasi tentang jenis kebijakan dan implikasi penggunaan, lihat Jenis kebijakan.
Kebijakan TetapkanMessage dapat membuat atau mengubah variabel alur dengan elemen turunan berikut:
Urutan elemen <Add>
, <Copy>
, <Set>
,
dan <Remove>
sangat penting. Kebijakan akan menjalankan tindakan tersebut sesuai urutan kemunculannya dalam konfigurasi kebijakan. Jika Anda perlu menghapus semua header, lalu menetapkan header tertentu, Anda harus menyertakan elemen <Remove>
sebelum elemen <Set>
.
Elemen <AssignMessage>
Menentukan kebijakan ApplyMessage.
Nilai Default | Lihat tab Kebijakan Default di bawah |
Wajib? | Diperlukan |
Type | Objek kompleks |
Elemen Induk | T/A |
Elemen Turunan |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
Elemen <AssignMessage>
menggunakan sintaksis berikut:
Sintaksis
Elemen <AssignMessage>
menggunakan sintaksis berikut:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- All AssignMessage 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> <AssignVariable> <Name>VARIABLE_NAME</Name> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> <Value>VARIABLE_VALUE</Value> </AssignVariable> <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</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> <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX" variableSuffix="SUFFIX">NEW_PAYLOAD</Payload> <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> </AssignMessage>
Kebijakan Default
Contoh berikut menunjukkan setelan default saat Anda menambahkan kebijakan aman bagi alur Anda di UI Apigee:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Saat Anda memasukkan kebijakan TetapkanMessage baru di UI Apigee, template tersebut akan berisi stub untuk semua
kemungkinan operasi. Biasanya, Anda memilih operasi mana yang ingin dilakukan dengan kebijakan ini dan menghapus elemen turunan lainnya. Misalnya, jika Anda ingin melakukan operasi penyalinan, gunakan elemen <Copy>
, lalu hapus <Add>
, <Remove>
, dan elemen turunan lainnya dari kebijakan agar lebih mudah dibaca.
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 untuk elemen turunan <AssignMessage>
:
Elemen Turunan | Wajib? | Deskripsi |
---|---|---|
Operasi umum | ||
<Add> |
Opsional | Menambahkan informasi ke objek pesan yang ditentukan oleh elemen <AssignTo> .
Untuk menimpa header atau parameter yang ada, gunakan elemen |
<Copy> |
Opsional | Menyalin informasi dari pesan yang ditentukan oleh atribut source ke objek pesan yang ditentukan oleh elemen <AssignTo> . |
<Remove> |
Opsional | Menghapus elemen yang ditentukan dari variabel pesan yang ditentukan dalam elemen
<AssignTo> . |
<Set> |
Opsional | Mengganti nilai properti yang ada pada permintaan atau respons, yang ditentukan oleh
elemen <AssignTo> .
|
Elemen turunan lainnya | ||
<AssignTo> |
Opsional | Menentukan pesan yang dijalankan oleh kebijakan ProvideMessage. Ini bisa berupa permintaan atau respons standar, atau bisa juga pesan khusus baru. |
<AssignVariable> |
Opsional | Menetapkan nilai ke variabel flow. Jika variabel tidak ada, maka
<AssignVariable> akan membuatnya. |
<IgnoreUnresolvedVariables> |
Opsional | Menentukan apakah pemrosesan berhenti ketika variabel yang belum terselesaikan ditemukan. |
Setiap elemen turunan ini dijelaskan di bagian berikutnya.
Contoh
Contoh berikut menunjukkan beberapa cara untuk menggunakan kebijakan AssignMessage:
1: Tambahkan header
Contoh berikut menambahkan header ke permintaan dengan elemen
<Add>
:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
2: Menghapus payload
Contoh berikut menghapus payload dari respons dengan elemen
<Remove>
:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3: Mengubah respons
Contoh berikut memodifikasi objek respons yang ada dengan menambahkan header ke objek tersebut:
<AssignMessage name="AM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Contoh ini tidak membuat pesan baru. Sebagai gantinya, metode ini akan memodifikasi pesan respons yang ada dengan menambahkan header HTTP.
Karena contoh ini menentukan response
sebagai nama variabel dalam elemen <AssignTo>
, kebijakan ini mengubah objek respons yang awalnya ditetapkan dengan data yang ditampilkan oleh server target.
Header HTTP yang ditambahkan ke pesan respons oleh kebijakan ini berasal dari variabel yang diisi oleh kebijakan LookupCache. Oleh karena itu, pesan respons yang dimodifikasi oleh kebijakan Tetapkan Pesan ini berisi header HTTP yang menunjukkan apakah hasil telah diambil dari cache atau tidak. Menyetel header dalam respons dapat berguna untuk proses debug dan pemecahan masalah.
4: Menetapkan konten dinamis
Anda dapat menggunakan TetapkanMessage untuk menyematkan konten dinamis dalam payload pesan respons dan permintaan.
Untuk menyematkan variabel alur dalam payload XML, gabungkan variabel yang ditetapkan dalam tanda kurung kurawal, seperti ini: {prefix.name}
.
Contoh berikut menyematkan nilai variabel alur header HTTP user-agent
dalam elemen XML yang disebut User-agent
:
<AssignMessage name="AM-set-dynamic-content"> <AssignTo>response</AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Untuk payload JSON, Anda dapat memasukkan variabel menggunakan atribut variablePrefix
dan variableSuffix
dengan karakter pembatas seperti yang ditunjukkan dalam contoh berikut:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
Untuk daftar lengkap variabel alur, lihat Referensi variabel flow.
Anda juga dapat menggunakan tanda kurung kurawal untuk menyisipkan variabel.
5: Menghapus parameter kueri
Contoh berikut menghapus parameter kueri apikey
dari permintaan:
<AssignMessage name="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Praktik terbaiknya adalah menghapus parameter kueri apikey
dari pesan
permintaan jika Anda menggunakan kebijakan VerifyAPIKey untuk autentikasi pengguna. Anda melakukan hal ini untuk mencegah informasi kunci sensitif diteruskan ke target backend.
6: Menetapkan/mendapatkan variabel
Contoh berikut menggunakan tiga kebijakanAssignMessage:
- Membuat tiga variabel alur dalam permintaan, dengan nilai statis
- Mendapatkan variabel alur secara dinamis dalam kebijakan kedua dalam alur permintaan
- Menetapkannya dalam payload respons
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> </AssignMessage>
Pada kebijakan pertama, elemen <AssignVariable>
membuat dan menetapkan tiga variabel dalam permintaan. Setiap elemen <Name>
menentukan nama variabel, dan <Value>
menentukan nilainya.
Kebijakan kedua menggunakan elemen <AssignVariable>
untuk membaca nilai dan membuat tiga variabel baru:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Dalam kebijakan kedua, elemen <Ref>
mereferensikan variabel sumber, dan elemen <Name>
menentukan nama variabel baru. Jika variabel yang dirujuk oleh elemen <Ref>
tidak dapat diakses, Anda dapat menggunakan nilai yang ditentukan oleh elemen <Value>
.
Untuk mencoba serangkaian kebijakan ini:
- Tambahkan kebijakan #1 dan #2 ke alur permintaan. Pastikan untuk menempatkan kebijakan #1 sebelum kebijakan #2.
- Tambahkan kebijakan ketiga di alur response.
- Kebijakan ketiga menggunakan elemen
<Set>
untuk menambahkan variabel ke respons. Contoh berikut membuat payload XML sebagai respons yang ditampilkan Edge ke klien:<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload"> <DisplayName>put-em-in-the-payload</DisplayName> <Set> <Payload contentType="application/xml"> <wrapper> <secret>{secret}</secret> <config> <environment>{environment}</environment> <protocol>{protocol}</protocol> </config> </wrapper> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Perhatikan bahwa sintaksis untuk mengakses variabel alur di
<Set>
adalah menggabungkannya dalam tanda kurung kurawal.Pastikan untuk menetapkan atribut
contentType
elemen<Payload>
keapplication/xml
. - Kirim permintaan ke proxy API Anda; misalnya:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Secara opsional, Anda dapat menyalurkan hasilnya melalui utilitas seperti
xmllint
sehingga XML ditampilkan dalam struktur yang diformat dengan baik:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Isi respons akan terlihat seperti berikut:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: Mendapatkan header respons ServiceCallout
Pada contoh berikut, anggaplah kebijakan ServiceCallout ada dalam permintaan proxy API, dan respons info berisi beberapa header dengan nama yang sama (Set-Cookie
). Dengan asumsi variabel respons Service Callout adalah calloutResponse
default, kebijakan berikut akan mendapatkan nilai header Set-Cookie
kedua.
<AssignMessage name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Untuk mencantumkan semua nilai header, gunakan variabel berikut:
{calloutResponse.header.Set-Cookie.values}
8: Menyimpan dan menghapus parameter formulir, header, parameter kueri
Jika Anda ingin menggunakan <Remove>
untuk menghapus header, parameter kueri, atau parameter formulir, tetapi
mempertahankan akses ke nilainya nanti dalam alur kebijakan, Anda dapat menyimpan nilainya menggunakan <AssignVariable>
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove"> <DisplayName>AM-StoreAndRemove</DisplayName> <AssignVariable> <Name>var_grant_type</Name> <Ref>request.formparam.grant_type</Ref> </AssignVariable> <Remove> <Headers/> <FormParams/> <Payload/> </Remove> <Set> <Headers> <Header name="Content-Type">application/x-www-form-urlencoded</Header> <Header name="Accept">application/json</Header> <Header name="Grant-Type">{var_grant_type}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Setiap elemen turunan dalam referensi ini memiliki contoh tambahan. Untuk contoh lainnya, lihat ContohAssignMessage di GitHub.
Referensi elemen turunan
Bagian ini menjelaskan elemen turunan <AssignMessage>
.
<Add>
Menambahkan informasi ke permintaan atau respons, yang ditentukan oleh elemen
<AssignTo>
.
Elemen <Add>
menambahkan properti baru pada pesan yang tidak ada dalam pesan asli. Perhatikan bahwa <Set>
juga menyediakan fungsi ini. Untuk mengubah nilai properti yang sudah ada, gunakan elemen <Set>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Jenis kompleks |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan |
<FormParams> <Headers> <QueryParams> |
Elemen <Add>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage 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> </AssignMessage>
Contoh 1
Contoh berikut menggunakan elemen <FormParams>
untuk mendapatkan nilai
tiga parameter string kueri dari permintaan awal dan menetapkannya sebagai parameter formulir pada
permintaan endpoint target:
<AssignMessage name="AM-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> </AssignMessage>
Contoh 2
Contoh berikut menggunakan elemen <Headers>
untuk menambahkan
header partner-id
ke permintaan yang akan dikirim ke endpoint target:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 3
Contoh berikut menggunakan elemen <QueryParams>
untuk menambahkan satu parameter kueri dengan nilai statis ke permintaan:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Contoh ini menggunakan <Add>
dalam preflow permintaan. Jika Anda melihat hasil dalam alat
seperti Ringkasan debug, permintaan untuk https://example-target.com/get
menjadi
https://example-target.com/get?myParam=42
.
Elemen turunan <Add>
mendukung penggantian string dinamis, yang dikenal sebagai pembuatan template pesan.
<FormParams>
(turunan dari <Add>
)
Menambahkan parameter formulir baru ke pesan permintaan. Elemen ini tidak berpengaruh pada pesan respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <FormParam> |
Elemen Induk |
<Add>
|
Elemen Turunan |
<FormParam> |
Elemen <FormParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage 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> </AssignMessage>
Contoh 1
Contoh berikut menambahkan parameter bentuk tunggal (answer
) dan nilai statis (42
) ke
permintaan:
<AssignMessage name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 2
Contoh berikut mendapatkan nilai parameter kueri name
dan menambahkannya ke permintaan sebagai parameter formulir, lalu menghapus parameter kueri:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </AssignMessage>
Perhatikan bahwa contoh ini tidak menentukan target dengan <AssignTo>
. Kebijakan ini hanya menambahkan parameter ke permintaan tersebut.
Contoh 3
Contoh berikut menambahkan beberapa parameter formulir ke permintaan:
<AssignMessage name="AM-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> </AssignMessage>
Contoh ini mendapatkan parameter string kueri dari permintaan asal dan menambahkannya sebagai parameter formulir dengan nama yang berbeda. Kemudian, parameter kueri asli akan dihapus. Apigee akan mengirim permintaan yang telah diubah ke endpoint target.
Anda dapat menggunakan Ringkasan debug untuk melihat alur tersebut. Anda akan melihat bahwa isi permintaan berisi data formulir berenkode URL, yang awalnya diteruskan sebagai parameter string kueri:
username=nick&zip_code=90210&default_language=en
Anda hanya dapat menggunakan <FormParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP: POST
- Jenis pesan: Permintaan
- Salah satu (atau kedua) hal berikut:
- Data formulir: Tetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan
curl
, tambahkan-d ""
ke permintaan Anda. - Header
Content-Length
: Ditetapkan ke 0 (jika tidak ada data dalam permintaan asli; jika tidak, panjang saat ini, dalam byte). Misalnya, dengancurl
, tambahkan-H "Content-Length: 0"
ke permintaan Anda.
- Data formulir: Tetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan
Contoh:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
Saat Anda menambahkan <FormParams>
, Apigee akan menetapkan header Content-Type
permintaan ke application/x-www-form-urlencoded
sebelum mengirim pesan ke layanan target.
<Headers>
(turunan dari <Add>
)
Menambahkan header baru ke permintaan atau respons yang ditentukan, yang ditentukan oleh elemen <AssignTo>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <Header> |
Elemen Induk |
<Add>
|
Elemen Turunan |
<Header> |
Elemen <Headers>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> </Add> </AssignMessage>
Contoh 1
Contoh berikut menambahkan header partner-id
ke pesan permintaan, dan menetapkan nilai variabel alur verifyapikey.VAK-1.developer.app.partner-id
ke header tersebut.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(turunan dari <Add>
)
Menambahkan parameter kueri baru ke permintaan. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <QueryParam> |
Elemen Induk |
<Add>
|
Elemen Turunan |
<QueryParam> |
Elemen <QueryParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Contoh 1
Contoh berikut menambahkan parameter kueri myParam
ke permintaan dan menetapkan nilai
42
ke permintaan tersebut:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <QueryParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP:
GET
,POST
,PATCH
,DELETE
- Jenis pesan: Permintaan
Selain itu, Anda hanya dapat menetapkan parameter kueri jika atribut type
milik elemen <AssignTo>
merupakan pesan permintaan. Menetapkannya dalam respons tidak akan berpengaruh.
Jika Anda menentukan array parameter kueri kosong dalam kebijakan Anda (<Add><QueryParams/></Add>
), kebijakan tersebut tidak akan menambahkan parameter kueri apa pun. Ini sama dengan menghilangkan <QueryParams>
.
<AssignTo>
Menentukan objek tempat kebijakan TetapkanMessage beroperasi. Opsinya adalah:
- Pesan permintaan:
request
yang diterima oleh proxy API - Pesan respons:
response
yang ditampilkan dari server target - Pesan kustom: Objek permintaan atau respons kustom
Perlu diketahui bahwa dalam beberapa kasus, Anda tidak dapat mengubah objek tempat kebijakan TetapkanMessage.
Misalnya, Anda tidak dapat menggunakan <Add>
atau <Set>
untuk menambahkan atau mengubah parameter kueri
(<QueryParams>
) atau parameter formulir (<FormParams>
) pada respons. Anda hanya dapat memanipulasi parameter kueri dan parameter formulir berdasarkan permintaan.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan | Tidak ada |
Jika Anda tidak menentukan <AssignTo>
, atau menentukan elemen <AssignTo>
, tetapi tidak menentukan nilai teks untuk elemen, kebijakan akan bertindak pada permintaan atau respons default, yang didasarkan pada tempat kebijakan dijalankan. Jika dijalankan dalam alur permintaan, kebijakan akan memengaruhi pesan permintaan. Jika dijalankan di alur respons, kebijakan akan memengaruhi respons secara default.
Elemen <AssignTo>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo> </AssignMessage>
Contoh 1
Contoh berikut tidak menetapkan pesan dalam teks <AssignTo>
. Hal ini menyiratkan
bahwa kebijakan akan bertindak pada pesan request
atau response
,
bergantung pada tempat kebijakan dijalankan.
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> <!-- no-op --> ... </AssignMessage>
Jika Anda menentukan createNew="false"
, dan tidak memberikan nama pesan secara eksplisit,
atribut <AssignTo>
lainnya tidak akan relevan. Dalam hal ini, Anda mungkin
perlu menghilangkan elemen <AssignTo>
sepenuhnya.
Contoh 2
Contoh berikut akan membuat objek permintaan baru, yang menimpa objek yang ada:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> ... </AssignMessage>
Saat Anda membuat objek permintaan atau respons baru, elemen lain dari kebijakan ProvideMessage (seperti <Add>
, <Set>
, dan <Copy>
) bertindak pada objek permintaan
baru tersebut.
Anda dapat mengakses objek permintaan baru dalam kebijakan lain nanti dalam alur tersebut, atau mengirim objek permintaan baru ke layanan eksternal dengan kebijakan ServiceCallout.
Contoh 3
Contoh berikut akan membuat objek permintaan baru bernama MyRequestObject
:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> ... </AssignMessage>
Saat Anda membuat objek permintaan atau respons baru, elemen lain dari kebijakan ProvideMessage (seperti <Add>
, <Set>
, dan <Copy>
) bertindak pada objek permintaan
baru tersebut.
Anda dapat mengakses objek permintaan baru berdasarkan nama di kebijakan lain nanti dalam alur tersebut, atau mengirim objek permintaan baru ke layanan eksternal dengan kebijakan ServiceCallout.
Tabel berikut menjelaskan atribut <AssignTo>
:
Atribut | Deskripsi | Wajib? | Jenis |
---|---|---|---|
createNew |
Menentukan apakah kebijakan ini membuat pesan baru saat menetapkan nilai. Jika Jika
Jika
|
Opsional | Boolean |
transport |
Menentukan jenis transpor untuk jenis pesan permintaan atau respons. Nilai defaultnya adalah |
Opsional | String |
type |
Menentukan jenis pesan baru, jika createNew adalah true . Nilai yang valid adalah request atau response .
Nilai defaultnya adalah |
Opsional | String |
<AssignVariable>
Menetapkan nilai ke variabel alur tujuan (seperti variabel yang nilainya ditetapkan oleh kebijakan TetapkanMessage). Jika variabel flow tidak ada, <AssignVariable>
akan membuatnya. Anda dapat menggunakan beberapa elemen TetapkanVariabel dalam kebijakan MenetapkanMessage. Pengujian ini dijalankan sesuai urutan kemunculan dalam konfigurasi kebijakan.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Jenis kompleks |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan |
<Name> (wajib ada)<PropertySetRef> <Ref> <ResourceURL> <Template> <Value> |
Nilai yang Anda tetapkan ke variabel alur tujuan dapat berupa salah satu dari yang berikut:
- String literal: Gunakan elemen turunan
<Value>
untuk menentukan nilai string literal untuk variabel alur tujuan. - Variabel alur: Gunakan elemen turunan
<Ref>
untuk menentukan nilai variabel alur yang ada untuk variabel alur tujuan. Untuk mengetahui daftar lengkap variabel alur yang dapat digunakan sebagai sumber, lihat Referensi variabel flow. - Kumpulan properti: Gunakan elemen turunan
<PropertySetRef>
untuk mengambil nilai dari pasangan nama/kunci kumpulan properti dan menyimpannya dalam variabel flow. Memungkinkan Anda mengakses kumpulan properti secara dinamis. - URL Resource: Gunakan elemen turunan
<ResourceURL>
untuk menentukan URL resource teks, dengan jenis XSL, XSD, WSDL, JavaScript, atau Spesifikasi OpenAPI. Elemen ini menetapkan konten resource ke dalam variabel alur bernama. - Template pesan: Gunakan elemen turunan
<Template>
untuk menentukan template pesan bagi variabel alur tujuan.
Urutan prioritas untuk elemen turunan ini adalah: ResourceURL, Template, Ref, Value, PropertySetRef.
Elemen <AssignVariable>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> <Value>VARIABLE_VALUE</Value> </AssignVariable> </AssignMessage>
Gunakan elemen <Ref>
untuk menentukan variabel sumber. Jika variabel yang direferensikan oleh <Ref>
tidak dapat diakses, Apigee akan menggunakan nilai yang ditentukan oleh elemen <Value>
. Jika Anda menentukan
<Template>
, elemen ini akan lebih diprioritaskan daripada
elemen seinduk <Ref>
dan <Value>
.
Contoh 1
Contoh berikut menetapkan nilai variabel baru, myvar
, ke nilai literal 42
:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Contoh 2
Contoh berikut menetapkan nilai variabel alur
request.header.user-agent
ke variabel alur tujuan myvar
dan nilai parameter kueri country
ke variabel alur tujuan
Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Jika salah satu penetapan gagal, Apigee akan menetapkan nilai ErrorOnCopy
ke variabel alur tujuan.
Jika variabel alur myvar
atau Country
tidak ada,
<AssignVariable>
akan membuatnya.
Contoh 3
Contoh berikut menggunakan elemen turunan <Template>
untuk menyambungkan dua variabel konteks dengan string literal (tanda hubung) di antaranya:
<AssignMessage name='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Contoh 4
Contoh berikut menggunakan <AssignVariable>
untuk menonaktifkan perilaku default
penerapan akhiran jalur dari permintaan proxy ke permintaan target:
<AssignMessage name='AM-PathSuffixFalse'> <AssignVariable> <Name>target.copy.pathsuffix</Name> <Value>false</Value> </AssignVariable> </AssignMessage>
Penggunaan umum untuk <AssignVariable>
adalah untuk menetapkan nilai default untuk parameter kueri, header, atau nilai lainnya yang dapat diteruskan dengan permintaan. Anda melakukannya dengan kombinasi elemen turunan <Ref>
dan <Value>
. Untuk mengetahui informasi
selengkapnya, lihat contoh untuk <Ref>
.
<Name>
(turunan dari <AssignVariable>
)
Menentukan nama variabel alur tujuan - variabel yang nilainya ditetapkan oleh
kebijakan TetapkanMessage. Jika variabel yang disebutkan dalam <Name>
tidak ada, kebijakan akan membuat variabel dengan nama tersebut.
Nilai Default | T/A |
Wajib? | Diperlukan |
Type | String |
Elemen Induk |
<AssignVariable>
|
Elemen Turunan | Tidak ada |
Elemen <Name>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> </AssignVariable> </AssignMessage>
Contoh 1
Contoh berikut menentukan variabel tujuan sebagai myvar
, dan menetapkannya
ke nilai literal 42
:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Jika myvar
tidak ada, <AssignVariable>
akan membuatnya.
<PropertySetRef>
(turunan dari <AssignVariable>
)
Elemen ini memungkinkan Anda mengambil nilai nama/pasangan kunci kumpulan properti secara dinamis. Untuk mempelajari kumpulan properti, lihat Menggunakan kumpulan properti.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignVariable>
|
Elemen Turunan | Tidak ada |
Kumpulan properti terdiri dari pasangan nama/kunci.
Misalnya: propset1.id=12345
, dengan propset1
sebagai nama properti yang ditetapkan, id
adalah kunci, dan 12345
adalah nilai kunci.
Elemen turunan PropertySetRef
memungkinkan Anda memilih nama dan/atau kunci kumpulan properti secara dinamis. Asumsikan Anda memiliki 200 aturan perutean dalam file kumpulan properti. Anda dapat mengakses aturan kumpulan properti sebagai berikut, dengan routingrules
adalah nama kumpulan properti dan rule1
, rule2
, rulen
adalah kunci:
propertyset.routingrules.rule1 propertyset.routingrules.rule2 propertyset.routingrules.rulen
Untuk mengakses properti ini dalam alur proxy API, Anda harus mengetahui aturan mana yang ingin Anda pilih pada waktu desain. Namun, anggaplah nama aturan ada di header atau payload permintaan. Salah satu cara untuk memilih aturan ini adalah menggunakan kebijakan JavaScript dengan kode seperti berikut:
context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.
Di sisi lain, fitur PropertySetRef
ProvideMessage memungkinkan Anda memilih kunci properti secara dinamis tanpa
menggunakan JavaScript.
Anda dapat menggunakan campuran variabel flow dan nilai string literal dalam elemen <PropertySetRef>
. Lihat contoh untuk detail selengkapnya.
Elemen <PropertySetRef>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> </AssignVariable> </AssignMessage>
Contoh 1
Contoh ini menetapkan nilai dari kunci set properti ke variabel alur. Dalam hal ini,
nama kumpulan properti diperoleh dari header propset_name
, kunci diberikan
di header propset_key
, dan nilai yang ditetapkan ke kunci disimpan dalam variabel
flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef> </AssignVariable> </AssignMessage>
Anda dapat menggunakan kombinasi variabel flow dan string literal dalam elemen
<PropertySetRef>
.
Contoh 2
Contoh ini menetapkan nilai dari kunci yang ditetapkan properti ke variabel alur menggunakan nama kunci tetap (string literal). Dalam hal ini, nama kumpulan properti diperoleh dari header propset_name
, kuncinya adalah string literal key1
, dan nilai yang ditetapkan ke kunci disimpan dalam variabel flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef> </AssignVariable> </AssignMessage>
Anda dapat menggunakan kombinasi variabel flow dan string literal dalam elemen
<PropertySetRef>
.
<Ref>
(turunan dari <AssignVariable>
)
Menentukan sumber penetapan sebagai variabel alur. Variabel alur dapat berupa salah satu variabel alur yang telah ditentukan sebelumnya (seperti yang tercantum dalam Referensi variabel alur), atau variabel alur kustom yang Anda buat.
Nilai <Ref>
selalu ditafsirkan sebagai variabel alur; Anda tidak dapat
menentukan string literal sebagai
nilai. Untuk menetapkan nilai string literal, gunakan elemen <Value>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignVariable>
|
Elemen Turunan | Tidak ada |
Saat Anda menentukan variabel flow dengan <Ref>
, hapus
tanda kurung tutup {}
yang biasanya Anda gunakan untuk mereferensikan variabel flow. Misalnya, untuk menetapkan nilai variabel baru ke nilai variabel alur client.host
:
DO specify the variable name without brackets: <Ref>client.host</Ref> DO NOT use brackets: <Ref>{client.host}</Ref>
Untuk menentukan nilai default bagi variabel alur tujuan, gunakan <Value>
yang dikombinasikan dengan <Ref>
. Jika variabel alur yang ditentukan oleh
<Ref>
tidak ada, tidak dapat dibaca, atau bernilai null, Apigee akan menetapkan nilai
<Value>
ke variabel alur tujuan.
Elemen <Ref>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <Ref>SOURCE_VARIABLE</Ref> </AssignVariable> </AssignMessage>
Contoh 1
Contoh berikut menetapkan nilai variabel alur
request.header.user-agent
ke variabel alur tujuan myvar
dan
nilai parameter kueri country
ke variabel Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
Dalam contoh ini, Apigee tidak memiliki nilai default (atau nilai penggantian) yang ditentukan untuk kedua penetapan.
Contoh 2
Contoh berikut menetapkan nilai variabel alur request.header.user-agent
ke variabel alur tujuan myvar
dan nilai
parameter kueri country
ke variabel Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Dalam contoh ini, jika nilai variabel alur request.header.user-agent
atau parameter kueri Country
adalah null, tidak dapat dibaca, atau berformat salah, Apigee akan menetapkan nilai ErrorOnCopy
ke variabel baru.
Contoh 3
Kasus penggunaan umum untuk <AssignVariable>
adalah menetapkan nilai default dari parameter kueri, header, atau nilai lainnya yang dapat diteruskan dengan permintaan. Misalnya, Anda membuat
proxy weather API di mana permintaan mengambil satu parameter kueri bernama w
. Parameter ini berisi ID kota yang Anda inginkan untuk cuacanya. URL permintaan memiliki bentuk:
http://myCO.com/v1/weather/forecastrss?w=CITY_ID
Untuk menentukan nilai default untuk w
, buat kebijakan DefineMessage seperti berikut:
<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3"> <AssignTo createNew="false" transport="http" type="request"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignVariable> <Name>request.queryparam.w</Name> <Ref>request.queryparam.w</Ref> <Value>12797282</Value> </AssignVariable> </AssignMessage>
Dalam contoh ini, <AssignVariable>
mendapatkan nilai request.queryparam.w
dan menetapkannya ke dirinya sendiri. Jika variabel flow bernilai null, yang berarti parameter kueri w
dihilangkan dari permintaan, contoh ini akan menggunakan nilai default dari
elemen <Value>
. Oleh karena itu, Anda dapat membuat permintaan ke proxy API ini yang menghilangkan parameter kueri w
:
http://myCO.com/v1/weather/forecastrss
...dan tetap meminta proxy API mengembalikan hasil yang valid.
Nilai <Ref>
harus berupa variabel alur, seperti properti objek request
, response
, atau target
, atau nama variabel alur kustom.
Jika Anda menentukan variabel flow yang tidak ada untuk nilai <Ref>
, dan nilai <IgnoreUnresolvedVariables>
adalah false
, Apigee akan menampilkan error.
<ResourceURL>
(turunan dari <AssignVariable>
)
Menentukan URL resource teks
sebagai sumber penetapan variabel. Apigee memuat variabel flow yang ditentukan dalam
<Name>
dengan konten resource yang direferensikan. Resource dapat berupa
jenis XSD, XSL, WSDL, JavaScript, Property Set, atau OpenAPI Spec.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignVariable>
|
Elemen Turunan | Tidak ada |
Jika resource yang ditentukan oleh <ResourceURL>
tidak ada, maka: jika nilai <IgnoreUnresolvedVariables>
adalah true
, Apigee akan menetapkan nilai null
ke variabel alur tujuan, sedangkan jika nilai <IgnoreUnresolvedVariables>
adalah false
, Apigee akan menampilkan error.
Elemen <ResourceURL>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> </AssignVariable> </AssignMessage>
Nilai teks mengambil nilai string, dan ditafsirkan sebagai template pesan. Berikut adalah nilai yang valid:
<ResourceURL>jsc://my-js-file.js</ResourceURL> <ResourceURL>wsdl://{variable-goes-here}</ResourceURL> <ResourceURL>{variable-goes-here}</ResourceURL>
Contoh 1
Contoh berikut menetapkan nilai resource JSON, yang dimuat ke proxy di folder
jsc
, ke dalam variabel alur assigned-variable
:
<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>jsc://settings.json</ResourceURL> </AssignVariable> </AssignMessage>
Contoh 2
Contoh berikut menetapkan nilai resource Spesifikasi OpenAPI, yang dimuat ke dalam proxy di folder oas
, ke dalam variabel alur assigned-variable
, lalu menetapkan nilai tersebut sebagai Payload
dalam isi respons:
<AssignMessage name='AM-Response'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>oas://Fulfillment.yaml</ResourceURL> </AssignVariable> <Set> <Payload contentType='application/yaml'>{assigned-variable}</Payload> </Set> </AssignMessage>
<Template>
(turunan dari <AssignVariable>
)
Menentukan template pesan. Template pesan memungkinkan Anda melakukan penggantian string variabel saat kebijakan dieksekusi, dan dapat menggabungkan string literal dengan nama variabel yang digabungkan dalam tanda kurung kurawal. Selain itu, template pesan mendukung fungsi seperti escaping dan konversi kasus.
Gunakan atribut ref
untuk menentukan variabel alur dengan nilai variabel tersebut
adalah template pesan. Misalnya, Anda dapat menyimpan template pesan sebagai atribut khusus pada aplikasi developer. Saat Apigee mengidentifikasi aplikasi developer setelah memverifikasi kunci API atau token keamanan (melalui kebijakan tambahan), elemen <AssignVariable>
dapat menggunakan template pesan dari atribut khusus aplikasi, yang tersedia sebagai variabel alur dari kebijakan keamanan. Contoh berikut mengasumsikan bahwa template
pesan tersedia dalam atribut khusus yang disebut message_template
di
aplikasi developer yang melakukan panggilan API, tempat kebijakan VerifyAPIKey digunakan untuk memverifikasi
kunci API aplikasi:
<Template ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignVariable>
|
Elemen Turunan | Tidak ada |
Elemen <Template>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> </AssignVariable> </AssignMessage>
Contoh 1
Contoh berikut menggunakan sintaksis template pesan untuk menyambungkan dua variabel konteks dengan string literal (tanda hubung) di antara keduanya:
<AssignMessage name='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Contoh 2
Contoh berikut menetapkan variabel alur, dengan nilai variabelnya adalah template pesan yang telah ditentukan sebelumnya. Gunakan opsi ini jika Anda ingin memasukkan template yang telah ditentukan sebelumnya saat runtime tanpa harus mengubah kebijakan:
<AssignMessage name='AV-via-template-indirectly'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Contoh 3
Contoh berikut menentukan variabel flow dan nilai teks. Dalam hal ini, jika
variabel yang direferensikan adalah non-null, nilai tersebut akan digunakan sebagai template. Jika nilai yang dirujuk adalah null, maka nilai teks (dalam hal ini, {system.uuid}-{messageid}
) akan digunakan sebagai template. Pola ini berguna untuk memberikan nilai override
, ketika
dalam beberapa kasus Anda ingin mengganti template default (bagian teks) dengan nilai
yang ditetapkan secara dinamis. Misalnya, pernyataan kondisional mungkin mengambil nilai dari peta nilai kunci dan menetapkan variabel yang direferensikan ke nilai tersebut:
<AssignMessage name='AV-template-with-fallback'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(turunan dari <AssignVariable>
)
Menentukan nilai variabel alur tujuan yang ditetapkan dengan <AssignVariable>
. Nilai
selalu ditafsirkan sebagai string literal; Anda tidak dapat menggunakan variabel flow sebagai nilai, meskipun Anda menggabungkan nilai dalam tanda kurung ({}
). Untuk menggunakan variabel flow, gunakan
<Ref>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignVariable>
|
Elemen Turunan | Tidak ada |
Jika digunakan bersama dengan elemen <Ref>
, <Value>
bertindak sebagai nilai default (atau penggantian). Jika <Ref>
tidak ditentukan, tidak dapat diselesaikan, atau null, nilai <Value>
akan digunakan.
Elemen <Value>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <Value>VARIABLE_VALUE</Value> </AssignVariable> </AssignMessage>
Contoh 1
Contoh berikut menetapkan nilai variabel alur tujuan, myvar
,
ke nilai literal 42
:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Contoh 2
Contoh berikut menetapkan nilai variabel alur
request.header.user-agent
ke variabel alur myvar
dan nilai
parameter kueri country
ke variabel Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Jika salah satu penetapan gagal, <AssignVariable>
akan menetapkan nilai ErrorOnCopy
ke
variabel alur tujuan.
<Copy>
Menyalin nilai dari pesan yang ditentukan oleh atribut source
ke pesan yang ditentukan oleh elemen <AssignTo>
. Jika Anda tidak menentukan target dengan <AssignTo>
, kebijakan ini akan menyalin nilai ke permintaan atau respons, bergantung pada alur yang dijalankan oleh kebijakan ini.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <StatusCode> <Verb> <Version> |
Jika Anda tidak menetapkan elemen turunan di bawah elemen <Copy>
, semua bagian pesan sumber yang ditetapkan akan disalin.
Elemen <Copy>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="POLICY_NAME" >
<Copy source="VARIABLE_NAME">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
...
</FormParams>
<!-- Copy all headers -->
<Headers/>
<!-- or, copy specific headers by name -->
<Headers>
<Header name="HEADER_NAME"/>
<!-- or -->
<Header name="HEADER_NAME">[false|true]</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
...
</QueryParams>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</AssignMessage>
Contoh 1
Contoh berikut menyalin header, tiga parameter formulir, jalur, dan semua parameter kueri dari pesan request
ke permintaan kustom baru bernama newRequest
:
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
Karena elemen seperti <Payload>
dan <Verb>
tidak ada, kebijakan tidak akan menyalin bagian pesan tersebut.
Contoh 2
Contoh berikut pertama-tama menghapus semua nilai dalam pesan response
yang ada, lalu menyalin semua nilai dari pesan berbeda yang disebut secondResponse
ke dalam pesan response
:
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </AssignMessage>
Elemen <Copy>
memiliki satu atribut:
Atribut | Deskripsi | Wajib? | Jenis |
---|---|---|---|
sumber |
Menentukan objek sumber salinan.
|
Opsional | String |
<FormParams>
(turunan dari <Copy>
)
Menyalin parameter bentuk dari permintaan yang ditentukan oleh atribut source
elemen <Copy>
ke permintaan yang ditentukan oleh elemen <AssignTo>
. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <FormParam> atau array kosong |
Elemen Induk |
<Copy>
|
Elemen Turunan |
<FormParam> |
Elemen <FormParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menyalin parameter formulir tunggal dari permintaan ke permintaan kustom MyCustomRequest
:
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 2
Contoh berikut menyalin semua parameter formulir ke permintaan kustom
MyCustomRequest
:
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 3
Contoh berikut menyalin tiga parameter formulir ke permintaan kustom
MyCustomRequest
:
<AssignMessage name="copy-formparams-3"> <Copy source="request"> <FormParams> <FormParam name="paramName1"/> <FormParam name="paramName2"/> <FormParam name="paramName3"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 4
Jika ada beberapa parameter formulir dengan nama yang sama, gunakan sintaksis berikut:
<AssignMessage name="copy-formparams-4"> <Copy source="request"> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh ini menyalin f1
, f2
, dan nilai kedua f3
. Jika f3
hanya memiliki satu
nilai, nilai tersebut tidak akan disalin.
Anda hanya dapat menggunakan <FormParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP:
POST
- Jenis pesan: Respons
- Salah satu (atau kedua) hal berikut:
- Data formulir: Tetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan
curl
, tambahkan-d ""
ke permintaan Anda. - Header
Content-Length
: Tetapkan ke 0 (jika tidak ada data dalam permintaan asli; jika tidak, durasi saat ini. Misalnya, dengancurl
, tambahkan-H "Content-Length: 0"
ke permintaan Anda.
- Data formulir: Tetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan
Saat Anda menyalin <FormParams>
, <Copy>
akan menetapkan Content-Type
pesan ke application/x-www-form-urlencoded
sebelum mengirim pesan ke layanan target.
<Headers>
(turunan dari <Copy>
)
Menyalin header HTTP dari pesan permintaan atau respons yang ditentukan oleh atribut source
elemen <Copy>
ke pesan permintaan atau respons yang ditentukan oleh elemen <AssignTo>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <Header> atau array kosong |
Elemen Induk |
<Copy>
|
Elemen Turunan |
<Header> |
Elemen <Headers>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menyalin header user-agent
dari permintaan ke objek permintaan kustom baru:
<AssignMessage name="AM-copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 2
Untuk menyalin semua header, gunakan elemen <Headers>
kosong, seperti yang ditunjukkan contoh berikut:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 3
Jika ada beberapa header dengan nama yang sama, gunakan sintaksis berikut:
<AssignMessage name="copy-headers-3"> <Copy source="request"> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh ini menyalin h1
, h2
, dan nilai kedua h3
. Jika h3
hanya memiliki satu
nilai, nilai tersebut tidak akan disalin.
<Path>
(turunan dari <Copy>
)
Menentukan apakah jalur harus disalin dari permintaan sumber ke permintaan tujuan. Elemen ini tidak berpengaruh pada respons.
Jika true
, kebijakan ini akan menyalin jalur dari pesan permintaan yang ditentukan oleh atribut source
milik elemen <Copy>
ke pesan permintaan yang ditentukan oleh elemen <AssignTo>
.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<Copy>
|
Elemen Turunan | Tidak ada |
Elemen <Path>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menunjukkan bahwa DefineMessage harus menyalin jalur dari permintaan sumber ke objek permintaan kustom yang baru:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <Path>
jika kriteria berikut terpenuhi:
- Jenis pesan: Permintaan
<Payload>
(turunan dari <Copy>
)
Menentukan apakah payload harus disalin dari sumber ke tujuan. Sumber dan tujuan dapat berupa permintaan atau respons.
Jika true
, kebijakan ini akan menyalin payload dari pesan yang ditentukan oleh atribut source
milik elemen <Copy>
ke pesan yang ditentukan oleh elemen <AssignTo>
.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<Copy>
|
Elemen Turunan | Tidak ada |
Elemen <Payload>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menetapkan <Payload>
ke true
sehingga payload permintaan disalin dari permintaan ke respons:
<AssignMessage name="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </AssignMessage>
<QueryParams>
(turunan dari <Copy>
)
Menyalin parameter string kueri dari permintaan yang ditentukan oleh atribut source
elemen <Copy>
ke permintaan yang ditentukan oleh elemen <AssignTo>
. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <QueryParam> atau array kosong |
Elemen Induk |
<QueryParam>
|
Elemen Turunan | Tidak ada |
Elemen <QueryParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menyalin parameter kueri my_param
dari permintaan ke objek permintaan kustom baru:
<AssignMessage name="copy-queryparams-1"> <Copy source="request"> <QueryParams> <QueryParam name="my_param"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 2
Contoh berikut menyalin semua parameter kueri dari permintaan ke objek permintaan kustom baru:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh 3
Jika ada beberapa parameter kueri dengan nama yang sama, gunakan sintaksis berikut:
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Contoh ini menyalin qp1
, qp2
, dan nilai kedua qp3
. Jika qp3
hanya memiliki
satu nilai, nilai tersebut tidak akan disalin.
Anda hanya dapat menggunakan <QueryParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP:
GET
,POST
,PATCH
,DELETE
- Jenis pesan: Permintaan
<StatusCode>
(turunan dari <Copy>
)
Menentukan apakah kode status disalin dari respons sumber ke respons tujuan. Elemen ini tidak berpengaruh pada permintaan.
Jika true
, kebijakan ini akan menyalin kode status dari pesan respons yang ditentukan oleh atribut source
elemen <Copy>
ke pesan respons yang ditentukan oleh elemen <AssignTo>
.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<Copy>
|
Elemen Turunan | Tidak ada |
Elemen <StatusCode>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menetapkan <StatusCode>
ke true
, yang menyalin kode status dari objek respons default ke objek respons kustom baru:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <StatusCode>
jika pesan sumber dan tujuan berjenis Respons.
Penggunaan <StatusCode>
yang umum adalah untuk menetapkan bahwa kode status respons proxy ke nilai yang berbeda dari yang diterima dari target.
<Verb>
(turunan dari <Copy>
)
Menentukan apakah kata kerja HTTP disalin dari permintaan sumber ke permintaan tujuan. Elemen ini tidak berpengaruh pada respons.
Jika true
, akan menyalin kata kerja yang ditemukan dalam atribut source
elemen <Copy>
ke permintaan yang ditentukan dalam elemen <AssignTo>
.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<Copy>
|
Elemen Turunan | Tidak ada |
Elemen <Verb>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menetapkan <Verb>
ke true
, yang menyalin kata kerja dari permintaan default ke permintaan kustom baru:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <Verb>
jika kriteria berikut terpenuhi:
- Jenis pesan: Permintaan
<Version>
(turunan dari <Copy>
)
Menentukan apakah versi HTTP disalin dari permintaan sumber ke permintaan tujuan. Elemen ini tidak berpengaruh pada respons.
Jika true
, akan menyalin versi HTTP yang ditemukan dalam atribut source
elemen <Copy>
ke objek yang ditentukan oleh elemen <AssignTo>
.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<Copy>
|
Elemen Turunan | Tidak ada |
Elemen <Version>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Contoh 1
Contoh berikut menetapkan <Version>
ke true
pada permintaan, yang menyalin
versi dari objek permintaan default ke objek permintaan kustom baru:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <Version>
jika kriteria berikut terpenuhi:
- Jenis pesan: Permintaan
<DisplayName>
Gunakan selain atribut name
untuk memberi label kebijakan di
editor proxy UI pengelolaan dengan nama yang berbeda dan lebih alami.
Elemen <DisplayName>
bersifat umum untuk semua kebijakan.
Nilai Default | T/A |
Wajib? | Opsional. Jika Anda menghilangkan <DisplayName> , nilai
atribut name kebijakan akan digunakan. |
Jenis | String |
Elemen Induk | <PolicyElement> |
Elemen Turunan | Tidak ada |
Elemen <DisplayName>
menggunakan sintaksis berikut:
Sintaksis
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Contoh
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Elemen <DisplayName>
tidak memiliki atribut atau elemen turunan.
<IgnoreUnresolvedVariables>
Menentukan apakah pemrosesan berhenti ketika variabel yang belum terselesaikan ditemukan.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan | Tidak ada |
Tetapkan ke true
untuk mengabaikan variabel yang belum terselesaikan dan melanjutkan pemrosesan; jika tidak, false
. Nilai
defaultnya adalah false
.
Menetapkan <IgnoreUnresolvedVariables>
ke true
berbeda dengan menetapkan continueOnError
<AssignMessage>
ke true
karena kebijakan ini dikhususkan untuk menetapkan dan mendapatkan nilai
variabel. Jika Anda menetapkan continueOnError
ke true
, Apigee akan mengabaikan semua error, bukan hanya error yang ditemukan saat menggunakan variabel.
Elemen <IgnoreUnresolvedVariables>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Contoh 1
Contoh berikut menetapkan <IgnoreUnresolvedVariables>
ke true
:
<AssignMessage name="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Karena <IgnoreUnresolvedVariables>
disetel ke true
, jika
variabel possibly-defined-variable
tidak ditentukan, kebijakan ini tidak akan
menampilkan kesalahan.
<Remove>
Menghapus header, parameter kueri, parameter formulir, dan/atau payload pesan dari suatu pesan. Tag <Remove>
kosong akan menghapus semuanya dari pesan.
Pesan yang terpengaruh dapat berupa permintaan atau respons. Anda menentukan pesan mana yang ditindaklanjuti oleh <Remove>
menggunakan elemen <AssignTo>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Jenis kompleks |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan |
<FormParams> <Headers> <Payload> <QueryParams> |
Kasus penggunaan umum untuk <Remove>
adalah menghapus header atau parameter kueri yang berisi informasi sensitif dari objek permintaan masuk, agar tidak diteruskan ke server backend.
Elemen <Remove>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Contoh 1
Contoh berikut menghapus isi pesan dari respons:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
Dalam alur respons, kebijakan ini menghapus isi respons, yang hanya menampilkan header HTTP ke klien.
Contoh 2
Contoh berikut menghapus semua parameter formulir dan parameter kueri dari objek request
:
<AssignMessage name="AM-remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 3
Contoh berikut menghapus semuanya dari objek pesan:
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
Biasanya, Anda hanya akan melakukan ini jika akan menggunakan elemen <Set>
atau elemen <Copy>
untuk menetapkan beberapa nilai pengganti ke dalam pesan.
<FormParams>
(turunan dari <Remove>
)
Menghapus parameter formulir yang ditentukan dari permintaan. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <FormParam> atau array kosong |
Elemen Induk |
<Remove>
|
Elemen Turunan |
<FormParam> |
Elemen <FormParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> </Remove> </AssignMessage>
Contoh 1
Contoh berikut menghapus tiga parameter formulir dari permintaan:
<AssignMessage name="AM-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> </AssignMessage>
Contoh 2
Contoh berikut menghapus semua parameter formulir dari permintaan:
<AssignMessage name="AM-remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 3
Jika ada beberapa parameter formulir dengan nama yang sama, gunakan sintaksis berikut:
<AssignMessage name="AM-remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh ini menghapus f1
, f2
, dan nilai kedua f3
. Jika f3
hanya memiliki satu
nilai, nilai tersebut tidak akan dihapus.
Anda hanya dapat menggunakan <FormParams>
jika kriteria berikut terpenuhi:
- Jenis pesan: Permintaan
Content-Type
:application/x-www-form-urlencoded
<Headers>
(turunan dari <Remove>
)
Menghapus header HTTP yang ditentukan dari permintaan atau respons, yang ditentukan oleh elemen
<AssignTo>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <Header> atau array kosong |
Elemen Induk |
<Remove>
|
Elemen Turunan |
<Header> |
Elemen <Headers>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Remove> </AssignMessage>
Contoh 1
Contoh berikut menghapus header user-agent
dari permintaan:
<AssignMessage name="AM-remove-one-header"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 2
Contoh berikut menghapus semua header dari permintaan:
<AssignMessage name="AM-remove-all-headers"> <Remove> <Headers/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 3
Jika ada beberapa header dengan nama yang sama, gunakan sintaksis berikut:
<AssignMessage name="AM-remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh ini menghapus h1
, h2
, dan nilai kedua h3
dari permintaan. Jika h3
hanya memiliki satu nilai, nilai tersebut tidak akan dihapus.
<Payload>
(turunan dari <Remove>
)
Menentukan apakah <Remove>
akan menghapus payload dalam permintaan atau respons, yang
ditentukan oleh elemen <AssignTo>
. Tetapkan ke true
untuk menghapus payload; jika tidak, false
. Nilai defaultnya adalah false
.
Nilai Default | Salah |
Wajib? | Opsional |
Type | Boolean |
Elemen Induk |
<Remove>
|
Elemen Turunan | Tidak ada |
Elemen <Payload>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Contoh 1
Contoh berikut menetapkan <Payload>
ke true
sehingga payload permintaan dihapus:
<AssignMessage name="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(turunan dari <Remove>
)
Menghapus parameter kueri yang ditentukan dari permintaan. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <QueryParam> atau array kosong |
Elemen Induk |
<Remove>
|
Elemen Turunan |
<QueryParam> |
Elemen <QueryParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Contoh 1
Contoh berikut menghapus satu parameter kueri dari permintaan:
<AssignMessage name="AM-remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 2
Contoh berikut menghapus semua parameter kueri dari permintaan:
<AssignMessage name="AM-remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 3
Jika ada beberapa parameter kueri dengan nama yang sama, gunakan sintaksis berikut:
<AssignMessage name="AM-remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Contoh ini menghapus qp1
, qp2
, dan nilai kedua qp3
dari permintaan. Jika
qp3
hanya memiliki satu nilai, nilai tersebut tidak akan dihapus.
Contoh 4
Contoh berikut menghapus parameter kueri apikey
dari permintaan:
<AssignMessage name="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <QueryParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP:
GET
,POST
,PATCH
,DELETE
- Jenis pesan: Permintaan
<Set>
Menetapkan informasi dalam pesan permintaan atau respons, yang ditentukan oleh elemen <AssignTo>
. <Set>
menimpa header atau parameter kueri atau formulir yang sudah ada dalam pesan asli, atau menambahkan yang baru jika belum ada.
Header dan parameter kueri serta formulir dalam pesan HTTP dapat memiliki beberapa nilai. Untuk menambahkan nilai tambahan untuk header atau parameter, gunakan elemen <Add>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Jenis kompleks |
Elemen Induk |
<AssignMessage>
|
Elemen Turunan |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <StatusCode> <Verb> <Version> |
Elemen <Set>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage 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> <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX" variableSuffix="SUFFIX">NEW_PAYLOAD</Payload> <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> </AssignMessage>
Contoh 1
Contoh berikut menetapkan header tertentu. Jika disertakan dalam alur Permintaan, kebijakan ini akan mengizinkan sistem upstream menerima header tambahan yang tidak disertakan dalam permintaan masuk asli.
<AssignMessage name="AM-Set-Header"> <Set> <Headers> <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header> </Headers> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 2
Contoh berikut menimpa payload untuk respons, serta header Content-Type
.
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </AssignMessage>
<FormParams>
(turunan dari <Set>
)
Menimpa parameter formulir yang ada pada permintaan dan menggantinya dengan nilai baru yang Anda tentukan dengan elemen ini. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <FormParam> |
Elemen Induk |
<Set>
|
Elemen Turunan |
<FormParam> |
Elemen <FormParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan parameter formulir yang disebut myparam
ke nilai variabel
request.header.myparam
dalam permintaan kustom baru:
<AssignMessage name="AM-set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <FormParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP:
POST
- Jenis pesan: Permintaan
Jika Anda menentukan parameter bentuk kosong dalam kebijakan Anda
(<Add><FormParams/></Add>
), kebijakan tersebut tidak akan menambahkan parameter formulir
apa pun. Ini sama dengan menghilangkan <FormParams>
.
<Set>
mengubah Content-Type
pesan menjadi application/x-www-form-urlencoded
sebelum mengirimkannya ke endpoint target.
<Headers>
(turunan dari <Set>
)
Menimpa header HTTP yang ada dalam permintaan atau respons, yang ditetapkan oleh elemen
<AssignTo>
.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <Header> |
Elemen Induk |
<Set>
|
Elemen Turunan |
<Header> |
Elemen <Headers>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan header x-ratelimit-remaining
ke nilai variabel
ratelimit.Quota-1.available.count
:
<AssignMessage name="AM-Set-RateLimit-Header"> <Set> <Headers> <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header> </Headers> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Jika Anda menentukan header kosong dalam kebijakan (<Set><Headers/></Set>
), kebijakan tidak akan menyetel header apa pun. Tindakan ini
akan memiliki efek yang sama dengan menghilangkan <Headers>
.
<Path>
(turunan dari <Set>
)
<Payload>
(turunan dari <Set>
)
Menentukan isi pesan untuk permintaan atau respons, yang ditentukan oleh elemen <AssignTo>
. Payload dapat berupa jenis konten apa pun yang valid, seperti teks biasa, JSON, atau XML.
Nilai Default | string kosong |
Wajib? | Opsional |
Type | String |
Elemen Induk |
<Set>
|
Elemen Turunan | Tidak ada |
Elemen <Payload>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX" variableSuffix="SUFFIX">NEW_PAYLOAD</Payload> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan payload teks biasa:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Contoh 2
Contoh berikut menetapkan payload JSON:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
Contoh 3
Contoh berikut menyisipkan nilai variabel ke dalam payload dengan menggabungkan nama variabel dalam tanda kurung kurawal:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Pada Apigee versi lama—misalnya, sebelum rilis cloud 16.08.17—Anda tidak boleh menggunakan tanda kurung kurawal untuk menunjukkan referensi variabel dalam payload JSON. Dalam rilis tersebut, Anda
harus menggunakan atribut variablePrefix
dan variableSuffix
untuk
menentukan karakter pembatas, dan menggunakannya untuk menggabungkan nama variabel, seperti berikut:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Sintaksis lama ini masih berfungsi.
Contoh 4
Konten <Payload>
diperlakukan sebagai template pesan. Ini berarti bahwa kebijakan TetapkanMessage mengganti variabel yang digabungkan dalam tanda kurung kurawal dengan nilai variabel yang direferensikan saat runtime.
Contoh berikut menggunakan sintaksis kurung kurawal untuk menetapkan bagian payload ke nilai variabel:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
Tabel berikut menjelaskan atribut <Payload>
:
Atribut | Deskripsi | Kehadiran | Jenis |
---|---|---|---|
contentType |
Jika ditentukan, nilai |
Opsional | String |
variablePrefix |
Secara opsional, tentukan pemisah utama pada variabel flow. Default-nya adalah "{". Untuk informasi selengkapnya, lihat Referensi variabel flow. | Opsional | Karakter |
variableSuffix |
Secara opsional, tentukan pemisah akhir pada variabel flow. Default-nya adalah "}". Untuk informasi selengkapnya, lihat Referensi variabel flow. | Opsional | Karakter |
<QueryParams>
(turunan dari <Set>
)
Timpa parameter kueri yang ada dalam permintaan dengan nilai baru. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | Array elemen <QueryParam> |
Elemen Induk |
<Set>
|
Elemen Turunan |
<QueryParam> |
Elemen <QueryParams>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan parameter kueri address
ke nilai variabel
request.header.address
:
<AssignMessage name="AM-set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Anda hanya dapat menggunakan <QueryParams>
jika kriteria berikut terpenuhi:
- Kata kerja HTTP:
GET
,POST
,PATCH
,DELETE
- Jenis pesan: Permintaan
Jika Anda menetapkan parameter kueri kosong dalam kebijakan Anda (<Set><QueryParams/></Set>
), kebijakan ini tidak akan menetapkan parameter kueri apa pun. Ini sama dengan menghilangkan <QueryParams>
.
<StatusCode>
(turunan dari <Set>
)
Menetapkan kode status pada respons. Elemen ini tidak berpengaruh pada permintaan.
Nilai Default | '200' (jika atribut createNew <AssignTo> ditetapkan ke 'true') |
Wajib? | Opsional |
Type | String atau VARIABLE |
Elemen Induk |
<Set>
|
Elemen Turunan | Tidak ada |
Elemen <StatusCode>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan kode status sederhana:
<AssignMessage name="AM-set-statuscode-404"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Contoh 2
Konten <StatusCode>
diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan, seperti yang ditunjukkan contoh berikut:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <StatusCode>
jika kriteria berikut terpenuhi:
- Jenis pesan: Respons
<Verb>
(turunan dari <Set>
)
Menetapkan kata kerja HTTP pada permintaan. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String atau VARIABLE |
Elemen Induk |
<Set>
|
Elemen Turunan | Tidak ada |
Elemen <Verb>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan kata kerja sederhana pada permintaan:
<AssignMessage name="AM-set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Contoh 2
Konten <Verb>
diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan.
Contoh berikut menggunakan variabel untuk mengisi kata kerja:
<AssignMessage name="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Anda hanya dapat menggunakan <Verb>
jika kriteria berikut terpenuhi:
- Jenis pesan: Permintaan
<Version>
(turunan dari <Set>
)
Menetapkan versi HTTP pada permintaan. Elemen ini tidak berpengaruh pada respons.
Nilai Default | T/A |
Wajib? | Opsional |
Type | String atau VARIABLE |
Elemen Induk |
<Set>
|
Elemen Turunan | Tidak ada |
Elemen <Version>
menggunakan sintaksis berikut:
Sintaksis
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Contoh 1
Contoh berikut menetapkan nomor versi ke 1.1
:
<AssignMessage name="AM-set-version-1"> <Set> <Version>1.1</Version> </Set> </AssignMessage>
Contoh 2
Kode berikut menggunakan variabel dalam tanda kurung kurawal untuk menetapkan nomor versi:
<AssignMessage name="AM-set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Konten <Version>
diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan.
Anda hanya dapat menggunakan <Version>
jika kriteria berikut terpenuhi:
- Jenis pesan: Permintaan
Membuat pesan permintaan kustom
Anda dapat menggunakan ReplaceMessage untuk membuat pesan permintaan kustom. Setelah membuat permintaan kustom, Anda dapat menggunakannya dengan cara berikut:
- Mengakses variabelnya dalam kebijakan lain
- Meneruskannya ke layanan eksternal
Untuk membuat pesan permintaan kustom, gunakan elemen <AssignTo>
di kebijakan Penugasan
Anda. Tetapkan createNew
ke true
dan tentukan nama pesan baru dalam isi
elemen, seperti yang ditunjukkan contoh berikut:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> ... </AssignMessage>
Secara default, Apigee tidak melakukan apa pun pada pesan permintaan kustom. Setelah membuatnya, Apigee akan melanjutkan alur dengan permintaan asli. Untuk menggunakan permintaan kustom, tambahkan kebijakan seperti kebijakan ServiceCallout ke proxy Anda, dan secara eksplisit rujuk pesan permintaan yang baru dibuat dalam konfigurasi untuk kebijakan tersebut. Tindakan ini akan memungkinkan Anda meneruskan permintaan kustom ke endpoint layanan eksternal.
Contoh berikut membuat pesan permintaan kustom:
Contoh 1
Contoh berikut membuat objek permintaan kustom denganAssignMessage:
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Contoh ini:
- Membuat objek pesan permintaan baru bernama
MyCustomRequest
. - Di MyCustomRequest, kebijakan ini:
- Menyalin nilai header HTTP
user-agent
dari permintaan masuk ke pesan baru. Karena<Copy>
tidak menentukan atributsource
, Apigee akan menggunakan pesanrequest
sebagai sumber untuk menyalin dari. - Menetapkan parameter kueri
address
pada pesan kustom ke nilai parameter kueriaddy
permintaan masuk. - Menetapkan kata kerja HTTP ke
GET
.
- Menyalin nilai header HTTP
- Menetapkan
<IgnoreUnresolvedVariables>
kefalse
. Ketika<IgnoreUnresolvedVariables>
adalahfalse
, jika salah satu variabel yang dirujuk dalam konfigurasi kebijakan tidak ada, Apigee akan memasuki fault state dalam alur API.
Contoh 2
Berikut adalah contoh lain yang menunjukkan cara membuat objek permintaan khusus dengan AssignMessage:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
Contoh ini membuat permintaan kustom baru bernama partner.request
. Selanjutnya, kode ini menetapkan <Verb>
dan <Payload>
pada permintaan baru.
Anda dapat mengakses berbagai properti pesan kustom di kebijakan TetapkanMessage lain yang akan terjadi nanti dalam alur. Contoh berikut mendapatkan nilai header dari respons kustom bernama, dan menempatkannya ke header baru dalam pesan permintaan:
<AssignMessage name="AM-Copy-Custom-Header"> <AssignTo>request</AssignTo> <Set> <Headers> <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header> </Headers> </Set> </AssignMessage>
Kode error
Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
Kode kesalahan | Status HTTP | Penyebab | Perbaikan |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 |
Kebijakan ini tidak dapat menetapkan variabel. Lihat string kesalahan untuk nama variabel yang belum terselesaikan. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Error ini terjadi jika atribut Variabel jenis pesan mewakili keseluruhan permintaan dan respons HTTP. Variabel alur Apigee bawaan |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Error ini terjadi jika variabel yang ditentukan dalam kebijakan ProvideMessage:
|
build |
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
Nama error | Penyebab | Perbaikan |
---|---|---|
InvalidIndex |
Jika indeks yang ditentukan dalam elemen <Copy> dan/atau <Remove> kebijakan AssignMessage adalah 0 atau angka negatif, deployment Proxy API akan gagal.
|
build |
InvalidVariableName |
Jika elemen turunan <Name> kosong atau tidak ditentukan dalam elemen <AssignVariable> , deployment proxy API akan gagal karena tidak ada nama variabel yang valid untuk menetapkan nilai. Nama variabel yang valid wajib diisi.
|
build |
InvalidPayload |
Payload yang ditentukan dalam kebijakan tidak valid. |
Variabel kesalahan
Variabel ini ditetapkan saat kebijakan ini memicu error saat runtime. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Dari mana | Contoh |
---|---|---|
fault.name="FAULT_NAME" |
FAULT_NAME adalah nama kesalahan, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. | fault.name Matches "UnresolvedVariable" |
assignmessage.POLICY_NAME.failed |
POLICY_NAME adalah nama kebijakan yang ditentukan pengguna yang menampilkan kesalahan. | assignmessage.AM-SetResponse.failed = true |
Contoh respons error
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Contoh aturan kesalahan
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Skema
Setiap jenis kebijakan ditentukan oleh skema XML (.xsd
). Untuk referensi, skema kebijakan tersedia di GitHub.
Topik terkait
Contoh kerja kebijakan TetapkanMessage tersedia di contoh Platform API.
Untuk contoh selengkapnya tentang cara mengganti target.url
dari
ProxyEndpoint
, lihat artikel Komunitas Apigee ini.
Untuk melihat cara kerja jalur yang ditetapkan di kebijakan ServiceCallout, lihat Learn by do example ini dalam contoh GitHub Apigee. Cukup clone repositori dan ikuti petunjuk dalam topik tersebut. Contoh ini menggunakan ReplaceMessage untuk menetapkan jalur permintaan, lalu menggunakan kebijakan ServiceCallout
untuk membuat permintaan ke layanan eksternal.