Kebijakan ApplyMessage

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat Dokumentasi Apigee Edge.

ikon kebijakan

Apa

Kebijakan MenetapkanMessage dapat mengubah permintaan atau pesan respons yang ada, atau membuat pesan respons atau permintaan baru selama Alur proxy API. Dengan kebijakan ini, Anda dapat melakukan tindakan berikut pada pesan tersebut:

  • Tambahkan parameter formulir, header, atau parameter kueri baru ke pesan
  • Menyalin properti yang ada dari satu pesan ke pesan lainnya
  • Menghapus header, parameter kueri, parameter formulir, dan pesan payload dari sebuah 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 MenetapkanMessage, Anda dapat menambahkan, mengubah, atau menghapus properti permintaan atau respons. Atau, Anda dapat menggunakan MenetapkanMessage untuk membuat pesan permintaan atau respons dan meneruskannya ke target alternatif, seperti yang dijelaskan dalam Buat pesan permintaan kustom.

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

Kebijakan TetapkanMessage dapat membuat atau mengubah variabel alur dengan turunan berikut elemen:

Urutan Anda mengatur <Add>, <Copy>, <Set>, dan <Remove> adalah hal yang penting. Kebijakan akan menjalankan tindakan tersebut sesuai urutan tempat keduanya muncul di konfigurasi kebijakan. Jika Anda perlu menghapus semua {i>header<i}, maka setel header tertentu, Anda harus menyertakan elemen <Remove> sebelum elemen <Set>.

Elemen <AssignMessage>

Menentukan kebijakan MenetapkanMessage.

Nilai Default Lihat tab Kebijakan Default, di bawah
Wajib? Wajib
Jenis Objek kompleks
Elemen Induk T/A
Elemen Turunan <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

Elemen <AssignMessage> menggunakan sintaksis berikut:

Sintaks

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 TetapkanMessage ke 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 menyisipkan kebijakan MenetapkanMessage baru di UI Apigee, template akan berisi stub untuk semua operasi yang memungkinkan. Biasanya, Anda akan memilih operasi yang ingin dijalankan dengan kebijakan ini dan menghapus sisa elemen turunan. Misalnya, jika Anda ingin melakukan operasi penyalinan, gunakan <Copy>, lalu hapus <Add>, <Remove>, dan elemen turunan lainnya dari kebijakan untuk membuatnya lebih mudah dibaca.

Elemen ini memiliki atribut berikut yang umum untuk semua kebijakan:

Atribut Default Wajib? Deskripsi
name T/A Wajib

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

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

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

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

Elemen Turunan Wajib? Deskripsi
Operasi umum
<Add> Opsional Menambahkan informasi ke objek pesan yang ditentukan oleh metode Elemen <AssignTo>.

<Add> menambahkan header atau parameter ke pesan yang tidak ada dalam pesan asli untuk membuat pesan email baru. Perlu diperhatikan bahwa <Set> juga menyediakan fungsi ini.

Untuk menimpa header atau parameter yang ada, gunakan elemen <Set>.

<Copy> Opsional Menyalin informasi dari pesan yang ditentukan oleh source ke objek pesan yang ditentukan oleh elemen <AssignTo>.
<Remove> Opsional Menghapus elemen tertentu dari variabel pesan yang ditentukan dalam Elemen <AssignTo>.
<Set> Opsional Mengganti nilai properti yang ada di permintaan atau respons, yang ditentukan oleh elemen <AssignTo>.

<Set> menimpa header atau parameter yang sudah ada dalam diagram aslinya atau menambahkan hal baru jika tidak ada.

Elemen turunan lainnya
<AssignTo> Opsional Menentukan di pesan mana kebijakan TetapkanMessage dijalankan. Hal ini dapat berupa standar permintaan atau respons, atau dapat berupa pesan kustom baru.
<AssignVariable> Opsional Menetapkan nilai ke variabel alur. Jika variabel tersebut tidak ada, maka <AssignVariable> membuatnya.
<IgnoreUnresolvedVariables> Opsional Menentukan apakah pemrosesan berhenti saat variabel yang belum terselesaikan ditemukan.

Setiap elemen turunan ini dijelaskan di bagian selanjutnya.

Contoh

Contoh berikut menunjukkan beberapa cara untuk menggunakan Tugas kebijakan:

1: Tambahkan header

Contoh berikut menambahkan header ke permintaan dengan atribut 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 <Remove> :

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

3: Ubah respons

Contoh berikut mengubah 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, kode ini memodifikasi pesan respons yang ada dengan menambahkan header HTTP.

Karena contoh ini menentukan response sebagai nama variabel dalam <AssignTo>, kebijakan ini mengubah objek respons yang awalnya dengan data yang dikembalikan oleh server target.

Header HTTP yang ditambahkan ke pesan respons oleh kebijakan ini berasal dari variabel diisi oleh kebijakan LookupCache. Oleh karena itu, pesan respons Kebijakan Tetapkan Pesan berisi header HTTP yang menunjukkan apakah hasilnya telah atau tidak diambil dari cache. Mengatur {i>header<i} dalam respons bisa berguna untuk {i>debugging <i}dan pemecahan masalah.

4: Menyetel konten dinamis

Anda dapat menggunakan MenetapkanMessage untuk menyematkan konten dinamis dalam payload respons dan pesan permintaan.

Untuk menyematkan variabel alur dalam payload XML, gabungkan variabel yang ditetapkan dalam mode kurawal 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 variablePrefix dan Atribut variableSuffix dengan karakter pembatas seperti yang ditampilkan di bawah contoh:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

Untuk mengetahui daftar lengkap variabel alur, lihat Referensi variabel flow.

Anda juga dapat menggunakan tanda kurung kurawal untuk menyisipkan variabel.

5: Hapus 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 permintaan pesan saat Anda menggunakan kebijakan VerifyAPIKey untuk autentikasi pengguna. Anda melakukan ini untuk mencegah informasi kunci sensitif agar tidak diteruskan ke target backend.

6: Menetapkan/mendapatkan variabel

Contoh berikut menggunakan tiga kebijakan MenetapkanMessage:

  1. Membuat tiga variabel alur dalam permintaan, dengan nilai statis
  2. Mendapatkan variabel alur secara dinamis dalam kebijakan kedua dalam alur permintaan
  3. 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>

Dalam kebijakan pertama, elemen <AssignVariable> membuat dan menetapkan tiga beberapa variabel dalam permintaan. Setiap elemen <Name> menetapkan nama variabel, dan <Value> menentukan nilai.

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 <Name> menentukan nama variabel baru. Jika variabel yang direferensikan oleh elemen <Ref> tidak dapat diakses, Anda dapat menggunakan nilai ini yang ditentukan oleh elemen <Value>.

Untuk mencoba serangkaian kebijakan ini:

  1. Tambahkan kebijakan #1 dan #2 ke alur permintaan. Pastikan untuk mencantumkan kebijakan #1 sebelum kebijakan #2.
  2. Tambahkan kebijakan ketiga di alur response.
  3. Kebijakan ketiga menggunakan elemen <Set> untuk menambahkan variabel ke respons. Tujuan contoh berikut menyusun payload XML dalam respons yang dikembalikan 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 kurung kurawal.

    Pastikan untuk menyetel atribut contentType elemen <Payload> ke application/xml.

  4. Mengirim permintaan ke proxy API Anda; misalnya:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Secara opsional, Anda dapat menyalurkan hasil 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 ServiceInfo

Pada contoh berikut, anggap saja kebijakan Servicecallout ada dalam permintaan proxy API, dan respons info berisi beberapa header dengan nama yang sama (Set-Cookie). Dengan asumsi variabel respons Info Layanan adalah default calloutResponse, kebijakan berikut mendapatkan Set-Cookie kedua nilai header.

<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 menampilkan 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 Contoh Menetapkan Pesan di GitHub.

Referensi elemen turunan

Bagian ini menjelaskan elemen turunan dari <AssignMessage>.

<Add>

Menambahkan informasi ke permintaan atau respons, yang ditentukan oleh <AssignTo> .

Elemen <Add> menambahkan properti baru pada pesan yang tidak ada dalam versi aslinya untuk membuat pesan email baru. Perlu diperhatikan bahwa <Set> juga menyediakan fungsi ini. Untuk mengubah nilai yang sudah ada, gunakan elemen <Set>.

Nilai Default T/A
Wajib? Opsional
Jenis Jenis kompleks
Elemen Induk <AssignMessage>
Elemen Turunan <FormParams>
<Headers>
<QueryParams>

Elemen <Add> menggunakan sintaksis berikut:

Sintaks

<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 elemen 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 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 pra-alur permintaan. Jika Anda melihat hasilnya di sebuah alat, seperti Ringkasan debug, permintaan ke https://example-target.com/get menjadi https://example-target.com/get?myParam=42.

Elemen turunan <Add> mendukung substitusi string dinamis, yang dikenal sebagai template pesan.

<FormParams> (turunan dari <Add>)

Menambahkan parameter formulir baru ke pesan permintaan. Elemen ini tidak memengaruhi respons untuk membuat pesan email baru.

Nilai Default T/A
Wajib? Opsional
Jenis Array elemen <FormParam>
Elemen Induk <Add>
Elemen Turunan <FormParam>

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaks

<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 formulir 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 menambahkan atribut parameter ke permintaan saja.

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 mengirimkan permintaan yang diubah ke endpoint target.

Anda dapat menggunakan Ringkasan debug untuk melihat alurnya. Anda akan melihat bahwa isi permintaan berisi data formulir yang dienkode ke URL, yang awalnya diteruskan sebagai string kueri parameter:

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 nilai tertentu, atau "" (string kosong). Misalnya, dengan curl, tambahkan -d "" ke permintaan Anda.
    • Header Content-Length: Tetapkan ke 0 (jika tidak ada data dalam permintaan awal; jika tidak, panjang saat ini, dalam byte). Misalnya, dengan curl tambahkan -H "Content-Length: 0" ke permintaan Anda.

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 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 atribut Elemen <AssignTo>.

Nilai Default T/A
Wajib? Opsional
Jenis Array elemen <Header>
Elemen Induk <Add>
Elemen Turunan <Header>

Elemen <Headers> menggunakan sintaksis berikut:

Sintaks

<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
Jenis Array elemen <QueryParam>
Elemen Induk <Add>
Elemen Turunan <QueryParam>

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaks

<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 kolom 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 mengatur parameter kueri ketika elemen <AssignTo> Atribut type adalah pesan permintaan. Menetapkannya pada respons tidak akan berpengaruh.

Jika Anda menentukan array parameter kueri kosong dalam kebijakan (<Add><QueryParams/></Add>), kebijakan ini tidak menambahkan kueri apa pun parameter. Ini sama dengan menghilangkan <QueryParams>.

<AssignTo>

Menentukan objek mana yang dioperasikan oleh kebijakan MenetapkanMessage. 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

Perhatikan 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 pada permintaan.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignMessage>
Elemen Turunan Tidak ada

Jika Anda tidak menentukan <AssignTo>, atau jika Anda menetapkan elemen <AssignTo>, tetapi tidak menetapkan nilai teks untuk elemen, kebijakan bertindak atas permintaan atau respons {i>default<i}, yang didasarkan pada tempat kebijakan dijalankan. Jika kebijakan dijalankan dalam alur permintaan, memengaruhi pesan permintaan. Jika dijalankan dalam alur respons, kebijakan akan memengaruhi respons secara {i>default<i}.

Elemen <AssignTo> menggunakan sintaksis berikut:

Sintaks

<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 menentukan pesan dalam teks <AssignTo>. Ini menyiratkan bahwa kebijakan tersebut akan berfungsi pada pesan request atau response, tergantung di mana 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 lain dari <AssignTo> tidak relevan. Dalam hal ini, Anda mungkin ingin menghilangkan elemen <AssignTo> sepenuhnya.

Contoh 2

Contoh berikut 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 MenetapkanMessage (seperti <Add>, <Set>, dan <Copy>) menindaklanjuti .

Anda bisa mengakses objek permintaan baru di kebijakan lain nanti dalam alur, atau mengirim permintaan baru minta objek ke layanan eksternal dengan kebijakan Servicecallout.

Contoh 3

Contoh berikut 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 MenetapkanMessage (seperti <Add>, <Set>, dan <Copy>) menindaklanjuti .

Anda dapat mengakses objek permintaan baru berdasarkan nama dalam kebijakan lain nanti dalam alur, atau mengirim permintaan baru minta objek 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 true, kebijakan akan membuat variabel jenis baru ditentukan oleh type (request atau response). Jika Anda nama variabel baru tidak ditentukan, kebijakan akan membuat permintaan baru atau objek respons, berdasarkan nilai type.

Jika false, kebijakan akan merespons dengan salah satu dari dua cara berikut:

  • Jika <AssignTo> dapat me-resolve nama variabel menjadi permintaan atau respons, maka terus memproses. Misalnya, jika kebijakan berada dalam alur permintaan, variabelnya adalah . Jika kebijakan tersebut merespons, variabelnya adalah objek respons.
  • Jika <AssignTo> tidak dapat di-resolve, atau di-resolve menjadi jenis bukan pesan, maka kebijakan akan menampilkan error.

Jika createNew tidak ditentukan, kebijakan akan merespons dengan salah satu dari dua cara berikut:

  • Jika <AssignTo> me-resolve ke sebuah pesan, maka pemrosesan akan dilanjutkan ke langkah berikutnya langkah waktu ini.
  • Jika <AssignTo> tidak dapat di-resolve, atau di-resolve menjadi jenis bukan pesan, variabel jenis yang ditentukan dalam type dibuat.
Opsional Boolean
transport

Menentukan jenis transpor untuk jenis pesan permintaan atau respons.

Nilai defaultnya adalah http (satu-satunya nilai yang didukung).

Opsional String
type Menentukan jenis pesan baru, jika createNew adalah true. Berlaku nilainya adalah request atau response.

Nilai defaultnya adalah request. Jika Anda menghapus atribut ini, Apigee akan membuat permintaan atau respons, tergantung pada alur apa kebijakan ini dijalankan.

Opsional String

<AssignVariable>

Menetapkan nilai ke variabel alur tujuan (seperti variabel yang nilainya ditetapkan oleh kebijakan TetapkanMessage). Jika variabel flow tidak ada, <AssignVariable> akan membuat anotasi. Anda dapat menggunakan beberapa elemen DefineVariable dalam kebijakan DefineMessage. Mereka adalah dieksekusi sesuai urutan kemunculannya dalam konfigurasi kebijakan.

Nilai Default T/A
Wajib? Opsional
Jenis 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 berikut ini:

  • String literal: Gunakan elemen turunan <Value> untuk menentukan literal untuk variabel alur tujuan.
  • Variabel flow: Gunakan elemen turunan <Ref> untuk menentukan nilai elemen variabel alur yang ada untuk variabel alur tujuan. Untuk daftar lengkap alur variabel yang dapat digunakan sebagai sumber, lihat Referensi variabel flow.
  • Kumpulan properti: Gunakan elemen turunan <PropertySetRef> untuk mengambil nilai dari nama/pasangan kunci kumpulan properti dan menyimpannya dalam variabel flow. Memungkinkan Anda mengakses kumpulan properti secara dinamis.
  • URL resource: Gunakan elemen turunan <ResourceURL> untuk menentukan URL untuk resource teks, jenis XSL, XSD, WSDL, JavaScript, atau Spesifikasi OpenAPI. Hal ini menetapkan konten resource ke dalam variabel flow yang bernama.
  • Template pesan: Gunakan elemen turunan <Template> untuk menentukan template pesan untuk variabel {i>destination flow<i}.

Urutan prioritas untuk elemen turunan ini adalah: ResourceURL, Template, Ref, Value, ReferensiKumpulanProperti

Elemen <AssignVariable> menggunakan sintaksis berikut:

Sintaks

<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 menggunakan nilai yang ditentukan oleh elemen <Value>. Jika Anda menentukan <Template>, atribut ini akan diprioritaskan daripada Elemen yang setara <Ref> dan <Value>.

Contoh 1

Contoh berikut menetapkan nilai variabel baru, myvar, ke literal nilai 42:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Contoh 2

Contoh berikut menetapkan nilai variabel flow 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 menetapkan nilai ErrorOnCopy ke variabel {i>destination flow<i}.

Jika variabel alur myvar atau Country tidak ada, <AssignVariable> membuatnya.

Contoh 3

Contoh berikut menggunakan <Template> elemen turunan untuk menggabungkan 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 4

Contoh berikut menggunakan <AssignVariable> untuk menonaktifkan perilaku default menerapkan akhiran jalur dari permintaan proxy ke permintaan target:

<AssignMessage name='AM-PathSuffixFalse'>
  <AssignVariable>
    <Name>target.copy.pathsuffix</Name>
    <Value>false</Value>
  </AssignVariable>
</AssignMessage>

Penggunaan <AssignVariable> yang umum adalah menetapkan nilai default untuk parameter kueri, header, atau nilai lain yang bisa diteruskan dengan permintaan. Anda melakukan ini dengan kombinasi dari kedua Elemen turunan <Ref> dan <Value>. Untuk selengkapnya informasi selengkapnya, lihat contoh untuk <Ref>.

<Name> (turunan dari <AssignVariable>)

Menentukan nama variabel alur tujuan - variabel yang nilainya ditetapkan oleh kebijakan MenetapkanMessage. Jika variabel yang disebutkan dalam <Name> tidak ada, kebijakan akan membuat instance dengan nama tersebut.

Nilai Default T/A
Wajib? Wajib
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Elemen <Name> menggunakan sintaksis berikut:

Sintaks

<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 tentang kumpulan properti, lihat Menggunakan kumpulan properti.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Kumpulan properti terdiri dari pasangan nama/kunci. Contoh: propset1.id=12345, dengan propset1 adalah nama kumpulan properti, id adalah kuncinya, dan 12345 adalah nilai kunci.

Elemen turunan PropertySetRef memungkinkan Anda memilih nama dan/atau kunci kumpulan properti secara dinamis. Asumsikan Anda memiliki 200 aturan pemilihan rute di file kumpulan properti. Anda dapat mengakses aturan kumpulan properti sebagai berikut, dengan routingrules adalah nama kumpulan properti dan rule1, rule2, rulenadalah 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 dipilih pada waktu desain. Namun, anggaplah nama aturan ada di header atau payload permintaan. Salah satu cara untuk memilih aturannya adalah menggunakan kebijakan JavaScript dengan kode seperti berikut:

context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.

Di sisi lain, fitur PropertySetRefMenetapkan Pesan memungkinkan Anda memilih kunci properti secara dinamis tanpa memperkenalkan JavaScript.

Anda dapat menggunakan campuran variabel flow dan nilai string literal di <PropertySetRef> . Lihat contoh untuk detail selengkapnya.

Elemen <PropertySetRef> menggunakan sintaksis berikut:

Sintaks

<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 kumpulan properti ke variabel alur. Dalam kasus ini, nama kumpulan properti diperoleh dari header propset_name, kunci diberikan di header propset_key, dan nilai yang ditetapkan ke kunci akan 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 alur dan string literal dalam Elemen <PropertySetRef>.

Contoh 2

Contoh ini menetapkan nilai dari kunci kumpulan properti ke variabel alur menggunakan variabel nama kunci (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 alur dan string literal dalam Elemen <PropertySetRef>.

<Ref> (turunan dari <AssignVariable>)

Menentukan sumber penetapan sebagai variabel alur. Variabel {i>flow<i} dapat berupa salah satu variabel alur standar (seperti yang tercantum dalam referensi variabel flow), atau variabel alur kustom yang Anda buat.

Nilai <Ref> selalu diinterpretasikan sebagai variabel flow; kamu tidak bisa menetapkan suatu {i>string<i} literal sebagai dengan sejumlah nilai. Untuk menetapkan nilai string literal, gunakan elemen <Value> sebagai gantinya.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Saat Anda menentukan variabel flow dengan <Ref>, hilangkan tanda kurung kurawal {} yang biasanya akan Anda gunakan untuk mereferensikan variabel alur. Misalnya, untuk menetapkan nilai variabel baru Anda ke nilai alur client.host variabel:

  DO specify the variable name without brackets:
  <Ref>client.host</Ref>

  DO NOT use brackets:
  <Ref>{client.host}</Ref>

Guna menentukan nilai default untuk variabel alur tujuan, gunakan <Value> dalam kombinasi dengan <Ref>. Jika variabel {i>flow<i} yang ditentukan oleh <Ref> tidak ada, tidak dapat dibaca, atau null, maka Apigee menetapkan nilai <Value> ke variabel alur tujuan.

Elemen <Ref> menggunakan sintaksis berikut:

Sintaks

<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 flow 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 fallback) yang ditentukan untuk penugasan Anda.

Contoh 2

Contoh berikut menetapkan nilai variabel alur request.header.user-agent ke variabel alur tujuan myvar dan nilainya dari 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 bernilai null, tidak dapat dibaca, atau salah format, Apigee menetapkan nilai ErrorOnCopy ke variabel baru.

Contoh 3

Kasus penggunaan umum untuk <AssignVariable> adalah menetapkan nilai default kueri parameter, header, atau nilai lain yang dapat diteruskan bersama permintaan. Misalnya, Anda membuat proxy weather API tempat permintaan mengambil parameter kueri tunggal bernama w. Ini berisi ID kota yang Anda inginkan untuk cuaca. URL permintaan memiliki bentuknya:

http://myCO.com/v1/weather/forecastrss?w=CITY_ID

Guna menentukan nilai default untuk w, buat kebijakan MenetapkanMessage seperti berikut ini:

<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 alur bernilai null, artinya parameter kueri w adalah dihilangkan dari permintaan, maka contoh ini menggunakan nilai {i>default<i} dari Elemen <Value>. Oleh karena itu, Anda dapat membuat permintaan ke API ini proxy yang menghilangkan parameter kueri w:

http://myCO.com/v1/weather/forecastrss

...dan tetap saja proxy API menampilkan hasil yang valid.

Nilai <Ref> harus berupa variabel flow, seperti properti 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 alur yang ditentukan di <Name> dengan konten resource yang direferensikan. Sumber daya bisa berupa jenis XSD, XSL, WSDL, JavaScript, Kumpulan Properti, atau Spesifikasi OpenAPI.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Jika resource yang ditentukan oleh <ResourceURL> tidak ada, maka: jika nilai <IgnoreUnresolvedVariables> adalah true, Apigee menetapkan nilai null ke variabel alur tujuan, sedangkan jika nilai <IgnoreUnresolvedVariables> adalah false, Apigee menampilkan error.

Elemen <ResourceURL> menggunakan sintaksis berikut:

Sintaks

<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 {i>string<i}, dan ditafsirkan sebagai template pesan. Salah satunya 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 jsc, ke dalam variabel flow 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 flow assigned-variable, lalu tetapkan 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. Pesan memungkinkan Anda melakukan substitusi string variabel saat kebijakan dijalankan, dan dapat menggabungkan string literal dengan nama variabel yang digabungkan dalam kurawal kurung kurawal. Selain itu, template pesan dukungan 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 di aplikasi developer. Saat Apigee mengidentifikasi aplikasi developer setelah memverifikasi kunci API atau token keamanan (melalui kebijakan tambahan), <AssignVariable> dapat menggunakan template pesan dari atribut khusus aplikasi, yang tersedia sebagai variabel alur dari kebijakan keamanan. Contoh berikut mengasumsikan bahwa pesan template tersedia di atribut khusus yang disebut message_template di aplikasi developer yang melakukan panggilan API, dengan kebijakan VerifyAPIKey digunakan untuk memverifikasi kunci API aplikasi:

<Template ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Elemen <Template> menggunakan sintaksis berikut:

Sintaks

<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 menggabungkan 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 menentukan variabel alur, di mana nilai variabel tersebut adalah template pesan standar. Gunakan opsi ini jika Anda ingin memasukkan template yang telah ditetapkan ke 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 alur dan nilai teks. Dalam kasus ini, jika variabel yang direferensikan adalah non-null, nilai tersebut akan digunakan sebagai template. Jika elemen nilainya adalah null, maka nilai teksnya (dalam hal ini, {system.uuid}-{messageid}) digunakan sebagai template. Pola ini berguna untuk memberikan nilai override, dengan 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>. Tujuan nilai selalu ditafsirkan sebagai string literal; Anda tidak dapat menggunakan variabel flow sebagai nilai, bahkan jika Anda menggabungkan nilai dalam tanda kurung ({}). Untuk menggunakan variabel alur, gunakan <Ref> sebagai gantinya.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Jika digunakan bersama dengan elemen <Ref>, <Value> bertindak sebagai nilai default (atau fallback). Jika <Ref> tidak ditentukan, adalah tidak dapat diselesaikan, atau null, nilai <Value> akan digunakan.

Elemen <Value> menggunakan sintaksis berikut:

Sintaks

<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 flow request.header.user-agent ke variabel flow myvar dan nilainya dari 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> menetapkan nilai ErrorOnCopy ke variabel {i>destination flow<i}.

<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, tergantung pada alur apa kebijakan ini dijalankan.

Nilai Default T/A
Wajib? Opsional
Jenis String
Elemen Induk <AssignMessage>
Elemen Turunan <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<StatusCode>
<Verb>
<Version>

Jika Anda tidak menetapkan elemen turunan di bawah elemen <Copy>, elemen ini akan menyalin semua bagian pesan sumber yang ditunjuk.

Elemen <Copy> menggunakan sintaksis berikut:

Sintaks

<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 kueri parameter 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 ini tidak menyalin bagian-bagian dari pesan tersebut.

Contoh 2

Contoh berikut pertama-tama menghapus semua yang ada di pesan response yang ada, lalu menyalin semua nilai dari pesan lain yang disebut secondResponse ke 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.

  • Jika source tidak ditentukan, defaultnya adalah message, yang mengambil nilai yang berbeda bergantung pada alur di mana kebijakan dijalankan. Jika kebijakan dieksekusi dalam alur permintaan, maka variabel message merujuk pada Objek request. Jika kebijakan dijalankan dalam alur respons, variabel message akan merujuk ke Objek response.
  • Jika variabel yang ditentukan dalam atribut source tidak dapat diselesaikan, atau di-resolve menjadi jenis non-pesan, <Copy> tidak akan berpengaruh.
  • Pastikan nilai yang Anda tetapkan untuk source berbeda dari nilai pesan tujuan, baik merupakan pesan tujuan default atau tujuan ditentukan secara eksplisit dengan <AssignTo>. Jika source sama dengan pesan tujuan, <Copy> tidak akan berpengaruh.
Opsional String

<FormParams> (turunan dari <Copy>)

Menyalin parameter formulir dari permintaan yang ditentukan oleh Atribut source milik elemen <Copy> ke permintaan ditentukan oleh elemen <AssignTo>. Elemen ini tidak berpengaruh pada yang dihasilkan.

Nilai Default T/A
Wajib? Opsional
Jenis Array dari elemen <FormParam> atau array kosong
Elemen Induk <Copy>
Elemen Turunan <FormParam>

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaks

<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 khusus 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 , maka 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 nilai tertentu, atau "" (string kosong). Misalnya, dengan curl, tambahkan -d "" ke permintaan Anda.
    • Header Content-Length: Tetapkan ke 0 (jika tidak ada data dalam permintaan awal; jika tidak, panjang saat ini. Misalnya, dengan curl tambahkan -H "Content-Length: 0" ke permintaan Anda.

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 permintaan atau pesan respons yang ditentukan oleh elemen <AssignTo>.

Nilai Default T/A
Wajib? Opsional
Jenis Array dari elemen <Header> atau array kosong
Elemen Induk <Copy>
Elemen Turunan <Header>

Elemen <Headers> menggunakan sintaksis berikut:

Sintaks

<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 contoh berikut menampilkan:

<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 , maka tidak akan disalin.

<Path> (turunan dari <Copy>)

Menentukan apakah jalur harus disalin dari permintaan sumber ke tujuan permintaan. 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 permintaan pesan yang ditentukan oleh elemen <AssignTo>.

Nilai Default Salah
Wajib? Opsional
Jenis Boolean
Elemen Induk <Copy>
Elemen Turunan Tidak ada

Elemen <Path> menggunakan sintaksis berikut:

Sintaks

<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 MenetapkanMessage harus menyalin jalur dari sumber permintaan 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
Jenis Boolean
Elemen Induk <Copy>
Elemen Turunan Tidak ada

Elemen <Payload> menggunakan sintaksis berikut:

Sintaks

<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 adalah 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 milik elemen <Copy> ke permintaan yang ditentukan oleh elemen <AssignTo>. Elemen ini tidak berpengaruh pada respons.

Nilai Default T/A
Wajib? Opsional
Jenis Array dari elemen <QueryParam> atau array kosong
Elemen Induk <QueryParam>
Elemen Turunan Tidak ada

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaks

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

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

<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, maka 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 tujuan yang dihasilkan. Elemen ini tidak berpengaruh pada permintaan.

Jika true, kebijakan ini akan menyalin kode status dari pesan respons yang ditentukan oleh atribut source dari elemen <Copy> ke respons pesan yang ditentukan oleh elemen <AssignTo>.

Nilai Default Salah
Wajib? Opsional
Jenis Boolean
Elemen Induk <Copy>
Elemen Turunan Tidak ada

Elemen <StatusCode> menggunakan sintaksis berikut:

Sintaks

<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 yang 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 menyetel 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 tujuan permintaan. Elemen ini tidak berpengaruh pada respons.

Jika true, menyalin kata kerja yang ada dalam atribut source elemen <Copy> ke permintaan yang ditentukan dalam elemen <AssignTo>.

Nilai Default Salah
Wajib? Opsional
Jenis Boolean
Elemen Induk <Copy>
Elemen Turunan Tidak ada

Elemen <Verb> menggunakan sintaksis berikut:

Sintaks

<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 yang 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, salin versi HTTP yang ada di atribut source elemen <Copy> ke objek yang ditentukan oleh elemen <AssignTo>.

Nilai Default Salah
Wajib? Opsional
Jenis Boolean
Elemen Induk <Copy>
Elemen Turunan Tidak ada

Elemen <Version> menggunakan sintaksis berikut:

Sintaks

<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 dari objek permintaan default ke objek permintaan kustom yang 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 saat variabel yang belum terselesaikan ditemukan.

Nilai Default Salah
Wajib? Opsional
Jenis Boolean
Elemen Induk <AssignMessage>
Elemen Turunan Tidak ada

Tetapkan ke true untuk mengabaikan variabel yang belum terselesaikan dan melanjutkan pemrosesan; jika tidak, false. Tujuan nilai defaultnya adalah false.

Menyetel <IgnoreUnresolvedVariables> ke true berbeda dengan menyetel <AssignMessage> continueOnError ke true yang khusus untuk menetapkan dan mendapatkan nilai variabel. Jika Anda menetapkan continueOnError ke true, Apigee akan mengabaikan semua error, bukan hanya terjadi {i>error<i} saat menggunakan variabel.

Elemen <IgnoreUnresolvedVariables> menggunakan sintaksis berikut:

Sintaks

<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 akan tidak memberikan kesalahan.

<Remove>

Menghapus header, parameter kueri, parameter formulir, dan/atau payload pesan dari sebuah pesan. Tag <Remove> kosong akan menghapus semua konten dalam pesan.

Pesan yang terpengaruh dapat berupa permintaan atau respons. Anda menentukan pesan mana <Remove> ditindaklanjuti dengan menggunakan elemen <AssignTo>.

Nilai Default T/A
Wajib? Opsional
Jenis Jenis kompleks
Elemen Induk <AssignMessage>
Elemen Turunan <FormParams>
<Headers>
<Payload>
<QueryParams>

Kasus penggunaan umum untuk <Remove> adalah menghapus parameter kueri atau header yang berisi data sensitif informasi dari objek permintaan masuk, agar tidak diteruskan ke server backend.

Elemen <Remove> menggunakan sintaksis berikut:

Sintaks

<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, dan hanya menampilkan HTTP {i>header<i} 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 akan melakukan ini hanya 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 yang dihasilkan.

Nilai Default T/A
Wajib? Opsional
Jenis Array dari elemen <FormParam> atau array kosong
Elemen Induk <Remove>
Elemen Turunan <FormParam>

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaks

<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 dari f3. Jika f3 hanya memiliki satu , maka tidak 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
Jenis Array dari elemen <Header> atau array kosong
Elemen Induk <Remove>
Elemen Turunan <Header>

Elemen <Headers> menggunakan sintaksis berikut:

Sintaks

<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, maka tidak dihapus.

<Payload> (turunan dari <Remove>)

Menentukan apakah <Remove> akan menghapus payload dalam permintaan atau respons, yang yang ditentukan oleh elemen <AssignTo>. Tetapkan ke true untuk menghapus {i>payload<i}; jika tidak, false. Nilai defaultnya adalah false.

Nilai Default Salah
Wajib? Opsional
Jenis Boolean
Elemen Induk <Remove>
Elemen Turunan Tidak ada

Elemen <Payload> menggunakan sintaksis berikut:

Sintaks

<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 adalah 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 yang dihasilkan.

Nilai Default T/A
Wajib? Opsional
Jenis Array dari elemen <QueryParam> atau array kosong
Elemen Induk <Remove>
Elemen Turunan <QueryParam>

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaks

<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, maka tidak 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 atribut Elemen <AssignTo>. <Set> menimpa header atau atau parameter formulir yang sudah ada dalam pesan asli atau menambahkan yang baru jika tidak ada.

Header dan kueri serta parameter formulir dalam pesan HTTP mungkin berisi beberapa nilai. Untuk menambahkan nilai tambahan untuk header atau parameter, gunakan elemen <Add> sebagai gantinya.

Nilai Default T/A
Wajib? Opsional
Jenis Jenis kompleks
Elemen Induk <AssignMessage>
Elemen Turunan <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<StatusCode>
<Verb>
<Version>

Elemen <Set> menggunakan sintaksis berikut:

Sintaks

<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. Saat kebijakan ini dilampirkan di alur Permintaan, ini akan memungkinkan sistem hulu untuk menerima {i>header<i} 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 dengan elemen ini. Elemen ini tidak berpengaruh pada respons.

Nilai Default T/A
Wajib? Opsional
Jenis Array elemen <FormParam>
Elemen Induk <Set>
Elemen Turunan <FormParam>

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaks

<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 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 menetapkan parameter formulir kosong dalam kebijakan (<Add><FormParams/></Add>), kebijakan ini tidak menambahkan formulir apa pun parameter. 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>)

Timpa header HTTP yang ada dalam permintaan atau respons, yang ditentukan oleh Elemen <AssignTo>.

Nilai Default T/A
Wajib? Opsional
Jenis Array elemen <Header>
Elemen Induk <Set>
Elemen Turunan <Header>

Elemen <Headers> menggunakan sintaksis berikut:

Sintaks

<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 atribut 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 ini tidak menyetel header apa pun. Ini akan memiliki efek yang sama dengan menghapus <Headers>.

<Path> (turunan dari <Set>)

<Payload> (turunan dari <Set>)

Menentukan isi pesan untuk permintaan atau respons, yang ditentukan oleh atribut Elemen <AssignTo>. Payload dapat berupa jenis konten apa pun yang valid, seperti teks, JSON, atau XML.

Nilai Default string kosong
Wajib? Opsional
Jenis String
Elemen Induk <Set>
Elemen Turunan Tidak ada

Elemen <Payload> menggunakan sintaksis berikut:

Sintaks

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

Dalam versi Apigee yang lebih lama—misalnya, sebelum rilis cloud 16.08.17—Anda dapat tidak menggunakan tanda kurung kurawal untuk menunjukkan referensi variabel dalam payload JSON. Dalam rilis tersebut, Anda perlu menggunakan atribut variablePrefix dan variableSuffix untuk menentukan karakter pembatas, dan menggunakannya untuk membungkus nama variabel, seperti:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

Sintaks 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 elemen variabel yang direferensikan pada runtime.

Contoh berikut menggunakan sintaksis tanda 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 contentType akan ditetapkan ke Header HTTP Content-Type.

Opsional String
variablePrefix Secara opsional, tentukan pembatas utama pada variabel alur. Default-nya adalah "{". Sebagai informasi selengkapnya, lihat Referensi variabel flow. Opsional Karakter
variableSuffix Secara opsional, tentukan pembatas akhir pada variabel alur. Default-nya adalah "}". Sebagai 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 memiliki efek pada respons.

Nilai Default T/A
Wajib? Opsional
Jenis Array elemen <QueryParam>
Elemen Induk <Set>
Elemen Turunan <QueryParam>

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaks

<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 (<Set><QueryParams/></Set>), kebijakan tidak menetapkan kueri apa pun parameter. 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
Jenis String atau VARIABLE
Elemen Induk <Set>
Elemen Turunan Tidak ada

Elemen <StatusCode> menggunakan sintaksis berikut:

Sintaks

<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. Ini berarti nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti saat runtime dengan nilai variabel yang direferensikan, seperti yang ditampilkan 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
Jenis String atau VARIABLE
Elemen Induk <Set>
Elemen Turunan Tidak ada

Elemen <Verb> menggunakan sintaksis berikut:

Sintaks

<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. Ini berarti nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti saat runtime dengan nilai yang direferensikan variabel.

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
Jenis String atau VARIABLE
Elemen Induk <Set>
Elemen Turunan Tidak ada

Elemen <Version> menggunakan sintaksis berikut:

Sintaks

<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. Ini berarti nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti saat runtime dengan nilai yang direferensikan variabel.

Anda hanya dapat menggunakan <Version> jika kriteria berikut terpenuhi:

  • Jenis pesan: Permintaan

Membuat pesan permintaan kustom

Anda dapat menggunakan MenetapkanMessage untuk membuat pesan permintaan kustom. Setelah Anda membuat Anda dapat menggunakannya dengan cara berikut:

  • Mengakses variabelnya dalam kebijakan lain
  • Meneruskannya ke layanan eksternal

Untuk membuat pesan permintaan kustom, gunakan elemen <AssignTo> dalam MenetapkanMessage lebih lanjut. Setel createNew ke true dan tentukan nama pesan baru dalam isi elemen, seperti yang ditampilkan contoh berikut:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
  ...
</AssignMessage>

Secara default, Apigee tidak melakukan apa pun dengan pesan permintaan kustom. Setelah membuatnya, Apigee akan melanjutkan alur dengan permintaan awal. Untuk menggunakan permintaan kustom, tambahkan kebijakan seperti sebagai kebijakan ServiceInfo ke proxy Anda, dan secara eksplisit merujuk ke permintaan yang baru dibuat di konfigurasi untuk kebijakan tersebut. 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 dengan MenetapkanMessage:

<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 header HTTP login pesan baru tersebut. Karena <Copy> tidak menentukan Atribut source, Apigee akan menggunakan pesan request sebagai sumber untuk menyalin dari.
    • Menetapkan parameter kueri address pada pesan kustom ke nilai parameter kueri addy permintaan masuk.
    • Menetapkan kata kerja HTTP ke GET.
  • Menetapkan <IgnoreUnresolvedVariables> ke false. Saat <IgnoreUnresolvedVariables> adalah false, jika salah satu variabel yang dirujuk dalam konfigurasi kebijakan tidak ada, Apigee akan memasuki status kesalahan dalam alur API.

Contoh 2

Berikut contoh lain yang menunjukkan cara membuat objek permintaan khusus dengan Pesan Tugas:

<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. Kemudian menyetel <Verb> dan <Payload> pada permintaan baru.

Anda dapat mengakses berbagai properti pesan kustom di kebijakan TetapkanMessage lainnya yang muncul kemudian dalam alur. Contoh berikut mendapatkan nilai {i>header<i} dari objek bernama respons kustom, 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 source dalam elemen <Copy> ditetapkan ke variabel yang bukan jenis message.

Variabel jenis pesan mewakili keseluruhan permintaan dan respons HTTP. Variabel alur Apigee bawaan request, response, dan message adalah jenis pesan. Untuk mempelajari variabel pesan lebih lanjut, baca Referensi variabel.

steps.assignmessage.UnresolvedVariable 500

Error ini terjadi jika variabel yang ditentukan dalam kebijakan ProvideMessage:

  • Di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan sedang dijalankan)
  • atau
  • Tidak dapat diselesaikan (tidak ditentukan)

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.
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.
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). Sebagai referensi, skema kebijakan tersedia di GitHub.

Topik terkait

Bekerja contoh kebijakan MenetapkanMessage tersedia di contoh Platform API.

Untuk contoh lanjutan selengkapnya tentang cara mengganti target.url dari ProxyEndpoint, lihat artikel Komunitas Apigee ini.

Untuk melihat cara kerja jalur yang ditetapkan di kebijakan Servicecallout, lihat Belajar dengan melakukan contoh di contoh GitHub Apigee. Cukup clone repositori dan ikuti petunjuk dalam topik tersebut. Contoh ini menggunakan Menetapkan Pesan untuk menetapkan jalur permintaan, kemudian menggunakan kebijakan ServiceCallout untuk membuat permintaan ke layanan eksternal.