Kebijakan AssignMessage

Halaman ini berlaku untuk Apigee dan Apigee Hybrid.

Lihat dokumentasi Apigee Edge.

ikon kebijakan

Apa

Kebijakan AssignMessage dapat mengubah pesan permintaan atau respons yang ada, atau membuat pesan permintaan atau 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 lain
  • Menghapus header, parameter kueri, parameter formulir, dan payload pesan dari pesan
  • Menetapkan nilai properti dalam pesan

AssignMessage juga memungkinkan Anda menetapkan variabel konteks arbitrer, terlepas dari operasi di atas yang mungkin berlaku untuk pesan.

Dengan AssignMessage, Anda dapat menambahkan, mengubah, atau menghapus properti permintaan atau respons. Atau, Anda dapat menggunakan AssignMessage untuk membuat pesan permintaan atau respons kustom dan meneruskannya ke target alternatif, seperti yang dijelaskan dalam Membuat pesan permintaan kustom.

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

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

Urutan Anda mengatur elemen <Add>, <Copy>, <Set>, dan <Remove> penting. Kebijakan ini menjalankan tindakan tersebut sesuai urutan kemunculannya dalam konfigurasi kebijakan. Jika Anda perlu menghapus semua header, lalu menetapkan header tertentu, Anda harus menyertakan elemen <Remove> sebelum elemen <Set>.

Elemen <AssignMessage>

Menentukan kebijakan AssignMessage.

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

Elemen <AssignMessage> menggunakan sintaksis berikut:

Sintaks

Elemen <AssignMessage> menggunakan sintaksis berikut:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>

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

  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>

  <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

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

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <Authentication>
      <HeaderName>HEADER_NAME</HeaderName>
      <!-- Use either GoogleAccessToken or GoogleIDToken  -->
      <GoogleAccessToken>
        <Scopes>
          <Scope>SCOPE</Scope>
          ...
        </Scopes>
      </GoogleAccessToken>

    ----- or -----
      <GoogleIDToken>
        <Audience ref='FLOW_VARIABLE_NAME>TARGET_URL</Scope>
      </GoogleAccessToken>
    </Authentication>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX"
        variableSuffix="SUFFIX">NEW_PAYLOAD</Payload>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

Kebijakan Default

Contoh berikut menunjukkan setelan default saat Anda menambahkan kebijakan AssignMessage ke alur di UI Apigee. Anda mungkin tidak akan pernah ingin semua elemen konfigurasi ditampilkan di sini.

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

Saat Anda menyisipkan kebijakan AssignMessage baru di UI Apigee, template berisi stub untuk semua kemungkinan operasi. Biasanya, Anda memilih operasi yang ingin dilakukan dengan kebijakan ini dan menghapus elemen turunan lainnya. Misalnya, jika Anda ingin melakukan operasi salin, gunakan elemen <Copy> dan hapus <Add>, <Remove>, dan elemen turunan lainnya dari kebijakan agar lebih mudah dibaca.

Elemen ini memiliki atribut berikut yang umum untuk semua kebijakan:

Atribut Default Wajib? Deskripsi
name T/A Wajib

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

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

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

Tabel berikut memberikan deskripsi umum tentang elemen turunan <AssignMessage>:

Elemen Turunan Wajib? 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. Perhatikan bahwa <Set> juga menyediakan fungsi ini.

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

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

<Set> menggantikan header atau parameter yang sudah ada dalam pesan asli atau menambahkan yang baru jika belum ada.

Elemen turunan lainnya
<AssignTo> Opsional Menentukan pesan mana yang dioperasikan oleh kebijakan AssignMessage. Ini dapat berupa permintaan atau respons standar, atau dapat berupa pesan kustom baru.
<AssignVariable> Opsional Menetapkan nilai ke variabel alur. Jika variabel tidak ada, maka <AssignVariable> akan membuatnya.
<IgnoreUnresolvedVariables> Opsional Menentukan apakah pemrosesan berhenti saat variabel yang belum diselesaikan ditemukan.

Setiap elemen turunan ini dijelaskan di bagian selanjutnya.

Contoh

Contoh berikut menunjukkan beberapa cara Anda dapat menggunakan kebijakan AssignMessage:

1: Tambahkan header

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

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

2: Hapus payload

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

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

3: Mengubah respons

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

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

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

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

Header HTTP yang ditambahkan ke pesan respons oleh kebijakan ini berasal dari variabel yang diisi oleh kebijakan LookupCache. Oleh karena itu, pesan respons yang diubah oleh kebijakan Assign Message ini berisi header HTTP yang menunjukkan apakah hasil telah ditarik dari cache atau tidak. Menetapkan header dalam respons dapat berguna untuk proses debug dan pemecahan masalah.

4: Menetapkan konten dinamis

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

Untuk menyematkan variabel alur dalam payload XML, gabungkan variabel yang ditentukan dalam kurung kurawal, seperti ini: {prefix.name}.

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

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

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

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

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

Anda juga dapat menggunakan kurung kurawal untuk menyisipkan variabel.

5: Hapus parameter kueri

Contoh berikut menghapus parameter kueri apikey dari permintaan:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Sebaiknya hapus parameter kueri apikey dari pesan permintaan saat Anda menggunakan kebijakan VerifyAPIKey untuk autentikasi pengguna. Anda melakukannya untuk mencegah informasi kunci sensitif diteruskan ke target backend.

6: Menetapkan/mendapatkan variabel

Contoh berikut menggunakan tiga kebijakan AssignMessage:

  1. Membuat tiga variabel alur dalam permintaan, dengan nilai statis
  2. Mendapatkan variabel alur secara dinamis dalam kebijakan kedua di alur permintaan
  3. Menetapkannya dalam payload respons
<!-- Policy #1: Set variables in the request -->
<AssignMessage name="AM-set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
</AssignMessage>

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

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

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

Dalam kebijakan kedua, elemen <Ref> mereferensikan variabel sumber, dan 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 kumpulan kebijakan ini:

  1. Tambahkan kebijakan #1 dan #2 ke alur permintaan. Pastikan untuk menempatkan kebijakan #1 sebelum kebijakan #2.
  2. Tambahkan kebijakan ketiga dalam alur respons.
  3. Kebijakan ketiga menggunakan elemen <Set> untuk menambahkan variabel ke respons. Contoh berikut membuat payload XML dalam 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 dengan menyertakannya dalam kurung kurawal.

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

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

    Jika ingin, Anda dapat menyalurkan hasil melalui utilitas seperti xmllint sehingga XML ditampilkan dalam struktur yang diformat dengan baik:

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

    Isi respons akan terlihat seperti berikut:

    
      42
      
        test
        gopher
      
    

7: Mendapatkan header respons ServiceCallout

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

<AssignMessage name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

Untuk mencantumkan semua nilai header, gunakan variabel berikut:

{calloutResponse.header.Set-Cookie.values}

8: Menyimpan dan menghapus parameter formulir, header, parameter kueri

Jika Anda ingin menggunakan <Remove> untuk menghapus header, parameter kueri, atau parameter formulir, tetapi mempertahankan akses ke nilainya nanti dalam alur kebijakan, Anda dapat menyimpan nilainya menggunakan <AssignVariable>.

<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove">
  <DisplayName>AM-StoreAndRemove</DisplayName>
  <AssignVariable>
    <Name>var_grant_type</Name>
    <Ref>request.formparam.grant_type</Ref>
  </AssignVariable>
  <Remove>
    <Headers/>
    <FormParams/>
    <Payload/>
  </Remove>
  <Set>
    <Headers>
      <Header name="Content-Type">application/x-www-form-urlencoded</Header>
      <Header name="Accept">application/json</Header>
      <Header name="Grant-Type">{var_grant_type}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Setiap elemen turunan dalam referensi ini memiliki contoh tambahan. Untuk contoh lainnya, lihat contoh AssignMessage 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 di pesan asli. Perhatikan bahwa <Set> juga menyediakan fungsi ini. Untuk mengubah nilai properti yang ada, gunakan elemen <Set>.

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

Elemen <Add> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut mengubah pesan permintaan dengan mendapatkan nilai tiga parameter string kueri dari permintaan awal dan menyetelnya sebagai parameter formulir pada permintaan endpoint target, lalu menghapus semua parameter string kueri asli:

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut menggunakan elemen <Headers> untuk menambahkan header partner-id ke permintaan yang akan dikirim ke endpoint target:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 3

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh ini menggunakan <Add> dalam preflow permintaan. Jika Anda melihat hasilnya di alat seperti Ringkasan debug, permintaan ke https://example-target.com/get akan menjadi https://example-target.com/get?myParam=42.

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

<FormParams> (anak dari <Add>)

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

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

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut menambahkan satu parameter formulir (answer) dan nilai statis (42) ke permintaan:

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut mendapatkan nilai parameter kueri name dan menambahkannya ke permintaan sebagai parameter formulir, lalu menghapus parameter kueri:

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

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

Contoh 3

Contoh berikut menambahkan beberapa parameter formulir ke permintaan:

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh ini mendapatkan parameter string kueri dari permintaan awal dan menambahkannya sebagai parameter formulir dengan nama yang berbeda. Kemudian, parameter kueri asli akan dihapus. Apigee akan mengirimkan permintaan yang telah diubah ke endpoint target.

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

username=nick&zip_code=90210&default_language=en

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

  • Kata kerja HTTP: POST
  • Jenis pesan: Permintaan
  • Salah satu (atau kedua) hal berikut:
    • Data formulir: Ditetapkan ke beberapa nilai, atau "" (string kosong). Misalnya, dengan curl, tambahkan -d "" ke permintaan Anda.
    • header Content-Length: Setel 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>, Apigee akan menetapkan header Content-Type permintaan ke application/x-www-form-urlencoded sebelum mengirim pesan ke layanan target.

<Headers> (anak 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

Contoh 1

Contoh berikut menambahkan header partner-id ke pesan permintaan, dan menetapkan nilai variabel alur verifyapikey.VAK-1.developer.app.partner-id ke header tersebut.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (anak dari <Add>)

Menambahkan parameter kueri baru ke permintaan. Elemen ini tidak memengaruhi respons.

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

Elemen <QueryParams> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Contoh 1

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • Kata kerja HTTP: GET, POST, PATCH, DELETE
  • Jenis pesan: Permintaan

Selain itu, Anda hanya dapat menetapkan parameter kueri jika atribut type elemen <AssignTo> adalah pesan permintaan. Menyetelnya pada respons tidak akan berpengaruh.

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

<AssignTo>

Menentukan objek mana yang dioperasikan oleh kebijakan AssignMessage. Opsinya adalah:

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

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

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

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

Elemen <AssignTo> menggunakan sintaksis berikut:

Sintaks

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

Contoh 1

Contoh berikut tidak menentukan pesan dalam teks <AssignTo>. Hal ini menyiratkan bahwa kebijakan akan bertindak pada pesan request atau response, bergantung pada tempat kebijakan dijalankan.

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

Jika Anda menentukan createNew="false", dan tidak memberikan nama pesan secara eksplisit, atribut <AssignTo> lainnya tidak relevan. Dalam hal ini, Anda mungkin ingin menghapus elemen <AssignTo> sepenuhnya.

Contoh 2

Contoh berikut membuat objek permintaan baru, yang menimpa objek yang ada:

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

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

Anda dapat mengakses objek permintaan baru dalam kebijakan lain di alur nanti, 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">MyRequestObject</AssignTo>
  ...
</AssignMessage>

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

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

Tabel berikut menjelaskan atribut <AssignTo>:

Atribut Deskripsi Wajib? Jenis
createNew

Menentukan apakah kebijakan ini membuat pesan baru saat menetapkan nilai.

Jika true, kebijakan akan membuat variabel baru dari jenis yang ditentukan oleh type (baik request maupun 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:

  • Jika <AssignTo> dapat menyelesaikan nama variabel ke permintaan atau respons, maka pemrosesan akan dilanjutkan. Misalnya, jika kebijakan berada dalam alur permintaan, variabelnya adalah objek permintaan. Jika kebijakan ada dalam respons, variabelnya adalah objek respons.
  • Jika <AssignTo> tidak dapat diselesaikan, atau diselesaikan ke jenis non-pesan, maka kebijakan akan menampilkan error.

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

  • Jika <AssignTo> diselesaikan ke pesan, pemrosesan akan dilanjutkan ke langkah berikutnya.
  • Jika <AssignTo> tidak dapat diselesaikan, atau diselesaikan ke jenis non-pesan, variabel baru dengan jenis yang ditentukan dalam type akan dibuat.
Opsional Boolean
transport

Menentukan jenis transportasi 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 menghilangkan atribut ini, Apigee akan membuat permintaan atau respons, bergantung pada tempat kebijakan ini dijalankan dalam alur.

Opsional String

<AssignVariable>

Menetapkan nilai ke variabel alur tujuan (seperti variabel yang nilainya ditetapkan oleh kebijakan AssignMessage). Jika variabel alur tidak ada, <AssignVariable> akan membuatnya. Anda dapat menggunakan beberapa elemen AssignVariable dalam kebijakan AssignMessage. Aturan tersebut dijalankan sesuai urutan kemunculannya dalam konfigurasi kebijakan.

Nilai Default T/A
Wajib? Opsional
Jenis Jenis kompleks
Elemen Induk <AssignMessage>
Elemen Turunan <Name> (wajib)
<PropertySetRef>
<Ref>
<ResourceURL>
<Template>
<Value>

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

  • String literal: Gunakan elemen turunan <Value> untuk menentukan 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 daftar lengkap variabel alur yang dapat digunakan sebagai sumber, lihat Referensi variabel alur.
  • Set properti: Gunakan elemen turunan <PropertySetRef> untuk mengambil nilai dari pasangan nama/kunci set properti dan menyimpannya dalam variabel alur. Memungkinkan Anda mengakses set properti secara dinamis.
  • URL resource: Gunakan elemen turunan <ResourceURL> untuk menentukan URL untuk resource teks, berjenis XSL, XSD, WSDL, JavaScript, atau Spesifikasi OpenAPI. Tindakan ini akan menetapkan konten resource ke dalam variabel alur bernama.
  • Template pesan: Gunakan elemen turunan <Template> untuk menentukan template pesan untuk variabel alur tujuan.

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

Elemen <AssignVariable> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>
</AssignMessage>

Gunakan elemen <Ref> untuk menentukan variabel sumber. Jika variabel yang dirujuk oleh <Ref> tidak dapat diakses, Apigee akan menggunakan nilai yang ditentukan oleh elemen <Value>. Jika Anda menentukan <Template>, elemen ini akan lebih diprioritaskan daripada elemen saudara <Ref> dan <Value>.

Contoh 1

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

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

Contoh 2

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

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

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

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

Contoh 3

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

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

Contoh 4

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

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

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

<Name> (anak dari <AssignVariable>)

Menentukan nama variabel alur tujuan - variabel yang nilainya ditetapkan oleh kebijakan AssignMessage. Jika variabel yang disebutkan dalam <Name> 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:

Sintaks

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

Contoh 1

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

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

Jika myvar tidak ada, <AssignVariable> akan membuatnya.

<PropertySetRef> (anak dari <AssignVariable>)

Elemen ini memungkinkan Anda mengambil nilai pasangan nama/kunci set properti secara dinamis. Untuk mempelajari kumpulan properti, lihat artikel Menggunakan kumpulan properti.

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

Kumpulan properti terdiri dari pasangan nama/kunci. Misalnya: propset1.id=12345, dengan propset1 adalah nama set properti, id adalah kunci, dan 12345 adalah nilai kunci.

Elemen turunan PropertySetRef memungkinkan Anda memilih nama dan/atau kunci set properti secara dinamis. Misalkan Anda memiliki 200 aturan pemilihan rute dalam file set properti. Anda dapat mengakses aturan set properti sebagai berikut, dengan routingrules adalah nama set properti dan rule1, rule2, rulen adalah kunci:

propertyset.routingrules.rule1
propertyset.routingrules.rule2
propertyset.routingrules.rulen

Untuk mengakses properti ini dalam alur proxy API, Anda harus mengetahui aturan mana yang ingin dipilih pada waktu desain. Namun, asumsikan nama aturan ada di header atau payload permintaan. Salah satu cara untuk memilih aturan adalah dengan menggunakan kebijakan JavaScript dengan kode seperti berikut:

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

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

Anda dapat menggunakan campuran variabel alur dan nilai string literal dalam elemen <PropertySetRef>. Lihat contoh untuk mengetahui detail selengkapnya.

Elemen <PropertySetRef> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Contoh 1

Contoh ini menetapkan nilai dari kunci set properti ke variabel alur. Dalam hal ini, nama set properti diperoleh dari header propset_name, kunci diberikan di header propset_key, dan nilai yang ditetapkan ke kunci disimpan dalam variabel flow_variable.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Anda dapat menggunakan kombinasi variabel alur dan string literal dalam elemen <PropertySetRef>.

Contoh 2

Contoh ini menetapkan nilai dari kunci set properti ke variabel alur menggunakan nama kunci tetap (string literal). Dalam hal ini, nama set properti diperoleh dari header propset_name, kuncinya adalah string literal key1, dan nilai yang ditetapkan ke kunci disimpan dalam variabel flow_variable.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Anda dapat menggunakan kombinasi variabel alur dan string literal dalam elemen <PropertySetRef>.

<Ref> (anak 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> sebagai gantinya.

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

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

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

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

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

Elemen <Ref> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <Ref>SOURCE_VARIABLE</Ref>
  </AssignVariable>
</AssignMessage>

Contoh 1

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

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

Dalam contoh ini, Apigee tidak memiliki default (atau nilai penggantian) yang ditentukan untuk penugasan.

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 salah bentuk, Apigee akan menetapkan nilai ErrorOnCopy ke variabel baru.

Contoh 3

Kasus penggunaan umum untuk <AssignVariable> adalah menetapkan nilai default kueri parameter, header, atau nilai lain yang dapat diteruskan dengan permintaan. Misalnya, Anda membuat proxy API cuaca dengan permintaan yang menggunakan satu parameter kueri bernama w. Parameter ini berisi ID kota yang ingin Anda ketahui cuacanya. URL permintaan memiliki format:

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

Untuk menentukan nilai default untuk w, buat kebijakan 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 alur bernilai null, yang berarti parameter kueri w dihapus 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 membuat proxy API menampilkan hasil yang valid.

Nilai <Ref> harus berupa variabel alur, seperti properti objek request, response, atau target, atau nama variabel alur kustom.

Jika Anda menentukan variabel alur yang tidak ada untuk nilai <Ref>, dan nilai <IgnoreUnresolvedVariables> adalah false, Apigee akan menampilkan error.

<ResourceURL> (anak dari <AssignVariable>)

Menentukan URL resource teks sebagai sumber penetapan variabel. Apigee memuat variabel alur yang ditentukan dalam <Name> dengan konten resource yang dirujuk. Resource dapat berupa jenis XSD, XSL, WSDL, JavaScript, Kumpulan Properti, atau Spesifikasi OpenAPI.

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

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

Elemen <ResourceURL> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
  </AssignVariable>
</AssignMessage>
      

Nilai teks mengambil nilai string, dan ditafsirkan sebagai template pesan. Salah satu dari berikut ini valid:

jsc://my-js-file.js
wsdl://{variable-goes-here}
{variable-goes-here}

Contoh 1

Contoh berikut menetapkan nilai resource JSON, yang dimuat ke dalam proxy di folder jsc, ke dalam variabel alur assigned-variable:

<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>jsc://settings.json</ResourceURL>
  </AssignVariable>
</AssignMessage>

Contoh 2

Contoh berikut menetapkan nilai resource Spesifikasi OpenAPI, yang dimuat ke dalam proxy di folder oas, ke dalam variabel alur assigned-variable, lalu menetapkan nilai tersebut sebagai Payload dalam isi respons:

<AssignMessage name='AM-Response'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>oas://Fulfillment.yaml</ResourceURL>
  </AssignVariable>
  <Set>
    <Payload contentType='application/yaml'>{assigned-variable}</Payload>
  </Set>
</AssignMessage>

<Template> (anak dari <AssignVariable>)

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

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

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

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

Elemen <Template> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
  </AssignVariable>
</AssignMessage>

Contoh 1

Contoh berikut menggunakan sintaksis pembuatan template pesan untuk menggabungkan dua variabel konteks dengan string literal (tanda hubung) di antaranya:

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

Contoh 2

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

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

Contoh 3

Contoh berikut menentukan variabel alur dan nilai teks. Dalam hal ini, jika variabel yang dirujuk tidak null, nilai tersebut akan digunakan sebagai template. Jika nilai yang direferensikan adalah null, maka nilai teks (dalam hal ini, {system.uuid}-{messageid}) akan digunakan sebagai template. Pola ini berguna untuk memberikan nilai override, yang dalam beberapa kasus Anda ingin mengganti template default (bagian teks) dengan nilai yang ditetapkan secara dinamis. Misalnya, pernyataan kondisional dapat mengambil nilai dari peta nilai kunci dan menetapkan variabel yang dirujuk ke nilai tersebut:

<AssignMessage name='AV-template-with-fallback'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (anak dari <AssignVariable>)

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

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

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

Elemen <Value> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>
</AssignMessage>

Contoh 1

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

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

Contoh 2

Contoh berikut menetapkan nilai variabel 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 tempat kebijakan ini dijalankan dalam alur.

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

Jika Anda tidak menentukan elemen turunan di bawah elemen <Copy>, semua bagian pesan sumber yang ditentukan akan disalin.

Elemen <Copy> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
    <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</AssignMessage>
  

Contoh 1

Contoh berikut menyalin header, tiga parameter formulir, jalur, dan semua parameter kueri dari pesan request ke permintaan kustom baru bernama newRequest:

<AssignMessage name="AM-copy-1">
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1"/>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1"/>
      <FormParam name="Form_Param_Name_2"/>
      <FormParam name="Form_Param_Name_3"/>
    </FormParams>
    <Path>true</Path>
    <QueryParams/>
  </Copy>
</AssignMessage>

Karena elemen seperti <Payload> dan <Verb> tidak ada, kebijakan tidak menyalin bagian pesan tersebut.

Contoh 2

Contoh berikut pertama-tama menghapus semua yang ada dalam pesan response, lalu menyalin semua nilai dari pesan lain yang disebut secondResponse ke dalam pesan response:

<AssignMessage name='AM-Copy-Response'>
  <AssignTo>response</AssignTo>
  <!-- first remove any existing values -->
  <Remove/>
  <!-- then copy everything from the designated message -->
  <Copy source="secondResponse"/>
</AssignMessage>

Elemen <Copy> memiliki satu atribut:

Atribut Deskripsi Wajib? Jenis
sumber

Menentukan objek sumber salinan.

  • Jika source tidak ditentukan, nilai defaultnya adalah message, yang mengambil nilai yang berbeda bergantung pada alur tempat kebijakan dijalankan. Jika kebijakan dijalankan dalam alur permintaan, variabel message akan merujuk ke objek request. Jika kebijakan dijalankan dalam alur respons, maka variabel message merujuk ke objek response.
  • Jika variabel yang ditentukan dalam atribut source tidak dapat diselesaikan, atau diselesaikan ke jenis non-pesan, <Copy> tidak akan berpengaruh.
  • Pastikan nilai yang Anda tentukan untuk source berbeda dengan pesan tujuan, baik itu pesan tujuan default maupun tujuan yang ditentukan secara eksplisit dengan <AssignTo>. Jika source sama dengan pesan tujuan, <Copy> tidak akan berpengaruh.
Opsional String

<FormParams> (anak dari <Copy>)

Menyalin parameter formulir dari permintaan yang ditentukan oleh atribut source elemen <Copy> ke permintaan yang ditentukan oleh elemen <AssignTo>. Elemen ini tidak memengaruhi 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menyalin satu parameter formulir dari permintaan ke permintaan kustom MyCustomRequest:

<AssignMessage name="AM-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="AM-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="AM-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="AM-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 dari f3. Jika f3 hanya memiliki satu nilai, maka nilai tersebut tidak disalin.

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

  • Jenis Pesan untuk sumber dan tujuan adalah permintaan
  • Kata kerja HTTP untuk sumber dan tujuan adalah POST atau PUT
  • Pesan sumber memiliki header Content-Type yang ditetapkan ke application/x-www-form-urlencoded.

Saat Anda menyalin <FormParams>, <Copy> menetapkan header Content-Type dalam pesan tujuan (yang ditetapkan oleh elemen <AssignTo>) ke application/x-www-form-urlencoded.

<Headers> (anak 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <!-- Copy all headers -->
    <Headers/>
    <!-- or, copy specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Contoh 1

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

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

Contoh 2

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

<AssignMessage name="AM-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 sintaks berikut:

<AssignMessage name="AM-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 dari h3. Jika h3 hanya memiliki satu nilai, maka nilai tersebut tidak disalin.

<Path> (anak dari <Copy>)

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

Jika true, kebijakan ini 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menunjukkan bahwa AssignMessage 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 dapat menggunakan <Copy>/<Path> hanya jika kriteria berikut terpenuhi:

  • Jenis Pesan untuk sumber dan tujuan adalah permintaan

<Payload> (anak dari <Copy>)

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

Jika true, kebijakan ini 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Contoh 1

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

<AssignMessage name="AM-copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

<QueryParams> (anak 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 memengaruhi 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Contoh 1

Contoh berikut menyalin parameter kueri my_param dari permintaan ke objek permintaan kustom 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 dalam 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 sintaks 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 dari qp3. Jika qp3 hanya memiliki satu nilai, maka nilai tersebut tidak disalin.

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

  • Kata kerja HTTP: GET, PUT, POST, PATCH, DELETE
  • Jenis Pesan untuk sumber dan tujuan adalah permintaan

<StatusCode> (anak dari <Copy>)

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

Jika true, kebijakan ini 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Contoh 1

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

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

Anda hanya dapat menggunakan <StatusCode> jika pesan sumber dan tujuan berjenis respons.

Penggunaan <StatusCode> yang umum adalah untuk menetapkan kode status respons proxy ke nilai yang berbeda dari yang diterima dari target.

<Verb> (anak dari <Copy>)

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

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

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

Elemen <Verb> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Contoh 1

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

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

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

  • Jenis Pesan untuk sumber dan tujuan adalah permintaan

<Version> (anak dari <Copy>)

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

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

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

Elemen <Version> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Contoh 1

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

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

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

  • Jenis Pesan untuk sumber dan tujuan adalah permintaan

<DisplayName>

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

Elemen <DisplayName> umum untuk semua kebijakan.

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

Elemen <DisplayName> menggunakan sintaksis berikut:

Sintaks

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Contoh

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

Elemen <DisplayName> tidak memiliki atribut atau elemen turunan.

<IgnoreUnresolvedVariables>

Menentukan apakah pemrosesan berhenti saat variabel yang belum diselesaikan ditemukan.

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

Tetapkan ke true untuk mengabaikan variabel yang belum diselesaikan dan melanjutkan pemrosesan; jika tidak, tetapkan ke false. Nilai default-nya adalah false.

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

Elemen <IgnoreUnresolvedVariables> menggunakan sintaksis berikut:

Sintaks

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

Contoh 1

Contoh berikut menetapkan <IgnoreUnresolvedVariables> ke true:

<AssignMessage name="AM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

Karena <IgnoreUnresolvedVariables> disetel ke true, jika variabel possibly-defined-variable tidak ditentukan, kebijakan ini tidak akan menampilkan kesalahan.

<Remove>

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

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

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

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

Elemen <Remove> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus isi pesan dari respons:

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

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

Contoh 2

Contoh berikut menghapus semua parameter formulir dan parameter kueri dari objek request:

<AssignMessage name="AM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 3

Contoh berikut menghapus semua hal dari objek pesan:

<AssignMessage name="AM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</AssignMessage>

Biasanya, Anda hanya akan melakukannya jika akan menggunakan elemen <Set> atau elemen <Copy> untuk menetapkan beberapa nilai pengganti ke dalam pesan.

<FormParams> (anak dari <Remove>)

Menghapus parameter formulir yang ditentukan dari permintaan. Elemen ini tidak memengaruhi 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all form parameters -->
    <FormParams/>
    <!-- or, remove specific form parameters by name -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME"/>
      <!-- or -->
      <FormParam name="FORMPARAM_NAME">[false|true]</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus tiga parameter formulir dari permintaan:

<AssignMessage name="AM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut menghapus semua parameter formulir dari permintaan:

<AssignMessage name="AM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 3

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

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

<Headers> (anak 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all headers -->
    <Headers/>
    <!-- or, remove specific headers by name -->
    <Headers>
      <Header name="HEADER_NAME"/>
      <!-- or -->
      <Header name="HEADER_NAME">[false|true]</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus header user-agent dari permintaan:

<AssignMessage name="AM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut menghapus semua header dari permintaan:

<AssignMessage name="AM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 3

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

<AssignMessage name="AM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

<Payload> (anak dari <Remove>)

Menentukan apakah <Remove> 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Contoh 1

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

<AssignMessage name="AM-remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (anak dari <Remove>)

Menghapus parameter kueri yang ditentukan dari permintaan. Elemen ini tidak memengaruhi 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Remove all query parameters -->
    <QueryParams/>
    <!-- or, remove specific query parameters by name -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME"/>
      <!-- or -->
      <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Contoh 1

Contoh berikut menghapus parameter kueri apikey dari permintaan:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut menghapus semua parameter kueri dari permintaan:

<AssignMessage name="AM-remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 3

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

<AssignMessage name="AM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

  • Kata kerja HTTP: GET, POST, PATCH, DELETE
  • Jenis pesan: Permintaan

<Set>

Menetapkan informasi dalam pesan permintaan atau respons, yang ditentukan oleh elemen <AssignTo>. <Set> akan mengganti header atau parameter kueri atau formulir yang sudah ada dalam pesan asli atau menambahkan yang baru jika belum ada.

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

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

Elemen <Set> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Authentication>
      <HeaderName>HEADER_NAME</HeaderName>
      <!-- Use either GoogleAccessToken or GoogleIDToken  -->
      <GoogleAccessToken>
        <Scopes>
          <Scope>SCOPE</Scope>
          ...
        </Scopes>
      </GoogleAccessToken>

    ----- or -----
      <GoogleIDToken>
        <Audience ref='FLOW_VARIABLE_NAME>TARGET_URL</Scope>
      </GoogleAccessToken>
    </Authentication>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX"
        variableSuffix="SUFFIX">NEW_PAYLOAD</Payload>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan header tertentu. Jika kebijakan ini dilampirkan dalam alur Permintaan, sistem upstream akan dapat menerima header tambahan yang tidak disertakan dalam permintaan masuk asli.

<AssignMessage name="AM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Contoh berikut mengganti payload untuk respons, serta header Content-Type.

<AssignMessage name="AM-Overwrite-Payload">
  <Set>
    <Payload contentType="application/json">{ "status" : 42 }</Payload>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

<Authentication> (turunan dari <Set>)

Membuat token akses Google OAuth 2.0 atau token ID OpenID Connect yang dikeluarkan Google dan menyetelnya ke header Authorization. Hal ini berguna saat proxy perlu melakukan panggilan yang diautentikasi ke layanan Google dan layanan kustom yang berjalan di produk Google Cloud tertentu, seperti Cloud Functions dan Cloud Run. Penggunaan elemen ini memerlukan langkah penyiapan dan deployment yang dijelaskan dalam Menggunakan autentikasi Google. Dengan penyiapan yang tepat, kebijakan akan membuat token untuk Anda dan menambahkannya ke header yang sesuai dalam permintaan.

Elemen turunan, GoogleAccessToken dan GoogleIDToken, memungkinkan Anda mengonfigurasi kebijakan untuk membuat token Google OAuth atau OpenID Connect. Anda memilih salah satu elemen turunan ini berdasarkan persyaratan layanan yang ingin Anda panggil.

Nilai Default T/A
Wajib? Opsional
Jenis Jenis kompleks
Elemen Induk <Set>
Elemen Turunan <HeaderName>
<GoogleAccessToken>
<GoogleIdToken>

Elemen Authentication menggunakan sintaksis berikut:

Sintaks

<AssignMessage>
  ...
  <Set>
    <Authentication>
      <HeaderName>HEADER_NAME</HeaderName>
      --EITHER--
      <GoogleAccessToken>
        <Scopes>
          <Scope>SCOPE</Scope>
            ...
        </Scopes>
      <GoogleAccessToken>

      --OR--
      <GoogleIDToken>
        <Audience ref="FLOW_VARIABLE">TARGET_URL</Audience>
      </GoogleIDToken>

    </Authentication>
  </Set>
  ...
</AssignMessage>

Menggunakan Token Akses

Contoh berikut menunjukkan elemen GoogleAccessToken:

<Authentication>
  <GoogleAccessToken>
    <Scopes>
      <Scope>https://www.googleapis.com/auth/cloud-platform</Scope>
    </Scopes>
  </GoogleAccessToken>
</Authentication>

Menggunakan Token ID

Contoh berikut menunjukkan elemen GoogleIDToken:

<Authentication>
  <GoogleIDToken>
    <Audience>https://httpserver0-bar.run.app</Audience>
  </GoogleIDToken>
</Authentication>

Menggunakan HeaderName

Contoh berikut menunjukkan elemen HeaderName:

  <Authentication>
    <HeaderName>Authorization</HeaderName>
    <GoogleAccessToken>
      <Scopes>
        <Scope>https://www.googleapis.com/auth/cloud-platform</Scopes>
      </Scopes>
    </GoogleAccessToken>
  </Authentication>

<HeaderName> (turunan <Authentication>)

Secara default, jika konfigurasi Autentikasi ada, Apigee akan membuat token pembawa dan menyisipkannya ke header Authorization dalam pesan yang dikirim ke sistem target. Elemen HeaderName memungkinkan Anda menentukan nama header lain untuk menyimpan token pembawa tersebut. Header Authorization, jika ada, tidak diubah dan juga dikirim dalam permintaan.

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

Elemen HeaderName menggunakan sintaksis berikut:

Sintaks

<AssignMessage>
...
  <Authentication>
    <HeaderName>HEADER_NAME</HeaderName>
    <GoogleAccessToken>
      ...
    </GoogleAccessToken>
  </Authentication>
  ...
</AssignMessage>

Dengan string statis

Dalam contoh ini, token pembawa yang dihasilkan ditambahkan, secara default, ke header bernama Authorization yang dikirim ke sistem target. Header Authorization, jika ada, tidak diubah dan juga dikirim dalam permintaan.

<Authentication>
  <HeaderName>Authorization</HeaderName>
  <GoogleAccessToken>
    <Scopes>
      <Scope>https://www.googleapis.com/auth/cloud-platform</Scope>
    </Scopes>
  </GoogleAccessToken>
</Authentication>

Dengan referensi variabel

Dalam contoh ini, token pembawa yang dihasilkan ditambahkan, secara default, ke header bernama Authorization yang dikirim ke sistem target. Jika my-variable memiliki nilai, nilai tersebut akan digunakan, bukan string default. Header Authorization, jika ada, tidak diubah dan juga dikirim dalam permintaan.

<Authentication>
  <HeaderName ref='my-variable'>Authorization</HeaderName>
  <GoogleAccessToken>
    <Scopes>
      <Scopes>https://www.googleapis.com/auth/cloud-platform</Scopes>
    </Scopes>
  >/GoogleAccessToken>
</Authentication>

<GoogleAccessToken> (turunan dari <Authentication>)

Membuat token Google OAuth 2.0 untuk melakukan panggilan yang diautentikasi ke layanan Google. Token OAuth Google dapat digunakan untuk memanggil berbagai jenis layanan Google, seperti Cloud Logging dan Secret Manager.

Nilai Default T/A
Wajib? Elemen turunan GoogleAccessToken atau GoogleIDToken harus ada.
Jenis String
Elemen Induk <Authentication>
Elemen Turunan <Scopes>

Elemen GoogleAccessToken menggunakan sintaksis berikut:

Sintaks

<AssignMessage>
...
  <Authentication>
    <GoogleAccessToken>
      <Scopes>
        <Scope>SCOPE_1</Scope>
        ...
      </Scopes>
    >/GoogleAccessToken>
  </Authentication>
  ...
</AssignMessage>

Contoh 1

Contoh berikut menunjukkan elemen GoogleAccessToken:

<Authentication>
  <GoogleAccessToken>
    <Scopes>
      <Scope>https://www.googleapis.com/auth/cloud-platform</Scopes>
    </Scopes>
  </GoogleAccessToken>
</Authentication>

<Scopes> (turunan dari <GoogleAccessToken>)

Mengidentifikasi cakupan yang akan disertakan dalam token akses OAuth 2.0. Untuk mengetahui informasi selengkapnya, lihat Cakupan OAuth 2.0 untuk Google API. Anda dapat menambahkan satu atau beberapa elemen turunan <Scope> di bawah elemen ini.

Nilai Default T/A
Wajib? Wajib
Jenis String
Elemen Induk <GoogleAccessToken>
Elemen Turunan <Scope>

Elemen Scopes menggunakan sintaksis berikut:

  <Scopes>
    <Scope>SCOPE_1</Scope>
    <Scope>SCOPE_2</Scope>
    ...
  </Scopes>

<Scope> (turunan <Scopes>)

Menentukan cakupan Google API yang valid. Untuk mengetahui informasi selengkapnya, lihat Cakupan OAuth 2.0 untuk Google API.

Nilai Default T/A
Wajib? Diperlukan setidaknya 1 nilai.
Jenis String
Elemen Induk <Scopes>
Elemen Turunan Tidak ada

Elemen Scope menggunakan sintaksis berikut:

  <Scope>SCOPE_1</Scope>

<GoogleIDToken> (turunan dari <GoogleAccessToken>)

Membuat token OpenID Connect yang dikeluarkan Google untuk melakukan panggilan terautentikasi ke layanan Google.

Nilai Default T/A
Wajib? Elemen turunan GoogleAccessToken atau GoogleIDToken harus ada.
Jenis String
Elemen Induk <Authentication>
Elemen Turunan <Audience>

Elemen GoogleIDToken menggunakan sintaksis berikut:

Sintaks

<AssignMessage>
...
  <Authentication>
    <GoogleIDToken>
        <Audience ref="FLOW_VARIABLE_NAME">TARGET_URL</Audience>
    </GoogleIDToken>
  </Authentication>
</AssignMessage>

Contoh 1

Contoh berikut menunjukkan elemen GoogleIDToken:

<Authentication>
  <GoogleIDToken>
      <Audience>https://httpserver0-bar.run.app</Audience>
  </GoogleIDToken>
</Authentication>

<Audience> (turunan dari <GoogleAccessToken>)

Audiens untuk token autentikasi yang dibuat, seperti API atau akun yang diberi akses oleh token.

Jika nilai Audience kosong atau variabel ref tidak berubah menjadi nilai yang valid, dan useTargetUrl adalah true, maka URL target (tidak termasuk parameter kueri) digunakan sebagai audiens. Secara default, useTargetUrl adalah false.

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

Elemen Audience menggunakan sintaksis berikut:

  <Audience>TARGET_URL</Audience>

or:

  <Audience ref='FLOW_VARIABLE_NAME'/>

<FormParams> (anak dari <Set>)

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

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

Elemen <FormParams> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Contoh 1

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

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

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

  • Verba HTTP: POST
  • Jenis pesan: Permintaan

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

Saat Anda menggunakan <Set> dengan <FormParams>, Apigee akan mengubah Content-Type pesan menjadi application/x-www-form-urlencoded.

<Headers> (anak dari <Set>)

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

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

Elemen <Headers> menggunakan sintaksis berikut:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan header x-ratelimit-remaining ke nilai variabel ratelimit.Quota-1.available.count:

<AssignMessage name="AM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

Jika Anda menentukan header kosong dalam kebijakan (<Set><Headers/></Set>), kebijakan tidak akan menetapkan header apa pun. Hal ini akan memiliki efek yang sama dengan menghilangkan <Headers>.

<Path> (anak dari <Set>)

<Payload> (anak dari <Set>)

Mendefinisikan isi pesan untuk permintaan atau respons, yang ditentukan oleh elemen <AssignTo>. Payload dapat berupa jenis konten 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:

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX"
        variableSuffix="SUFFIX">NEW_PAYLOAD</Payload>
  </Set>
</AssignMessage>

Contoh 1

Contoh berikut menetapkan payload teks biasa:

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

Contoh 2

Contoh berikut menetapkan payload JSON:

<AssignMessage name="AM-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 mengapit nama variabel dalam tanda kurung kurawal:

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

Di Apigee versi lama—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 pemisah, dan menggunakannya untuk membungkus nama variabel, seperti berikut:

<AssignMessage name="AM-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> dianggap sebagai template pesan. Artinya, kebijakan AssignMessage mengganti variabel yang diapit tanda kurung kurawal dengan nilai variabel yang dirujuk saat runtime.

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

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

Tabel berikut menjelaskan atribut <Payload>:

Atribut Deskripsi Kehadiran Jenis
contentType

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

Opsional String
variablePrefix Secara opsional menentukan pemisah awal pada variabel alur. Nilai defaultnya adalah "{". Untuk informasi selengkapnya, lihat Referensi variabel alur. Opsional Char
variableSuffix Secara opsional menentukan pembatas akhir pada variabel alur. Nilai defaultnya adalah "}". Untuk informasi selengkapnya, lihat Referensi variabel alur. Opsional Char

<QueryParams> (anak dari <Set>)

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

Sintaks

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

Contoh 1

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

<AssignMessage name="AM-set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

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

  • Kata kerja HTTP: GET, PUT, POST, PATCH, DELETE
  • Jenis pesan: Permintaan

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

<StatusCode> (anak dari <Set>)

Menetapkan kode status pada respons. Elemen ini tidak berpengaruh pada permintaan.

Nilai Default '200' (jika atribut createNew <AssignTo> ditetapkan ke 'true')
Wajib? Opsional
Jenis String atau VARIABLE
Elemen Induk <Set>
Elemen Turunan Tidak ada

Elemen <StatusCode> menggunakan sintaksis berikut:

Sintaks

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

Contoh 1

Contoh berikut menetapkan kode status sederhana:

<AssignMessage name="AM-set-statuscode-404">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

Contoh 2

Konten <StatusCode> dianggap sebagai template pesan. Artinya, nama variabel yang diapit kurung kurawal akan diganti saat runtime dengan nilai variabel yang dirujuk, seperti yang ditunjukkan contoh berikut:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Respons

<Verb> (anak dari <Set>)

Menetapkan kata kerja HTTP pada permintaan. Elemen ini tidak memengaruhi respons.

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

Elemen <Verb> menggunakan sintaksis berikut:

Sintaks

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

Contoh 1

Contoh berikut menetapkan kata kerja sederhana pada permintaan:

<AssignMessage name="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Contoh 2

Konten <Verb> dianggap sebagai template pesan. Artinya, nama variabel yang diapit kurung kurawal akan diganti saat runtime dengan nilai variabel yang dirujuk.

Contoh berikut menggunakan variabel untuk mengisi kata kerja:

<AssignMessage name="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

  • Jenis pesan: Permintaan

<Version> (anak dari <Set>)

Menetapkan versi HTTP pada permintaan. Elemen ini tidak memengaruhi respons.

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

Elemen <Version> menggunakan sintaksis berikut:

Sintaks

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

Contoh 1

Contoh berikut menetapkan nomor versi ke 1.1:

<AssignMessage name="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

Contoh 2

Berikut menggunakan variabel dalam tanda kurung kurawal untuk menetapkan nomor versi:

<AssignMessage name="AM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

Konten <Version> dianggap sebagai template pesan. Artinya, nama variabel yang diapit tanda kurung kurawal akan diganti saat runtime dengan nilai variabel yang dirujuk.

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

  • Jenis pesan: Permintaan

Membuat pesan permintaan kustom

Anda dapat menggunakan AssignMessage 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> dalam kebijakan AssignMessage Anda. Setel createNew ke true dan tentukan nama pesan baru di isi elemen, seperti yang ditunjukkan contoh berikut:

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

Secara default, Apigee tidak melakukan apa pun dengan pesan permintaan kustom. Setelah membuatnya, Apigee akan melanjutkan alur dengan permintaan asli. Untuk menggunakan permintaan kustom, tambahkan kebijakan seperti kebijakan ServiceCallout ke proxy Anda, dan secara eksplisit mereferensikan pesan permintaan yang baru dibuat dalam konfigurasi untuk kebijakan tersebut. Dengan demikian, Anda dapat meneruskan permintaan kustom ke endpoint layanan eksternal.

Contoh berikut membuat pesan permintaan kustom:

Contoh 1

Contoh berikut membuat objek permintaan kustom dengan AssignMessage:

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

Contoh ini:

  • Membuat objek pesan permintaan baru bernama MyCustomRequest.
  • Di MyCustomRequest, kebijakan ini:
    • Menyalin nilai header HTTP user-agent dari permintaan masuk ke pesan baru. Karena <Copy> tidak menentukan atribut source, Apigee akan menggunakan pesan request sebagai sumber untuk menyalin dari.
    • Menetapkan parameter kueri address pada pesan kustom ke nilai parameter kueri addy permintaan masuk.
    • Menetapkan kata kerja HTTP ke GET.
  • Menetapkan <IgnoreUnresolvedVariables> ke false. Jika <IgnoreUnresolvedVariables> adalah false, jika salah satu variabel yang dirujuk dalam konfigurasi kebijakan tidak ada, Apigee akan memasuki status error dalam alur API.

Contoh 2

Berikut contoh lain yang menunjukkan cara membuat objek permintaan kustom dengan AssignMessage:

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

Contoh ini membuat permintaan kustom baru bernama partner.request. Kemudian, setel <Verb> dan <Payload> pada permintaan baru.

Anda dapat mengakses berbagai properti pesan kustom dalam kebijakan AssignMessage lain yang terjadi kemudian dalam alur. Contoh berikut mendapatkan nilai header dari respons kustom bernama, dan menempatkannya ke dalam header baru dalam pesan permintaan:

<AssignMessage name="AM-Copy-Custom-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</AssignMessage>

Kode error

Bagian ini menjelaskan kode error dan pesan error yang ditampilkan serta variabel error yang ditetapkan oleh Apigee saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan error untuk menangani error. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani error.

Error runtime

Error ini dapat terjadi saat kebijakan dijalankan.

Kode kerusakan Status HTTP Penyebab Perbaiki
steps.assignmessage.SetVariableFailed 500 Kebijakan tidak dapat menetapkan variabel. Lihat string error untuk nama variabel yang belum terselesaikan.
steps.assignmessage.VariableOfNonMsgType 500

Error ini terjadi jika atribut source di elemen <Copy> ditetapkan ke variabel yang bukan dari jenis message.

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

steps.assignmessage.UnresolvedVariable 500

Error ini terjadi jika variabel yang ditentukan dalam kebijakan AssignMessage adalah:

  • Di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan 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> dari kebijakan AssignMessage adalah 0 atau angka negatif, deployment Proxy API akan gagal.
InvalidVariableName Jika elemen turunan <Name> kosong atau tidak ditentukan dalam elemen <AssignVariable>, deployment proxy API akan gagal karena tidak ada nama variabel yang valid untuk menetapkan nilai. Nama variabel yang valid wajib diisi.
InvalidPayload Payload yang ditentukan dalam kebijakan tidak valid.

Variabel error

Variabel ini ditetapkan saat kebijakan ini memicu error saat runtime. Untuk mengetahui informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.

Variabel Dari mana Contoh
fault.name="FAULT_NAME" FAULT_NAME adalah nama error, seperti yang tercantum dalam tabel Runtime errors di atas. Nama error adalah bagian terakhir dari kode error. fault.name Matches "UnresolvedVariable"
assignmessage.POLICY_NAME.failed POLICY_NAME adalah nama kebijakan yang ditentukan pengguna yang menampilkan error. 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 error

<FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Skema

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

Topik terkait

Contoh kebijakan Working AssignMessage tersedia di contoh Platform API.

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

Untuk melihat set path yang diterapkan dalam kebijakan ServiceCallout, lihat contoh Belajar sambil melakukan ini dalam contoh Apigee GitHub. Cukup clone repositori dan ikuti petunjuk dalam topik tersebut. Contoh ini menggunakan AssignMessage untuk menetapkan jalur permintaan, lalu menggunakan kebijakan ServiceCallout untuk membuat permintaan ke layanan eksternal.