Menetapkan kebijakan MessageMessage

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Apa

Kebijakan ProvideMessage mengubah atau membuat pesan permintaan dan respons baru selama Flow proxy API. Kebijakan ini memungkinkan Anda melakukan tindakan berikut pada pesan tersebut:

  • Menambahkan parameter formulir, header, atau parameter kueri baru ke pesan
  • Menyalin properti yang ada dari satu pesan ke pesan lainnya
  • Hapus header, parameter kueri, parameter formulir, dan/atau payload pesan dari pesan
  • Menetapkan nilai properti yang ada dalam pesan

Dengan kebijakan ApplyMessage, Anda biasanya menambahkan, mengubah, atau menghapus properti permintaan atau respons. Namun, Anda juga dapat menggunakan kebijakan fungsi yang ditetapkan untuk membuat permintaan khusus atau pesan respons dan meneruskannya ke target alternatif, seperti yang dijelaskan dalam Membuat pesan permintaan khusus.

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

Elemen <AssignMessage>

Menentukan kebijakan ApplyMessage.

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:

Sintaksis

Elemen <AssignMessage> menggunakan sintaksis berikut:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</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>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</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>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

Kebijakan Default

Contoh berikut menunjukkan setelan default saat Anda menambahkan kebijakan aman bagi alur Anda di UI Edge:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Saat Anda memasukkan kebijakan TetapkanMessage baru di UI Edge, template tersebut akan berisi stub untuk semua kemungkinan operasi. Biasanya, Anda memilih operasi mana yang ingin dilakukan dengan kebijakan ini dan menghapus elemen turunan lainnya. Misalnya, jika Anda ingin melakukan operasi penyalinan, gunakan elemen <Copy>, lalu hapus <Add>, <Remove>, dan elemen turunan lainnya dari kebijakan agar lebih mudah dibaca.

Elemen ini memiliki atribut berikut yang sama untuk semua kebijakan:

Atribut Default Wajib? Deskripsi
name T/A Wajib

Nama internal kebijakan. Nilai atribut 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 kebijakan di editor proxy UI pengelolaan dengan nama bahasa alami yang berbeda.

continueOnError false Opsional Tetapkan ke "false" untuk menampilkan error saat kebijakan gagal. Hal ini wajar untuk sebagian besar kebijakan. Tetapkan ke "true" agar eksekusi flow berlanjut meskipun kebijakan gagal.
enabled benar Opsional Tetapkan ke "true" untuk menerapkan kebijakan. Tetapkan ke "false" untuk "menonaktifkan" kebijakan. Kebijakan ini tidak akan diterapkan meskipun tetap dilampirkan ke flow.
async   false Tidak digunakan lagi Atribut ini tidak digunakan lagi.

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

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

<Add> menambahkan header atau parameter ke pesan yang tidak ada dalam pesan asli. Untuk menimpa header atau parameter yang ada, gunakan elemen <Set>.

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

<Set> menimpa header atau parameter yang sudah ada dalam pesan asli. Untuk menambahkan header atau parameter baru, gunakan elemen <Add>.

Elemen turunan lainnya
<AssignTo> Opsional Menentukan pesan yang dijalankan oleh kebijakan ProvideMessage. Ini bisa berupa permintaan atau respons standar, atau bisa juga pesan kustom baru.
<AssignVariable> Opsional Menetapkan nilai ke variabel flow. Jika variabel tidak ada, maka <AssignVariable> akan membuatnya.
<IgnoreUnresolvedVariables> Opsional Menentukan apakah pemrosesan berhenti ketika variabel yang belum terselesaikan ditemukan.

Setiap elemen turunan ini dijelaskan di bagian berikutnya.

Contoh

Contoh berikut menunjukkan beberapa cara menggunakan kebijakan kebijakan AssignMessage:

1: Tambahkan header

Contoh berikut menambahkan header ke permintaan dengan elemen <Add>:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: Menghapus payload

Contoh berikut menghapus payload dari respons dengan elemen <Remove>:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3: Mengubah respons

Contoh berikut memodifikasi objek respons yang ada dengan menambahkan header ke objek tersebut:

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

Contoh ini tidak membuat pesan baru. Sebagai gantinya, metode ini mengubah pesan respons yang ada dengan menambahkan header HTTP.

Karena contoh ini menghilangkan nama variabel dalam elemen <AssignTo>, dan menentukan type sebagai "respons", kebijakan ini akan mengubah objek respons yang ditampilkan oleh server target.

Header HTTP yang ditambahkan ke pesan respons oleh kebijakan ini berasal dari variabel yang diisi oleh kebijakan LookupCache. Oleh karena itu, pesan respons yang diubah oleh kebijakan Tetapkan Pesan ini berisi header HTTP yang menunjukkan apakah hasilnya telah diambil dari cache atau tidak. Menyetel header dalam respons dapat berguna untuk proses debug dan pemecahan masalah.

4: Menetapkan konten dinamis

Anda dapat menggunakan opsi Tetapkan Pesan untuk menyematkan konten dinamis dalam payload pesan respons dan permintaan.

Untuk menyematkan variabel flow Edge dalam payload XML, gabungkan variabel yang ditetapkan dalam tanda kurung kurawal, seperti ini: {prefix.name}.

Contoh berikut menyematkan nilai variabel alur header HTTP user-agent dalam elemen XML yang disebut User-agent:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Untuk payload JSON, Anda dapat memasukkan variabel menggunakan atribut variablePrefix dan variableSuffix dengan karakter pembatas seperti yang ditunjukkan dalam contoh berikut:

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

Untuk daftar lengkap variabel alur, lihat Referensi variabel flow.

Mulai rilis cloud 16.08.17, Anda juga dapat menggunakan tanda kurung kurawal untuk menyisipkan variabel.

5: Menghapus parameter kueri

Contoh berikut menghapus parameter kueri apikey dari permintaan:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Praktik terbaiknya adalah menghapus parameter kueri apikey dari pesan permintaan saat Anda menggunakan kebijakan VerifyAPIKey untuk autentikasi pengguna. Anda melakukan hal ini untuk mencegah informasi kunci yang sensitif diteruskan ke target backend.

6: Menetapkan/mendapatkan variabel

Contoh berikut menggunakan tiga kebijakan Tetapkan Pesan:

  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 continueOnError="false" enabled="true" name="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>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

Kebijakan kedua menggunakan elemen <AssignVariable> untuk membaca nilai dan membuat tiga variabel baru:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

Dalam kebijakan kedua, elemen <Ref> mereferensikan variabel sumber, dan elemen <Name> menentukan nama variabel baru. Jika variabel yang dirujuk oleh elemen <Ref> tidak dapat diakses, Anda dapat menggunakan nilai yang ditentukan oleh elemen <Value>.

Untuk mencoba serangkaian kebijakan ini:

  1. Tambahkan kebijakan #1 dan #2 ke alur permintaan. Pastikan untuk menempatkan kebijakan #1 sebelum kebijakan #2.
  2. Tambahkan kebijakan ketiga di alur response.
  3. Kebijakan ketiga menggunakan elemen <Set> untuk menambahkan variabel ke respons. Contoh berikut membuat payload XML sebagai respons yang ditampilkan Edge ke klien:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    Perhatikan bahwa sintaksis untuk mengakses variabel alur di <Set> adalah menggabungkannya dalam tanda kurung kurawal.

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

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

    Secara opsional, Anda dapat menyalurkan hasilnya melalui utilitas seperti xmllint sehingga XML ditampilkan dalam struktur yang diformat dengan baik:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    Isi respons akan terlihat seperti berikut:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7: Mendapatkan header respons Info Layanan

Pada contoh berikut, misalkan kebijakan ServiceCallout ada dalam permintaan proxy API, dan respons pemanggilan berisi beberapa header dengan nama yang sama (Set-Cookie). Dengan asumsi variabel respons Service Callout adalah calloutResponse default, kebijakan berikut akan mendapatkan nilai header Set-Cookie kedua.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Untuk mencantumkan semua nilai header, gunakan variabel berikut:

{calloutResponse.header.Set-Cookie.values}

Setiap elemen turunan dalam referensi ini memiliki contoh tambahan. Untuk contoh lainnya, lihat ContohAssignMessage di GitHub.

Referensi elemen turunan

Bagian ini menjelaskan elemen turunan <AssignMessage>.

<Add>

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

Elemen <Add> menambahkan properti baru pada pesan yang tidak ada dalam pesan asli. Untuk mengubah nilai properti 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:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut menggunakan elemen <FormParams> untuk mendapatkan nilai tiga parameter string kueri dari permintaan awal dan menetapkannya sebagai parameter formulir pada permintaan endpoint target:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Contoh 2

Contoh berikut menggunakan elemen <Headers> untuk menambahkan header User-Agent ke permintaan endpoint target:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh 3

Contoh berikut menggunakan elemen <QueryParams> untuk menambahkan satu parameter kueri dengan nilai statis ke permintaan:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh ini menggunakan <Add> dalam preflow permintaan. Jika Anda melihat hasil dalam alat seperti Fitur trace, permintaan ke "http://http://httpbin.org/get" akan menjadi "http://httpbin.org/get?myParam=42".

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

<FormParams> (turunan dari <Add>)

Menambahkan parameter formulir baru ke pesan permintaan. Elemen ini tidak berpengaruh pada pesan respons.

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

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut menambahkan parameter bentuk tunggal ("answer") dan nilai statis ("42") ke permintaan:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut mendapatkan nilai parameter string kueri name dan menambahkannya ke permintaan sebagai parameter formulir:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

Perhatikan bahwa contoh ini tidak menentukan target dengan <AssignTo>. Kebijakan ini hanya menambahkan parameter ke permintaan tersebut.

Contoh 3

Contoh berikut menambahkan beberapa parameter formulir ke permintaan:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Contoh ini mendapatkan parameter string kueri dari permintaan asal dan menambahkannya sebagai parameter formulir ke permintaan yang dikirim ke endpoint target.

Anda dapat menggunakan Alat rekaman aktivitas untuk melihat alur. Anda akan melihat bahwa isi permintaan berisi data formulir berenkode URL, yang awalnya diteruskan sebagai parameter string kueri:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

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

  • Kata kerja HTTP: POST
  • Jenis pesan: Permintaan
  • Salah satu (atau kedua) hal berikut:
    • Data formulir: Tetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan curl, tambahkan -d "" ke permintaan Anda.
    • Header Content-Length: Ditetapkan ke 0 (jika tidak ada data dalam permintaan asli; jika tidak, panjang saat ini, dalam byte). Misalnya, 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>, Edge akan menetapkan header Content-Type permintaan ke "application/x-www-form-url mengenkode" sebelum mengirim pesan ke layanan target.

<Headers> (turunan dari <Add>)

Menambahkan header baru ke permintaan atau respons yang ditentukan, yang ditentukan oleh elemen <AssignTo>.

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

Elemen <Headers> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut menambahkan header user-agent ke pesan permintaan, dan menetapkan nilai variabel alur request.user.agent ke header tersebut.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</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:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut menambahkan parameter kueri "myParam" ke permintaan dan menetapkan nilai "42" ke permintaan tersebut:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

  • Kata kerja HTTP: GET
  • Jenis pesan: Permintaan

Selain itu, Anda hanya dapat menetapkan parameter kueri jika atribut type milik elemen <AssignTo> merupakan pesan permintaan. Menetapkannya dalam respons tidak akan berpengaruh.

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

<AssignTo>

Menentukan objek tempat kebijakan TetapkanMessage beroperasi. Opsinya adalah:

  • Pesan permintaan: request yang diterima oleh proxy API
  • Pesan respons: response yang ditampilkan dari server target
  • Pesan kustom: Objek permintaan atau respons kustom

Perlu diketahui bahwa dalam beberapa kasus, Anda tidak dapat mengubah objek tempat kebijakan TetapkanMessage. Misalnya, Anda tidak dapat menggunakan <Add> atau <Set> untuk menambahkan atau mengubah parameter kueri (<QueryParams>) atau parameter formulir (<FormParams>) pada respons. Anda hanya dapat memanipulasi parameter kueri dan parameter formulir berdasarkan permintaan.

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

Jika Anda tidak menentukan <AssignTo>, kebijakan akan bertindak pada permintaan atau respons default, yang didasarkan pada tempat kebijakan dijalankan. Jika dijalankan dalam alur permintaan, kebijakan akan memengaruhi pesan permintaan. Jika dijalankan di alur respons, kebijakan akan memengaruhi respons secara default.

Elemen <AssignTo> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan bahwa target adalah permintaan asli yang akan dikirim ke endpoint target:

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Dengan menyetel createNew ke "false" (default), contoh ini tidak akan membuat permintaan baru. Semua pengoperasian dalam kebijakan ini akan memengaruhi permintaan asli.

Contoh 2

Contoh berikut akan membuat objek permintaan baru:

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

Saat Anda membuat objek permintaan atau respons baru, elemen lain dari kebijakan kebijakan TetapkanMessage (seperti <Add>, <Set>, dan <Set>) akan bertindak pada objek permintaan baru tersebut.

Anda dapat mengakses objek permintaan baru dalam kebijakan lain nanti dalam alur tersebut, atau mengirim objek permintaan baru ke layanan eksternal dengan kebijakan ServiceCallout.

Contoh 3

Contoh berikut membuat objek permintaan baru bernama "MyRequestObject":

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

Saat Anda membuat objek permintaan atau respons baru, elemen lain dari kebijakan kebijakan TetapkanMessage (seperti <Add>, <Set>, dan <Set>) akan bertindak pada objek permintaan baru tersebut.

Anda dapat mengakses objek permintaan baru dalam kebijakan lain nanti dalam alur tersebut, atau mengirim objek permintaan baru ke layanan eksternal dengan kebijakan ServiceCallout.

Tabel berikut menjelaskan atribut <AssignTo>:

Atribut Deskripsi Wajib diisi? Jenis
createNew

Menentukan apakah kebijakan ini membuat pesan baru saat menetapkan nilai.

Jika "true", kebijakan akan membuat variabel baru dari jenis yang ditentukan oleh type ("request" atau "response"). Jika Anda tidak menentukan nama variabel baru, kebijakan akan membuat objek permintaan atau respons baru, 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, variabel tersebut akan melanjutkan pemrosesan. Misalnya, jika kebijakan berada dalam alur permintaan, variabelnya adalah objek permintaan. Jika kebijakan ini memicu respons, variabelnya adalah objek respons.
  • Jika <AssignTo> tidak dapat diselesaikan, atau di-resolve menjadi jenis non-pesan, kebijakan akan menampilkan error.

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

  • Jika <AssignTo> di-resolve menjadi pesan, pemrosesan akan berlanjut ke langkah berikutnya.
  • Jika <AssignTo> tidak dapat diselesaikan, atau di-resolve menjadi jenis non-pesan, variabel jenis baru yang ditentukan dalam type akan 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". Nilai yang valid adalah "request" atau "response".

Nilai defaultnya adalah "request". Jika Anda menghapus atribut ini, Edge akan membuat permintaan atau respons, bergantung pada alur yang dijalankan oleh kebijakan ini.

Opsional String

<AssignVariable>

Menetapkan nilai ke variabel alur tujuan (misalnya, variabel yang nilainya ditetapkan oleh kebijakan TetapkanMessage). Jika variabel flow tidak ada, <AssignVariable> akan membuatnya.

Nilai Default t/a
Wajib? Opsional
Jenis Jenis kompleks
Elemen Induk <AssignMessage>
Elemen Turunan <Name> (wajib ada)
<Ref>
<Template>
<Value>

Nilai yang Anda tetapkan ke variabel alur tujuan dapat berupa salah satu dari yang berikut:

  • String literal: Gunakan elemen turunan <Value> untuk menentukan nilai string literal untuk variabel alur tujuan.
  • Variabel alur: Gunakan elemen turunan <Ref> untuk menentukan nilai variabel alur yang ada untuk variabel alur tujuan. Untuk mengetahui daftar lengkap variabel alur yang dapat digunakan sebagai sumber, lihat Referensi variabel flow.
  • Template pesan: Gunakan elemen turunan <Template> untuk menentukan template pesan bagi variabel alur tujuan.

Elemen <AssignVariable> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <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 dirujuk oleh <Ref> tidak dapat diakses, Edge akan menggunakan nilai yang ditentukan oleh elemen <Value>. Jika Anda menentukan <Template>, elemen tersebut akan diprioritaskan daripada elemen turunan lainnya.

Contoh 1

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

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

Contoh 2

Contoh berikut menetapkan nilai variabel alur request.header.user-agent ke variabel alur tujuan myvar dan nilai parameter kueri country ke variabel alur tujuan Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Jika salah satu penetapan gagal, Edge akan menetapkan nilai "ErrorOnCopy" ke variabel alur tujuan.

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

Contoh 3

Contoh berikut menggunakan elemen turunan <Template> untuk menyambungkan dua variabel konteks dengan string literal (tanda hubung) di antaranya:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Penggunaan umum untuk <AssignVariable> adalah untuk menetapkan nilai default untuk parameter kueri, header, atau nilai lainnya yang dapat diteruskan dengan permintaan. Anda melakukannya dengan kombinasi elemen turunan <Ref> dan <Value>. Untuk mengetahui informasi selengkapnya, lihat contoh untuk <Ref>.

<Name> (turunan dari <AssignVariable>)

Menentukan nama variabel alur tujuan (misalnya, variabel yang nilainya ditetapkan oleh kebijakan TetapkanMessage). Jika variabel yang disebutkan dalam <AssignVariable> tidak ada, kebijakan akan membuat variabel dengan nama tersebut.

Nilai Default t/a
Wajib? Wajib
Jenis String
Elemen Induk <AssignVariable>
Elemen Turunan Tidak ada

Elemen <Name> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

Contoh 1

Contoh berikut menentukan variabel tujuan sebagai myvar, dan menetapkannya ke nilai literal "42":

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

Jika myvar tidak ada, <AssignVariable> akan membuatnya.

<Ref> (turunan dari <AssignVariable>)

Menentukan sumber penetapan sebagai variabel alur. Variabel alur dapat berupa salah satu variabel alur yang telah ditentukan sebelumnya (seperti yang tercantum dalam Referensi variabel alur), atau variabel alur kustom yang Anda buat.

Nilai <Ref> selalu ditafsirkan sebagai variabel alur; Anda tidak dapat menentukan string literal sebagai nilai. Untuk menetapkan nilai string literal, gunakan elemen <Value>.

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

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

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

Untuk menentukan nilai default bagi variabel alur tujuan, gunakan <Value> yang dikombinasikan dengan <Ref>. Jika variabel flow yang ditentukan oleh <Ref> tidak ada, tidak dapat dibaca, atau bernilai null, Edge akan menetapkan nilai <Value> ke variabel alur tujuan.

Elemen <Ref> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan nilai variabel alur request.header.user-agent ke variabel alur tujuan myvar dan nilai parameter kueri country ke variabel Country:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

Dalam contoh ini, Edge tidak memiliki nilai default (atau nilai penggantian) yang ditentukan untuk kedua penetapan tersebut.

Contoh 2

Contoh berikut menetapkan nilai variabel alur request.header.user-agent ke variabel alur tujuan myvar dan nilai parameter kueri country ke variabel Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Dalam contoh ini, jika nilai variabel alur request.header.user-agent atau parameter kueri Country adalah null, tidak dapat dibaca, atau formatnya salah, Edge akan menetapkan nilai "ErrorOnCopy" ke variabel baru.

Contoh 3

Kasus penggunaan umum untuk <AssignVariable> adalah menetapkan nilai default dari parameter kueri, header, atau nilai lainnya yang dapat diteruskan dengan permintaan. Misalnya, Anda membuat proxy weather API di mana permintaan mengambil satu parameter kueri bernama "w". Parameter ini berisi ID kota yang Anda inginkan untuk cuacanya. URL permintaan memiliki bentuk:

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

Untuk menentukan nilai default untuk "w", buat kebijakan standar yang ditetapkan (assignMessage) seperti berikut:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

Dalam contoh ini, <AssignVariable> mendapatkan nilai request.queryparam.w dan menetapkannya ke dirinya sendiri. Jika variabel flow bernilai null, yang berarti parameter kueri "w" dihilangkan dari permintaan, contoh ini akan menggunakan nilai default dari elemen <Value>. Oleh karena itu, Anda dapat membuat permintaan ke proxy API ini yang menghilangkan parameter kueri "w":

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

...dan tetap meminta proxy API mengembalikan hasil yang valid.

Berbeda dengan saat menggunakan <Value>, nilai <Ref> harus berupa variabel alur, seperti properti objek request, response, atau target. Nilainya juga dapat berupa variabel alur kustom yang Anda buat.

Jika Anda menentukan variabel flow yang tidak ada untuk nilai <Ref>, dan nilai <IgnoreUnresolvedVariables> adalah "true", Edge akan menampilkan error.

<Template> (turunan dari <AssignVariable>)

Menentukan template pesan. Template pesan memungkinkan Anda melakukan penggantian string variabel saat kebijakan dieksekusi, dan dapat menggabungkan string literal dengan nama variabel yang digabungkan dalam tanda kurung kurawal. Selain itu, template pesan mendukung fungsi seperti escaping dan konversi kasus.

Gunakan atribut ref untuk menentukan variabel alur dengan nilai variabel tersebut adalah template pesan. Misalnya, Anda dapat menyimpan template pesan sebagai atribut khusus di aplikasi developer. Saat Edge mengidentifikasi aplikasi developer setelah memverifikasi kunci API atau token keamanan (melalui kebijakan tambahan), elemen <AssignVariable> dapat menggunakan template pesan dari atribut khusus aplikasi, yang tersedia sebagai variabel alur dari kebijakan keamanan. Contoh berikut mengasumsikan bahwa template pesan tersedia di atribut pelanggan yang disebut message_template di aplikasi developer yang melakukan panggilan API, tempat kebijakan VerifyAPIKey digunakan untuk memverifikasi kunci API aplikasi:

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

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

Contoh 1

Contoh berikut menggunakan sintaksis template pesan untuk menyambungkan dua variabel konteks dengan string literal (tanda hubung) di antara keduanya:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Contoh 2

Contoh berikut menetapkan variabel alur, dengan nilai variabelnya adalah template pesan yang telah ditentukan sebelumnya. Gunakan opsi ini jika Anda ingin memasukkan template yang telah ditentukan sebelumnya saat runtime tanpa harus mengubah kebijakan:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

Contoh 3

Contoh berikut menentukan variabel flow dan nilai teks. Dalam hal ini, jika variabel yang direferensikan adalah non-null, nilai tersebut akan digunakan sebagai template. Jika nilai yang dirujuk adalah null, maka nilai teks (dalam hal ini, {system.uuid}-{messageid}) akan digunakan sebagai template. Pola ini berguna untuk memberikan nilai "ganti", 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='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (turunan dari <AssignVariable>)

Menentukan nilai variabel alur tujuan yang ditetapkan dengan <AssignVariable>. Nilai selalu ditafsirkan sebagai string literal; Anda tidak bisa menggunakan variabel flow sebagai nilai, meskipun Anda menggabungkan nilai dalam tanda kurung ("{}"). Untuk menggunakan variabel flow, gunakan <Ref>.

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 penggantian). Jika <Ref> tidak ditentukan, tidak dapat diselesaikan, atau null, nilai <Value> akan digunakan.

Elemen <Value> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan nilai variabel alur tujuan, myvar, ke nilai literal "42":

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

Contoh 2

Contoh berikut menetapkan nilai variabel alur request.header.user-agent ke variabel alur myvar dan nilai parameter kueri country ke variabel Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Jika salah satu penetapan gagal, <AssignVariable> akan menetapkan nilai "ErrorOnCopy" ke variabel alur tujuan.

<Copy>

Menyalin nilai dari pesan yang ditentukan oleh atribut source ke pesan yang ditentukan oleh elemen <AssignTo>. Jika Anda tidak menentukan target dengan <AssignTo>, kebijakan ini akan menyalin nilai ke permintaan atau respons, bergantung pada alur yang dijalankan oleh kebijakan ini.

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

Elemen <Copy> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</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>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <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 bentuk, jalur, dan semua parameter kueri dari permintaan ke permintaan kustom baru:

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Elemen <Copy> memiliki atribut berikut:

Atribut Deskripsi Wajib diisi? Jenis
source

Menentukan objek sumber salinan.

  • Jika source tidak ditentukan, pesan akan diperlakukan sebagai pesan sederhana. Misalnya, jika kebijakan berada dalam alur permintaan, sumber akan ditetapkan secara default ke objek request. Jika kebijakan berada dalam alur respons, kebijakan akan ditetapkan secara default ke objek response. Jika menghapus source, Anda dapat menggunakan referensi absolut ke variabel flow sebagai sumber salinan. Misalnya, tentukan nilai sebagai {request.header.user-agent}.
  • Jika variabel sumber tidak dapat diselesaikan, atau di-resolve menjadi jenis non-pesan, <Copy> akan gagal merespons.
Opsional String

<FormParams> (turunan dari <Copy>)

Menyalin parameter bentuk dari permintaan yang ditentukan oleh atribut source elemen <Copy> ke permintaan yang ditentukan oleh elemen <AssignTo>. Elemen ini tidak berpengaruh pada respons.

Nilai Default t/a
Wajib? Opsional
Jenis Array elemen <FormParam> atau array kosong
Elemen Induk <Copy>
Elemen Turunan <FormParam>

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menyalin parameter bentuk tunggal dari permintaan ke permintaan kustom "MyCustomRequest":

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut menyalin semua parameter formulir ke permintaan kustom "MyCustomRequest":

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 3

Contoh berikut menyalin tiga parameter formulir ke permintaan kustom "MyCustomRequest":

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 4

Jika ada beberapa parameter formulir dengan nama yang sama, gunakan sintaksis berikut:

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh ini menyalin "f1", "f2", dan nilai kedua "f3". Jika "f3" hanya memiliki satu nilai, nilai tersebut tidak akan disalin.

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

  • Kata kerja HTTP: POST
  • Jenis pesan: Respons
  • Salah satu (atau kedua) hal berikut:
    • Data formulir: Tetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan curl, tambahkan -d "" ke permintaan Anda.
    • Header Content-Length: Tetapkan ke 0 (jika tidak ada data dalam permintaan asli; jika tidak, durasi saat ini. Misalnya, 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-urlencoding" sebelum mengirim pesan ke layanan target.

<Headers> (turunan dari <Copy>)

Menyalin header HTTP dari pesan permintaan atau respons yang ditentukan oleh atribut source elemen <Copy> ke pesan permintaan atau respons yang ditentukan oleh elemen <AssignTo>.

Nilai Default t/a
Wajib? Opsional
Jenis Array elemen <Header> atau array kosong
Elemen Induk <Copy>
Elemen Turunan <Header>

Elemen <Headers> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menyalin header user-agent dari permintaan ke objek permintaan kustom baru:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 2

Untuk menyalin semua header, gunakan elemen <Headers> kosong, seperti yang ditunjukkan contoh berikut:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 3

Jika ada beberapa header dengan nama yang sama, gunakan sintaksis berikut:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh ini menyalin "h1", "h2", dan nilai kedua "h3". Jika "h3" hanya memiliki satu nilai, nilai tersebut tidak akan disalin.

<Path> (turunan dari <Copy>)

Menentukan apakah jalur harus disalin dari permintaan sumber ke permintaan tujuan. Elemen ini tidak berpengaruh pada respons.

Jika "true", kebijakan ini akan menyalin jalur dari pesan permintaan yang ditentukan oleh atribut source elemen <Copy> ke pesan permintaan yang ditentukan oleh elemen <AssignTo>.

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

Elemen <Path> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menunjukkan bahwa kebijakan ProvideMessage harus menyalin jalur dari permintaan sumber ke objek permintaan kustom yang baru:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Permintaan

<Payload> (turunan dari <Copy>)

Menentukan apakah payload harus disalin dari sumber ke tujuan. Sumber dan tujuan dapat berupa permintaan atau respons.

Jika "true", kebijakan ini akan menyalin payload dari pesan yang ditentukan oleh atribut source 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:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <Payload> ke "true" sehingga payload permintaan disalin dari permintaan ke respons:

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (turunan dari <Copy>)

Menyalin parameter string kueri dari permintaan yang ditentukan oleh atribut source elemen <Copy> ke permintaan yang ditentukan oleh elemen <AssignTo>. Elemen ini tidak berpengaruh pada respons.

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

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menyalin parameter kueri "my_param" dari permintaan ke objek permintaan kustom baru:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut menyalin semua parameter kueri dari permintaan ke objek permintaan kustom baru:

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh 3

Jika ada beberapa parameter kueri dengan nama yang sama, gunakan sintaksis berikut:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Contoh ini menyalin "qp1", "qp2", dan nilai kedua "qp3". Jika "qp3" hanya memiliki satu nilai, maka nilai tersebut tidak akan disalin.

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

  • Kata kerja HTTP: GET
  • Jenis pesan: Permintaan

<ReasonPhrase> (turunan dari <Copy>)

Menentukan apakah frasa alasan harus disalin dari respons sumber ke respons tujuan. Elemen ini tidak berpengaruh pada permintaan.

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

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

Elemen <ReasonPhrase> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <ReasonPhrase> ke "true", yang menyebabkan <Copy> menyalin frasa alasan dari respons default ke objek respons kustom:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Respons

<StatusCode> (turunan dari <Copy>)

Menentukan apakah kode status disalin dari respons sumber ke respons tujuan. Elemen ini tidak berpengaruh pada permintaan.

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

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

Elemen <StatusCode> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <StatusCode> ke "true", yang menyalin kode status dari objek respons default ke objek respons kustom baru:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Respons

Penggunaan <StatusCode> yang umum adalah untuk memastikan bahwa respons proxy memiliki status yang sama dengan respons yang diterima dari target saat atribut createNew <AssignTo> ditetapkan ke "true".

<Verb> (turunan dari <Copy>)

Menentukan apakah kata kerja HTTP disalin dari permintaan sumber ke permintaan tujuan. Elemen ini tidak berpengaruh pada respons.

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

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

Elemen <Verb> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <Verb> ke "true", yang menyalin kata kerja dari permintaan default ke permintaan kustom baru:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Permintaan

<Version> (turunan dari <Copy>)

Menentukan apakah versi HTTP disalin dari permintaan sumber ke permintaan tujuan. Elemen ini tidak berpengaruh pada respons.

Jika "true", akan menyalin versi HTTP yang ditemukan dalam atribut source elemen <Copy> ke objek yang ditentukan oleh elemen <AssignTo>.

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

Elemen <Version> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <Version> ke "true" pada permintaan, yang menyalin versi dari objek permintaan default ke objek permintaan kustom baru:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Permintaan

<DisplayName>

Gunakan selain atribut name untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama yang berbeda dan terdengar lebih alami.

Elemen <DisplayName> bersifat umum untuk semua kebijakan.

Nilai Default t/a
Wajib? Opsional. Jika Anda menghapus <DisplayName>, nilai atribut name kebijakan akan digunakan
Jenis String
Elemen Induk <PolicyElement>
Elemen Turunan Tidak ada

Elemen <DisplayName> menggunakan sintaksis berikut:

Sintaksis

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Contoh

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

Elemen <DisplayName> tidak memiliki atribut atau elemen turunan.

<IgnoreUnresolvedVariables>

Menentukan apakah pemrosesan berhenti ketika variabel yang belum terselesaikan ditemukan.

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

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

Menetapkan <IgnoreUnresolvedVariables> ke true berbeda dengan menetapkan continueOnError <AssignMessage> ke true karena dikhususkan untuk menetapkan dan mendapatkan nilai variabel. Jika Anda menetapkan continueOnError ke true, Edge akan mengabaikan semua error, bukan hanya error yang ditemukan saat menggunakan variabel.

Elemen <IgnoreUnresolvedVariables> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <IgnoreUnresolvedVariables> ke "true":

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

Menghapus header, parameter kueri, parameter formulir, dan/atau payload pesan dari suatu pesan. Pesan dapat berupa permintaan atau respons. Anda menentukan pesan mana yang ditindaklanjuti oleh <Remove> 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 yang berisi informasi sensitif dari objek permintaan yang masuk, agar tidak diteruskan ke server backend.

Elemen <Remove> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus isi pesan dari respons:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Dalam alur respons, kebijakan ini menghapus isi respons, yang hanya menampilkan header HTTP ke klien.

Contoh 2

Contoh berikut menghapus semua parameter formulir dan parameter kueri dari permintaan masuk:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (turunan dari <Remove>)

Menghapus parameter formulir yang ditentukan dari permintaan. Elemen ini tidak berpengaruh pada respons.

Nilai Default t/a
Wajib? Opsional
Jenis Array elemen <FormParam> atau array kosong
Elemen Induk <Remove>
Elemen Turunan <FormParam>

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus tiga parameter formulir dari permintaan:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Contoh 2

Contoh berikut menghapus semua parameter formulir dari permintaan:

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Contoh 3

Jika ada beberapa parameter formulir dengan nama yang sama, gunakan sintaksis berikut:

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Contoh ini menghapus "f1", "f2", dan nilai kedua dari "f3". Jika "f3" hanya memiliki satu nilai, nilai tersebut tidak akan dihapus.

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

  • Jenis pesan: Permintaan
  • Content-Type: "application/x-www-form-urlencoding"

<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 elemen <Header> atau array kosong
Elemen Induk <Remove>
Elemen Turunan <Header>

Elemen <Headers> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus header user-agent dari permintaan:

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh 2

Contoh berikut menghapus semua header dari permintaan:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh 3

Jika ada beberapa header dengan nama yang sama, gunakan sintaksis berikut:

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh ini menghapus "h1", "h2", dan nilai kedua "h3" dari permintaan. Jika "h3" hanya memiliki satu nilai, nilai tersebut tidak akan dihapus.

<Payload> (turunan dari <Remove>)

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

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

Elemen <Payload> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan <Payload> ke "true" sehingga payload permintaan akan dihapus:

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (turunan dari <Remove>)

Menghapus parameter kueri yang ditentukan dari permintaan. Elemen ini tidak berpengaruh pada respons.

Nilai Default t/a
Wajib? Opsional
Jenis Array elemen <QueryParam> atau array kosong
Elemen Induk <Remove>
Elemen Turunan <QueryParam>

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus satu parameter kueri dari permintaan:

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh 2

Contoh berikut menghapus semua parameter kueri dari permintaan:

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh 3

Jika ada beberapa parameter kueri dengan nama yang sama, gunakan sintaksis berikut:

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Contoh ini menghapus "qp1", "qp2", dan nilai kedua "qp3" dari permintaan. Jika "qp3" hanya memiliki satu nilai, maka tidak akan dihapus.

Contoh 4

Contoh berikut menghapus parameter kueri apikey dari permintaan:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

  • Kata kerja HTTP: GET
  • Jenis pesan: Permintaan

<Set>

Menetapkan informasi dalam pesan permintaan atau respons, yang ditentukan oleh elemen <AssignTo>. <Set> menimpa header atau parameter yang sudah ada dalam pesan asli. Untuk membuat header atau parameter baru, gunakan elemen <Add>.

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

Elemen <Set> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <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 menampilkan elemen <Set>:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (turunan dari <Set>)

Menimpa parameter formulir yang ada pada permintaan dan menggantinya dengan nilai baru yang Anda tentukan dengan elemen ini. Elemen ini tidak berpengaruh pada respons.

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

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan parameter formulir yang disebut "myparam" ke nilai variabel request.header.myparam dalam permintaan kustom yang baru:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Kata kerja HTTP: POST
  • Jenis pesan: Permintaan

Jika Anda menentukan parameter bentuk kosong dalam kebijakan Anda (<Add><FormParams/></Add>), kebijakan tersebut tidak akan menambahkan parameter formulir apa pun. Ini sama dengan menghilangkan <FormParams>.

<Set> mengubah Content-Type pesan menjadi "application/x-www-form-urlencoding" sebelum mengirimkannya ke endpoint target.

<Headers> (turunan dari <Set>)

Menimpa header HTTP yang ada dalam permintaan atau respons, yang ditetapkan oleh elemen <AssignTo>.

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

Elemen <Headers> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan header user-agent ke nilai variabel request.header.user-agent:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Jika Anda menentukan header kosong dalam kebijakan Anda (<Add><Headers/></Add>), kebijakan tersebut tidak akan menambahkan header apa pun. Ini sama dengan menghilangkan <Headers>.

<Path> (turunan dari <Set>)

<Payload> (turunan dari <Set>)

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

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

Elemen <Payload> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan payload teks biasa:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

Contoh 2

Contoh berikut menetapkan payload JSON:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

Contoh 3

Contoh berikut menyisipkan nilai variabel ke dalam payload dengan menggabungkan nama variabel dalam tanda kurung kurawal:

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

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

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

Sintaksis lama ini masih berfungsi.

Contoh 4

Konten <Payload> diperlakukan sebagai template pesan. Ini berarti bahwa kebijakan TetapkanMessage mengganti variabel yang digabungkan dalam tanda kurung kurawal dengan nilai variabel yang direferensikan saat runtime.

Contoh berikut menggunakan sintaksis kurung kurawal untuk menetapkan bagian payload ke nilai variabel:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

Tabel berikut menjelaskan atribut <Payload>:

Atribut Deskripsi Ketersediaan Jenis
contentType

Jika ditentukan, nilai contentType akan ditetapkan ke header HTTP Content-Type.

Opsional String
variablePrefix Secara opsional, tentukan pemisah utama pada variabel flow. Default-nya adalah "{". Untuk informasi selengkapnya, lihat Referensi variabel flow. Opsional Karakter
variableSuffix Secara opsional, tentukan pemisah akhir pada variabel flow. Default-nya adalah "}". Untuk informasi selengkapnya, lihat Referensi variabel flow. Opsional Karakter

<QueryParams> (turunan dari <Set>)

Timpa parameter kueri yang ada dalam permintaan dengan nilai baru. Elemen ini tidak berpengaruh pada respons.

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

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan parameter kueri "address" ke nilai variabel request.header.address:

<AssignMessage continueOnError="false" enabled="true" name="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
  • Jenis pesan: Permintaan

Jika Anda menetapkan parameter kueri kosong dalam kebijakan Anda (<Set><QueryParams/></Set>), kebijakan ini tidak akan menetapkan parameter kueri apa pun. Ini sama dengan menghilangkan <QueryParams>.

<ReasonPhrase> (turunan dari <Set>)

Menetapkan frasa alasan pada respons. Tindakan ini biasanya dilakukan untuk proses debug yang dikombinasikan dengan <StatusCode>. Elemen ini tidak berpengaruh pada permintaan.

Nilai Default t/a
Wajib? Opsional
Jenis String
Elemen Induk <Set>
Elemen Turunan Tidak ada

Elemen <ReasonPhrase> menggunakan sintaksis berikut:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut mendefinisikan frasa alasan sederhana:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Contoh 2

Konten <ReasonPhrase> diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan, seperti yang ditunjukkan contoh berikut:

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

  • Jenis pesan: Respons

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

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan kode status sederhana:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Contoh 2

Konten <StatusCode> diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan, seperti yang ditunjukkan contoh berikut:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</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:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan kata kerja sederhana pada permintaan:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Contoh 2

Konten <Verb> diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan.

Contoh berikut menggunakan variabel untuk mengisi kata kerja:

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</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:

Sintaksis

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan nomor versi ke "1.1":

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Contoh 2

Kode berikut menggunakan variabel dalam tanda kurung kurawal untuk menetapkan nomor versi:

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Konten <Version> diperlakukan sebagai template pesan. Artinya, nama variabel yang digabungkan dalam tanda kurung kurawal akan diganti pada saat runtime dengan nilai variabel yang direferensikan.

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

  • Jenis pesan: Permintaan

Membuat pesan permintaan kustom

Anda dapat menggunakan kebijakan ProvideMessage untuk membuat pesan permintaan kustom. Setelah membuat permintaan kustom, Anda dapat menggunakannya dengan cara berikut:

  • Mengakses variabelnya dalam kebijakan lain
  • Meneruskannya ke layanan eksternal

Untuk membuat pesan permintaan kustom, gunakan elemen <AssignTo> di kebijakan kebijakan Penugasan Anda. Tetapkan createNew ke "true" dan tentukan nama pesan baru dalam isi elemen, seperti yang ditunjukkan contoh berikut:

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

Secara default, Edge tidak melakukan apa pun terhadap pesan permintaan khusus. Setelah membuatnya, Edge akan melanjutkan alur dengan permintaan asal. Untuk menggunakan permintaan kustom, tambahkan kebijakan seperti kebijakan ServiceCallout ke proxy yang dapat meneruskan permintaan kustom tersebut ke layanan eksternal.

Contoh berikut membuat pesan permintaan kustom:

Contoh 1

Contoh berikut membuat objek permintaan kustom dengan Tetapkan Pesan:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Contoh ini:

  • Membuat objek pesan permintaan baru bernama "MyCustomRequest".
  • Di MyCustomRequest, kebijakan ini:
    • Menyalin nilai header HTTP user-agent dari permintaan masuk ke pesan baru. Karena <Copy> menggunakan referensi absolut ke variabel alur user-agent, tidak perlu menentukan atribut source ke <Copy>.
    • Menetapkan parameter kueri address pada pesan kustom ke nilai parameter kueri addy permintaan masuk.
    • Menetapkan kata kerja HTTP ke GET.
  • Menetapkan <IgnoreUnresolvedVariables> ke "false". Ketika <IgnoreUnresolvedVariables> bernilai "false", jika salah satu variabel yang coba ditambahkan oleh kebijakan tidak ada, Edge akan berhenti memproses dalam alur API.

Contoh 2

Berikut adalah contoh lain yang menunjukkan cara membuat objek permintaan kustom dengan Tetapkan Pesan:

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

Contoh ini membuat permintaan kustom baru bernama "partner.request". Selanjutnya, kode ini menetapkan <Verb> dan <Payload> pada permintaan baru.

Anda dapat mengakses pesan permintaan kustom di kebijakan TetapkanMessage lain yang akan muncul nanti dalam alur. Contoh berikut mendapatkan nilai header user-agent pesan permintaan kustom:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

Video

Tonton video berikut untuk mempelajari kebijakan TetapkanMessage lebih lanjut.

Video Deskripsi
Mengapa Menetapkan Kebijakan Pesan? Pelajari manfaat menggunakan kebijakan TetapkanMessage untuk mengubah permintaan atau respons API tanpa mengubah kode backend.
Menyalin elemen API menggunakan kebijakan TetapkanMessage Salin elemen dari respons atau permintaan API dan buat objek respons atau permintaan baru menggunakan kebijakan TetapkanMessage.
Menghapus elemen API menggunakan kebijakan TetapkanMessage Hapus elemen API dan ubah API sebelum mencapai backend target menggunakan kebijakan TetapkanMessage.
Menambahkan dan menetapkan elemen API menggunakan kebijakan ProvideMessage Ubah permintaan atau respons API dengan menambahkan parameter kueri, header, parameter formulir, atau payload menggunakan kebijakan TetapkanMessage.
Membuat variabel kustom menggunakan kebijakan TetapkanMessage Tetapkan variabel alur kustom menggunakan kebijakan TetapkanMessage dan manfaatkan variabel pada kebijakan lain di proxy API.
Membuat objek permintaan atau respons baru menggunakan kebijakan ProvideMessage Buat objek respons atau permintaan API baru menggunakan kebijakan TetapkanMessage pada runtime API.
Membuat API tiruan menggunakan kebijakan TetapkanMessage Buat REST API tiruan sederhana dengan menambahkan kebijakan TetapkanMessage di alur respons.
Menetapkan atau mengubah payload menggunakan kebijakan TetapkanMessage Konversi permintaan REST menjadi permintaan SOAP dengan menyetel Payload SOAP menggunakan kebijakan TetapkanMessage saat runtime API.

Kode error

Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Edge 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 Perbaiki
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 Edge 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 Tetapkan Pesan:

  • 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 Perbaiki
InvalidIndex Jika indeks yang ditentukan dalam elemen <Copy> dan/atau <Remove> pada kebijakan Tetapkan Pesan 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="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Skema

Setiap jenis kebijakan ditentukan oleh skema XML (.xsd). Untuk referensi, skema kebijakan tersedia di GitHub.

Topik terkait

Contoh kerja kebijakan TetapkanMessage tersedia di contoh Platform API.

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

Untuk melihat cara kerja "set path" dalam kebijakan ServiceCallout, lihat Learn by do example ini dalam contoh GitHub Apigee. Cukup clone repositori dan ikuti petunjuk dalam topik tersebut. Contoh ini menggunakan kebijakan TetapkanMessage untuk menetapkan jalur permintaan, lalu menggunakan kebijakan Pemanggilan Layanan untuk membuat permintaan ke layanan eksternal.