Referensi konfigurasi proxy API

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat dokumentasi Apigee Edge.

Sebagai developer yang menggunakan Apigee, aktivitas pengembangan utama Anda mencakup mengonfigurasi proxy API yang berfungsi sebagai proxy untuk API atau layanan backend. Dokumen ini adalah referensi semua elemen konfigurasi yang tersedia untuk Anda saat mem-build proxy API.

Jika Anda sedang mempelajari cara membuat proxy API, sebaiknya mulai dengan topik Mem-build proxy API sederhana.

Edit konfigurasi proxy API Anda menggunakan salah satu metode berikut:

Struktur direktori konfigurasi proxy API

Struktur direktori konfigurasi proxy API ditampilkan di bawah ini:

Menampilkan struktur direktori dengan apiproxy sebagai root. Tepat di bawah
    direktori apiproxy adalah direktori kebijakan, proxy, resource, dan target, serta
    file weatherapi.xml.

Konfigurasi proxy API terdiri dari konten berikut:

Konfigurasi dasar Setelan konfigurasi utama untuk proxy API.
ProxyEndpoint Setelan untuk koneksi HTTP masuk (dari aplikasi yang meminta ke Apigee), alur permintaan dan respons, serta lampiran kebijakan.
TargetEndpoint Setelan untuk koneksi HTTP keluar (dari Apigee ke layanan backend), alur permintaan dan respons, serta lampiran kebijakan.
Alur Pipeline permintaan dan respons ProxyEndpoint dan TargetEndpoint tempat kebijakan dapat dilampirkan.
Kebijakan File konfigurasi berformat XML yang sesuai dengan skema kebijakan Apigee.
Resource Skrip, file JAR, dan file XSLT yang dirujuk oleh kebijakan untuk menjalankan logika kustom.

Konfigurasi dasar

/apiproxy/weatherapi.xml

Konfigurasi dasar untuk proxy API, yang menentukan nama proxy API. Nama harus unik dalam organisasi.

Contoh konfigurasi:

<APIProxy name="weatherapi">
</APIProxy>

Elemen konfigurasi dasar

Nama Deskripsi Default Wajib?
APIProxy
name Nama proxy API, yang harus unik dalam organisasi. Karakter yang diizinkan untuk digunakan dalam nama dibatasi pada hal berikut: A-Za-z0-9_- T/A Ya
revision Nomor revisi konfigurasi proxy API. Anda tidak perlu menetapkan nomor revisi secara eksplisit, karena Apigee secara otomatis melacak revisi proxy API saat ini. T/A Tidak
ConfigurationVersion Versi skema konfigurasi proxy API yang sesuai dengan proxy API ini. Satu-satunya nilai yang didukung saat ini adalah majorVersion 4 dan minorVersion 0. Setelan ini dapat digunakan pada masa mendatang untuk memungkinkan evolusi format proxy API. 4.0 Tidak
Description Deskripsi teks proxy API. Jika disediakan, deskripsi akan ditampilkan di UI Apigee. T/A Tidak
DisplayName Nama yang mudah digunakan yang mungkin berbeda dari atribut name dari konfigurasi proxy API. T/A Tidak
Policies Daftar kebijakan di direktori /policies proxy API ini. Biasanya, Anda hanya akan melihat elemen ini saat proxy API dibuat menggunakan UI Apigee. Ini hanyalah setelan manifes, yang dirancang untuk memberikan visibilitas ke konten proxy API. T/A Tidak
ProxyEndpoints Daftar endpoint proxy di direktori /proxies proxy API ini. Biasanya, Anda hanya akan melihat elemen ini saat proxy API dibuat menggunakan UI Apigee. Ini hanyalah setelan manifes, yang dirancang untuk memberikan visibilitas ke konten proxy API. T/A Tidak
Resources Daftar resource (JavaScript, Python, Java, XSLT) di direktori /resources proxy API ini. Biasanya, Anda hanya akan melihat elemen ini saat proxy API dibuat menggunakan UI Apigee. Ini hanyalah setelan manifes, yang dirancang untuk memberikan visibilitas ke konten proxy API. T/A Tidak
Spec Mengidentifikasi Spesifikasi OpenAPI yang terkait dengan proxy API. Nilai ditetapkan ke URL atau jalur di penyimpanan spesifikasi.
T/A Tidak
TargetServers Daftar server target yang dirujuk di endpoint target proxy API ini. Biasanya, Anda hanya akan melihat elemen ini saat proxy API dibuat menggunakan Apigee. Ini hanyalah setelan manifes, yang dirancang untuk memberikan visibilitas ke konten proxy API. T/A Tidak
TargetEndpoints Daftar endpoint target di direktori /targets proxy API ini. Biasanya, Anda hanya akan melihat elemen ini saat proxy API dibuat menggunakan UI Apigee. Ini hanyalah setelan manifes, yang dirancang untuk memberikan visibilitas ke konten proxy API. T/A Tidak

ProxyEndpoint

Gambar berikut menunjukkan alur permintaan/respons:

Menampilkan klien yang memanggil layanan HTTP. Permintaan akan melewati endpoint proxy, lalu endpoint target sebelum
  diproses oleh layanan HTTP. Respons akan melalui endpoint target, lalu
  endpoint proxy sebelum ditampilkan ke klien.

/apiproxy/proxies/default.xml

Konfigurasi ProxyEndpoint menentukan antarmuka masuk (yang ditampilkan klien) untuk proxy API. Saat mengonfigurasi endpoint proxy, Anda menyiapkan konfigurasi jaringan yang menentukan cara aplikasi klien (aplikasi) memanggil API yang di-proxy.

Contoh konfigurasi ProxyEndpoint berikut akan disimpan di /apiproxy/proxies:

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <Properties/>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Elemen konfigurasi yang diperlukan di endpoint proxy dasar adalah:

Elemen konfigurasi ProxyEndpoint

Nama Deskripsi Default Wajib?
ProxyEndpoint
name Nama endpoint proxy. Harus unik dalam konfigurasi proxy API, jika (dalam kasus yang jarang terjadi) beberapa endpoint proxy ditentukan. Karakter yang diizinkan untuk digunakan dalam nama dibatasi pada hal berikut: A-Za-z0-9._\-$ %. T/A Ya
PreFlow Menentukan kebijakan dalam alur PreFlow permintaan atau respons. T/A Ya
Flows
Menentukan kebijakan dalam alur bersyarat permintaan atau respons.
T/A Ya
PostFlow
Menentukan kebijakan dalam alur PostFlow permintaan atau respons.
T/A Ya
HTTPProxyConnection Menentukan alamat jaringan dan jalur URI yang terkait dengan proxy API.
BasePath

String wajib yang mengidentifikasi jalur URI yang digunakan oleh Apigee secara unik untuk merutekan pesan masuk ke proxy API yang sesuai.

BasePath adalah fragmen URI (misalnya /weather) yang ditambahkan ke URL dasar proxy API (misalnya, http://apifactory-test.apigee.net). BasePath harus unik dalam lingkungan. Keunikan divalidasi saat proxy API dibuat atau diimpor.

Menggunakan karakter pengganti di jalur dasar

Anda dapat menggunakan satu atau beberapa karakter pengganti "*" di jalur dasar proxy API. Misalnya, jalur dasar /team/*/members memungkinkan klien memanggil https://[host]/team/blue/members dan https://[host]/team/green/members tanpa perlu membuat proxy API baru untuk mendukung tim baru. Perhatikan bahwa /**/ tidak didukung.

Penting: Apigee TIDAK mendukung penggunaan karakter pengganti "*" sebagai elemen pertama jalur dasar. Misalnya, ini TIDAK didukung: /*/search. Memulai jalur dasar dengan "*" dapat menyebabkan error yang tidak terduga karena cara Apigee mengidentifikasi jalur yang valid.

/ Ya
Properties Kumpulan setelan konfigurasi HTTP opsional dapat ditentukan sebagai properti <ProxyEndpoint>.

Gunakan properti request.queryparams.ignore.content.type.charset untuk memberi tahu proxy agar mengabaikan parameter charset header Content-Type saat memproses URL permintaan. Misalnya:

<Property name= \
"request.queryparams.ignore.content.type.charset">true</>

Tabel berikut menunjukkan contoh output bergantung pada setelan properti charset dan keberadaan parameter charset header Content-Type.

Setelan properti Nilai header Contoh output
charset=false Parameter charset tidak ditetapkan john.doe+test@gmail.com
charset=false charset=utf-8 john.doe test@gmail.com
charset=true dan tidak ada parameter charset di header. Parameter charset tidak ditetapkan john.doe+test@gmail.com
charset=true Set parameter charset=utf-8 john.doe+test@gmail.com
T/A Tidak
FaultRules
Menentukan reaksi endpoint proxy terhadap error. Aturan error menentukan dua item:
  • Kondisi yang menentukan error yang akan ditangani berdasarkan kategori, subkategori, atau nama error yang telah ditentukan sebelumnya
  • Satu atau beberapa kebijakan yang menentukan perilaku aturan error untuk Kondisi yang sesuai

Lihat Menangani error.

T/A Tidak
DefaultFaultRule

Menangani error apa pun (sistem, transpor, pesan, atau kebijakan) yang tidak ditangani secara eksplisit oleh aturan error lain.

Lihat Menangani error.

T/A Tidak
RouteRule Menentukan tujuan pesan permintaan masuk setelah diproses oleh pipeline permintaan ProxyEndpoint. Biasanya, RouteRule mengarah ke endpoint target bernama, IntegrationEndpoint, atau URL.
Name Atribut wajib, yang memberikan nama untuk RouteRule. Karakter yang diizinkan untuk digunakan dalam nama dibatasi pada hal berikut: A-Za-z0-9._\-$ %. Misalnya, Cat2 %_ adalah nama resmi. T/A Ya
Condition Pernyataan bersyarat opsional yang digunakan untuk pemilihan rute dinamis saat runtime. RouteRules bersyarat berguna, misalnya, untuk mengaktifkan pemilihan rute berbasis konten guna mendukung pembuatan versi backend. T/A Tidak
TargetEndpoint

String opsional yang mengidentifikasi konfigurasi TargetEndpoint yang diberi nama. Endpoint target bernama adalah endpoint target apa pun yang ditentukan dalam proxy API yang sama di direktori/targets).

Dengan memberi nama endpoint target, Anda menunjukkan tempat pesan permintaan harus diteruskan setelah diproses oleh pipeline permintaan ProxyEndpoint. Perhatikan bahwa ini adalah setelan opsional.

Endpoint proxy dapat memanggil URL secara langsung. Misalnya, resource JavaScript atau Java, yang berfungsi sebagai klien HTTP, dapat melakukan tugas dasar endpoint target, yaitu meneruskan permintaan ke layanan backend.

T/A Tidak
URL String opsional yang menentukan alamat jaringan keluar yang dipanggil oleh endpoint proxy, mengabaikan konfigurasi TargetEndpoint yang mungkin disimpan di /targets T/A Tidak

Cara mengonfigurasi RouteRules

Endpoint target bernama mengacu pada file konfigurasi di bagian /apiproxy/targets yang menjadi tujuan RouteRule meneruskan permintaan setelah diproses oleh endpoint proxy.

Misalnya, RouteRule berikut merujuk ke konfigurasi /apiproxy/targets/myTarget.xml:

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

Pemanggilan URL langsung

Endpoint proxy juga dapat langsung memanggil layanan backend. Pemanggilan URL langsung mengabaikan konfigurasi TargetEndpoint yang dinamai di bagian /apiproxy/targets). Karena alasan ini, TargetEndpoint adalah konfigurasi proxy API opsional, meskipun, dalam praktiknya, pemanggilan langsung dari endpoint proxy tidak direkomendasikan.

Misalnya, RouteRule berikut membuat panggilan HTTP ke http://api.mycompany.com/v2.

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL> 
</RouteRule>

Rute bersyarat

RouteRules dapat dirantai untuk mendukung pemilihan rute dinamis saat runtime. Permintaan masuk dapat dirutekan ke konfigurasi TargetEndpoint yang dinamai, langsung ke URL, atau ke kombinasi keduanya, berdasarkan header HTTP, konten pesan, parameter kueri, atau informasi kontekstual seperti waktu hari, lokalitas, dll.

RouteRules bersyarat berfungsi seperti pernyataan bersyarat lainnya di Apigee. Lihat Referensi kondisi dan Referensi variabel alur.

Misalnya, kombinasi RouteRule berikut pertama-tama mengevaluasi permintaan masuk untuk memverifikasi nilai header HTTP. Jika header HTTP routeTo memiliki nilai TargetEndpoint1, permintaan akan diteruskan ke endpoint target bernama TargetEndpoint1. Jika tidak, permintaan masuk akan diteruskan ke http://api.mycompany.com/v2.

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Rute null

RouteRule null dapat ditentukan untuk mendukung skenario saat pesan permintaan tidak perlu diteruskan ke endpoint target. Hal ini berguna saat endpoint proxy melakukan semua pemrosesan yang diperlukan, misalnya dengan menggunakan JavaScript untuk memanggil layanan eksternal atau mengambil data dari pencarian ke penyimpanan kunci/nilai Apigee.

Misalnya, kode berikut menentukan Rute null:

<RouteRule name="GoNowhere"/>

Rute null bersyarat dapat berguna. Pada contoh berikut, Route null dikonfigurasi untuk dijalankan saat header HTTP request.header.X-DoNothing memiliki nilai selain null.

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Ingat, RouteRules dapat dirantai, sehingga Route null bersyarat biasanya merupakan salah satu komponen dari sekumpulan RouteRules yang dirancang untuk mendukung pemilihan rute bersyarat.

Penggunaan praktis Route null bersyarat akan mendukung caching. Dengan menggunakan nilai variabel yang ditetapkan oleh kebijakan Cache, Anda dapat mengonfigurasi proxy API untuk menjalankan Rute null saat entri ditayangkan dari cache.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

TargetEndpoint

Menampilkan klien yang memanggil layanan HTTP. Permintaan akan melewati endpoint proxy, lalu endpoint target sebelum
  diproses oleh layanan HTTP. Respons akan melalui endpoint target, lalu
  endpoint proxy sebelum ditampilkan ke klien.

Endpoint target adalah endpoint proxy keluar yang setara. Endpoint target berfungsi sebagai klien ke layanan backend atau API—endpoint ini mengirim permintaan dan menerima respons.

Proxy API tidak perlu memiliki endpoint target. Endpoint proxy dapat dikonfigurasi untuk memanggil URL secara langsung. Proxy API tanpa endpoint target biasanya berisi endpoint proxy yang langsung memanggil layanan backend, atau yang dikonfigurasi untuk memanggil layanan menggunakan Java atau JavaScript.

Konfigurasi TargetEndpoint

/targets/default.xml

Endpoint target menentukan koneksi keluar dari Apigee ke layanan atau resource lain.

Berikut adalah contoh konfigurasi TargetEndpoint:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
    <Authentication/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

Elemen konfigurasi TargetEndpoint

Endpoint target dapat memanggil target dengan salah satu cara berikut:

  • HTTPTargetConnection untuk panggilan HTTP atau HTTPS
  • LocalTargetConnection untuk rantai proxy-ke-proxy lokal

Hanya konfigurasikan salah satu dari opsi ini di endpoint target.

Nama Deskripsi Default Wajib?
TargetEndpoint
name Nama endpoint target, yang harus unik dalam konfigurasi proxy API. Nama endpoint target digunakan di RouteRule ProxyEndpoint untuk mengarahkan permintaan untuk pemrosesan keluar. Karakter yang diizinkan untuk digunakan dalam nama dibatasi pada hal berikut: A-Za-z0-9._\-$ %. T/A Ya
PreFlow Menentukan kebijakan dalam alur PreFlow permintaan atau respons. T/A Ya
Flows
Menentukan kebijakan dalam alur bersyarat permintaan atau respons.
T/A Ya
PostFlow
Menentukan kebijakan dalam alur PostFlow permintaan atau respons.
T/A Ya
HTTPTargetConnection

Dengan elemen turunannya, menentukan resource backend yang dijangkau melalui HTTP.

Jika Anda menggunakan HTTPTargetConnection, jangan konfigurasikan jenis koneksi target lainnya (ScriptTarget atau LocalTargetConnection).

Anda dapat menggunakan elemen turunan <Authentication> untuk melakukan panggilan yang diautentikasi ke layanan Google atau layanan kustom yang berjalan di produk Google Cloud tertentu, seperti Cloud Functions dan Cloud Run. Penggunaan elemen <Authentication> memerlukan langkah-langkah penyiapan dan deployment yang dijelaskan dalam Menggunakan autentikasi Google. Dengan penyiapan yang tepat, kebijakan akan membuat token autentikasi untuk Anda dan menambahkannya ke permintaan layanan. Lihat juga penggunaan elemen <Authentication>.

URL Menentukan alamat jaringan layanan backend yang akan diteruskan oleh endpoint target pesan permintaan. T/A Tidak
LoadBalancer

Menentukan satu atau beberapa konfigurasi TargetServer yang dinamai. Konfigurasi TargetServer bernama dapat digunakan untuk load balancing yang menentukan 2 koneksi konfigurasi endpoint atau lebih.

Anda juga dapat menggunakan server target untuk memisahkan konfigurasi proxy API dari URL endpoint layanan backend konkret.

T/A Tidak
Properties Kumpulan setelan konfigurasi HTTP opsional dapat ditentukan sebagai properti <TargetEndpoint>. T/A Tidak
SSLInfo Secara opsional, tentukan setelan TLS/SSL di endpoint target untuk mengontrol koneksi TLS/SSL antara proxy API dan layanan target. Lihat Konfigurasi TargetEndpoint TLS/SSL. T/A Tidak
LocalTargetConnection Dengan elemen turunannya, menentukan resource yang akan dijangkau secara lokal, mengabaikan karakteristik jaringan seperti load balancing dan pemroses pesan.

Untuk menentukan resource target, sertakan elemen turunan APIProxy (dengan elemen ProxyEndpoint) atau elemen turunan Path.

Untuk informasi selengkapnya, lihat Menautkan proxy API secara berurutan.

Jika Anda menggunakan LocalTargetConnection, jangan konfigurasikan jenis koneksi target lainnya (HTTPTargetConnection atau ScriptTarget).

APIProxy Menentukan nama proxy API yang akan digunakan sebagai target untuk permintaan. Proxy target harus berada di organisasi dan lingkungan yang sama dengan proxy yang mengirim permintaan. Ini adalah alternatif untuk menggunakan elemen Jalur. T/A Tidak
ProxyEndpoint Digunakan dengan APIProxy untuk menentukan nama endpoint proxy proxy target. T/A Tidak
Path Menentukan jalur endpoint proxy API yang akan digunakan sebagai target untuk permintaan. Proxy target harus berada di organisasi dan lingkungan yang sama dengan proxy yang mengirim permintaan. Ini adalah alternatif untuk menggunakan APIProxy. T/A Tidak
FaultRules
Menentukan bagaimana endpoint target bereaksi terhadap error. Aturan error menentukan dua item:
  • Kondisi yang menentukan error yang akan ditangani berdasarkan kategori, subkategori, atau nama error yang telah ditentukan sebelumnya
  • Satu atau beberapa kebijakan yang menentukan perilaku aturan error untuk Kondisi yang sesuai

Lihat Menangani error.

T/A Tidak
DefaultFaultRule

Menangani error apa pun (sistem, transpor, pesan, atau kebijakan) yang tidak ditangani secara eksplisit oleh FaultRule lain.

Lihat Menangani error.

T/A Tidak

Penggunaan elemen <Authentication>

Penggunaan elemen <Authentication> di <TargetEndpoint> identik dengan penggunaan elemen <Authentication> dalam kebijakan ServiceCallout. Di <TargetEndpoint> dan ServiceCallout, <Authentication> adalah subelemen <HttpTargetConnection>. Untuk mengetahui detailnya, lihat Elemen autentikasi dalam referensi kebijakan ServiceCallout.

Referensi error elemen <Authentication>

Jika menggunakan elemen <Authentication>, Anda dapat menemukan kemungkinan pesan error dan tips pemecahan masalah untuk error deployment dan runtime di bagian Errors dalam dokumentasi kebijakan ServiceCallout.

Contoh elemen <Authentication>

Contoh berikut menunjukkan cara memanggil layanan yang di-deploy di Cloud Run sebagai target menggunakan elemen Authentication untuk membuat token OpenID Connect yang diperlukan untuk mengautentikasi panggilan:

<TargetEndpoint name="TargetEndpoint-1">
  <HTTPTargetConnection>
      <Properties/>
      <URL>https://cloudrun-hostname.a.run.app/test</URL>
      <Authentication>
          <GoogleIDToken>
             <Audience>https://cloudrun-hostname.a.run.app/test</Audience>
          </GoogleIDToken>
     </Authentication>
  </HTTPTargetConnection>
</TargetEndpoint>

Contoh berikut menunjukkan cara memanggil TargetService yang mengarah ke Cloud Run menggunakan elemen Authentication untuk membuat token OpenID Connect yang diperlukan untuk mengautentikasi panggilan. Elemen HeaderName menambahkan token pembawa yang dihasilkan ke header bernama X-Serverless-Authorization yang dikirim ke sistem target. Header Authorization, jika ada, tidak diubah dan juga dikirim dalam permintaan.

<TargetEndpoint name="TargetEndpoint-1">
   <HTTPTargetConnection>
     <Authentication>
        <HeaderName>X-Serverless-Authorization</HeaderName>
        <GoogleIDToken>
            <Audience ref="flow.variable.audience">https://cloudrun-hostname.a.run.app</Audience>
        </GoogleIDToken>
     </Authentication>
      <LoadBalancer>
         <Server name="cloud-run-target" />
      </LoadBalancer>
   </HTTPTargetConnection>
</TargetEndpoint>

Contoh berikut menunjukkan cara memanggil TargetService yang mengarah ke layanan Pengelola Secret Google. Dalam contoh ini, elemen GoogleAccessToken dikonfigurasi untuk membuat Token Autentikasi Google guna mengautentikasi permintaan target:

<HTTPTargetConnection>
   <Authentication>
      <GoogleAccessToken>
        <Scopes>
          <Scope>https://www.googleapis.com/auth/cloud-platform</Scope>
        </Scopes>
      </GoogleAccessToken>
    </Authentication>
    <URL>
      https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id
    </URL>
</HTTPTargetConnection>

Contoh berikut menunjukkan cara menetapkan audiens GoogleIDToken secara otomatis. Jika useTargetUrl adalah true dan variabel yang dirujuk tidak me-resolve ke variabel yang valid, URL target (tidak termasuk parameter kueri) akan digunakan sebagai audiens. Misalkan jalur permintaan adalah /foobar dan URL server target adalah https://xyz.com, audiens GoogleIDToken akan otomatis ditetapkan ke https://xyz.com/foobar.

<TargetEndpoint name="TargetEndpoint-1">
  <HTTPTargetConnection>
    <Authentication>
      <GoogleIDToken>
        <Audience ref='myvariable' useTargetUrl="true"/>
      </GoogleIDToken>
    </Authentication>
    <LoadBalancer>
      <Server name="TS" />
    </LoadBalancer>
  </HTTPTargetConnection>
</TargetEndpoint>

Konfigurasi TargetEndpoint TLS/SSL

Endpoint target sering kali perlu mengelola koneksi HTTPS dengan infrastruktur backend yang heterogen. Oleh karena itu, sejumlah setelan konfigurasi TLS/SSL didukung.

Elemen konfigurasi TargetEndpoint TLS/SSL

Nama Deskripsi Default Wajib?
SSLInfo

Blok <SSLInfo> dapat digunakan untuk TLS/SSL satu arah dan dua arah.

Enabled

Jika ditetapkan ke true, menentukan bahwa koneksi target harus menggunakan protokol SSL sesuai dengan parameter lain yang ditentukan dalam blok <SSLInfo> ini. Jika disetel ke false, menentukan bahwa koneksi target tidak boleh menggunakan SSL.

Namun, jika blok <HTTPTargetConnection> yang melingkupi berisi elemen <URL> yang dievaluasi menjadi string yang dimulai dengan https://, protokol SSL akan digunakan meskipun <Enabled> bernilai salah. Dalam hal ini, seluruh blok <SSLInfo> akan diabaikan.

Sebaliknya, jika ada elemen <URL> yang dimulai dengan http://, protokol SSL tidak akan digunakan meskipun <Enabled> bernilai benar.

false Tidak
Enforce

Menerapkan SSL ketat antara Apigee dan backend target.

Jika ditetapkan ke true, koneksi akan gagal untuk target dengan sertifikat yang tidak valid, sertifikat yang sudah tidak berlaku, sertifikat yang ditandatangani sendiri, sertifikat dengan nama host yang tidak cocok, dan sertifikat dengan root yang tidak tepercaya. Kode kegagalan 4xx atau 5xx akan ditampilkan.

Jika tidak ditetapkan, atau ditetapkan ke false, hasil koneksi ke backend target dengan sertifikat yang bermasalah bergantung pada setelan <IgnoreValidationErrors> (lihat di bawah). Respons berhasil (2xx) dapat terjadi dalam kondisi tertentu, jika <IgnoreValidationErrors> ditetapkan ke true.

false Tidak
TrustStore

Keystore yang berisi sertifikat server root tepercaya. Apigee akan memperlakukan peer jarak jauh sebagai tepercaya jika rantai sertifikat yang dikirimnya berakhir dengan sertifikat yang terdapat dalam keystore ini.

T/A Tidak
ClientAuthEnabled

Jika ditetapkan ke true, akan mengaktifkan TLS dua arah (juga dikenal sebagai TLS bersama atau mTLS) antara Apigee dan peer jarak jauh - klien API, atau backend target.

Mengaktifkan TLS dua arah biasanya mengharuskan Anda menyiapkan truststore dan keystore di Apigee.

false Tidak
KeyStore Keystore yang berisi kunci pribadi yang digunakan untuk autentikasi klien keluar T/A Ya (jika ClientAuthEnabled bernilai benar)
KeyAlias Alias kunci dari kunci pribadi yang digunakan untuk autentikasi klien keluar T/A Ya (jika ClientAuthEnabled bernilai benar)
IgnoreValidationErrors

Menunjukkan apakah error validasi diabaikan. Jika sistem backend menggunakan SNI dan menampilkan sertifikat dengan Distinguished Name (DN) subjek yang tidak cocok dengan nama host, tidak ada cara untuk mengabaikan error dan koneksi akan gagal.

Catatan: Jika <Enforce> ditetapkan ke true, nilai <IgnoreValidationErrors> akan diabaikan.

false Tidak
Ciphers

Cipher yang didukung untuk TLS/SSL keluar. Jika tidak ada cipher yang ditentukan, semua cipher yang tersedia untuk JVM akan diizinkan.

Untuk membatasi cipher, tambahkan elemen berikut yang mencantumkan cipher yang didukung:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>    
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
T/A Tidak
Protocols

Protokol yang didukung untuk TLS/SSL keluar. Jika tidak ada protokol yang ditentukan, semua protokol yang tersedia untuk JVM akan diizinkan.

Untuk membatasi protokol, tentukan secara eksplisit. Misalnya, untuk hanya mengizinkan TLS v1.2 atau TLS v1.3:

<Protocols>
 <Protocol>TLSv1.2</Protocol>
 <Protocol>TLSv1.3</Protocol>
</Protocols>
T/A Tidak
CommonName

Apigee memeriksa nilai di sini dengan CN (Nama Umum) atau SAN (Nama Alternatif Subjek) pada sertifikat peer jarak jauh.

T/A Tidak

Contoh endpoint target dengan autentikasi klien keluar diaktifkan

<TargetEndpoint name="default">
  <HttpTargetConnection>
        <URL>https://myservice.com</URL>
    <SSLInfo>
      <Enabled>true</Enabled>
      <Enforce>true</Enforce>
      <ClientAuthEnabled>true</ClientAuthEnabled>
      <KeyStore>myKeystore</KeyStore>
      <KeyAlias>myKey</KeyAlias>
      <TrustStore>myTruststore</TrustStore>
    </SSLInfo>
  </HttpTargetConnection>
</TargetEndpoint>

Untuk petunjuk mendetail, lihat Opsi untuk mengonfigurasi TLS.

Menggunakan variabel alur untuk menetapkan nilai TLS/SSL secara dinamis

Anda juga dapat menetapkan detail TLS/SSL secara dinamis untuk mendukung persyaratan runtime yang fleksibel. Misalnya, jika proxy Anda terhubung ke dua target yang berpotensi berbeda (target pengujian dan target produksi), Anda dapat meminta proxy API mendeteksi secara terprogram lingkungan mana yang dipanggil dan menetapkan referensi secara dinamis ke keystore dan truststore yang sesuai. Artikel Dynamic SSLInfo for TargetEndpoint using variable reference Apigee Community menjelaskan skenario ini secara lebih mendetail dan memberikan contoh proxy API yang dapat di-deploy.

Dalam contoh berikut tentang cara tag <SSLInfo> ditetapkan dalam konfigurasi TargetEndpoint, nilai dapat diberikan saat runtime, misalnya, oleh Java Callout, kebijakan JavaScript, atau kebijakan AssignMessage. Gunakan variabel pesan mana pun yang berisi nilai yang ingin Anda tetapkan.

Variabel hanya diizinkan dalam elemen berikut.

<SSLInfo>
    <Enabled>{myvars.ssl.enabled}</Enabled>
    <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
    <KeyStore>{myvars.ssl.keystore}</KeyStore>
    <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
    <TrustStore>{myvars.ssl.trustStore}</TrustStore>
</SSLInfo>

Menggunakan referensi untuk menetapkan nilai TLS/SSL secara dinamis

Saat mengonfigurasi endpoint target yang menggunakan HTTPS, Anda harus mempertimbangkan kasus saat sertifikat TLS/SSL berakhir masa berlakunya, atau perubahan pada konfigurasi sistem mengharuskan Anda memperbarui sertifikat.

Untuk informasi selengkapnya, lihat Menangani sertifikat yang telah habis masa berlakunya.

Namun, Anda dapat mengonfigurasi endpoint target secara opsional untuk menggunakan referensi ke keystore atau truststore. Keuntungan menggunakan referensi adalah Anda dapat mengupdate referensi untuk mengarah ke keystore atau truststore yang berbeda guna mengupdate sertifikat TLS/SSL tanpa harus memulai ulang Pemroses Pesan.

Misalnya, yang ditampilkan di bawah ini adalah endpoint target yang menggunakan referensi ke keystore:

<SSLInfo>
  <Enabled>true</Enabled>
  <ClientAuthEnabled>false</ClientAuthEnabled>
  <KeyStore>ref://keystoreref</KeyStore>
  <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Gunakan panggilan POST API berikut untuk membuat referensi bernama keystoreref:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references" \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>'

Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan Apigee API.

Referensi menentukan nama keystore dan jenisnya.

Gunakan panggilan GET API berikut untuk melihat referensi:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan Apigee API.

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan Apigee API.

Untuk mengubah referensi agar mengarah ke keystore yang berbeda nanti, pastikan alias memiliki nama yang sama, gunakan panggilan PUT berikut:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -X PUT \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'

Dengan $TOKEN ditetapkan ke token akses OAuth 2.0 Anda, seperti yang dijelaskan dalam Mendapatkan token akses OAuth 2.0. Untuk informasi tentang opsi curl yang digunakan dalam contoh ini, lihat Menggunakan curl. Untuk deskripsi variabel lingkungan yang digunakan, lihat Menetapkan variabel lingkungan untuk permintaan Apigee API.

TargetEndpoint dengan load balancing target

Endpoint target mendukung load balancing di beberapa server target bernama menggunakan tiga algoritma load balancing.

Untuk mendapatkan petunjuk mendetail, lihat Load balancing di seluruh server backend.

IntegrationEndpoint

IntegrationEndpoint adalah endpoint target yang secara khusus menjalankan integrasi Apigee. Jika Anda telah mengonfigurasi IntegrationEndpoint, Apigee akan mengirimkan objek request ke Platform Integrasi Apigee untuk dieksekusi. Untuk menjalankan integrasi, selain mengonfigurasi IntegrationEndpoint, Anda juga harus menambahkan kebijakan SetIntegrationRequest dalam alur proxy.

Anda dapat mengonfigurasi integrasi untuk dieksekusi secara sinkron atau asinkron dengan menetapkan elemen <AsyncExecution> dalam konfigurasi IntegrationEndpoint. Untuk mengetahui informasi selengkapnya, lihat Eksekusi Sinkron vs Asinkron. Setelah menjalankan integrasi, Apigee akan menyimpan respons di pesan respons.

Mengonfigurasi IntegrationEndpoint

Untuk mengonfigurasi endpoint integrasi sebagai endpoint target, tambahkan elemen IntegrationEndpoint ke konfigurasi ProxyEndpoint Anda. Berikut adalah contoh konfigurasi ProxyEndpoint:

<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>my-set-integration-request-policy</Name>
            </Step>
        </Request>
    </PreFlow>
    <Flows/>
    <PostFlow name="PostFlow"/>
    <HTTPProxyConnection>
        <BasePath>/integration-endpoint-test</BasePath>
        <Properties/>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <IntegrationEndpoint>my-int-endpoint</IntegrationEndpoint>
    </RouteRule>
</ProxyEndpoint>

Dalam contoh konfigurasi ProxyEndpoint, Apigee melakukan tugas berikut:

  1. Di PreFlow, jalankan kebijakan bernama my-set-integration-request-policy, yang menetapkan objek permintaan integrasi dan variabel alur integrasi.
  2. Menggunakan my-int-endpoint sebagai endpoint target, seperti yang ditentukan dalam RouteRule.
  3. Membaca objek permintaan integrasi yang dibuat oleh my-set-integration-request-policy.
  4. Mengirim permintaan ke Platform Integrasi Apigee menggunakan objek permintaan dan variabel alur yang ditetapkan oleh kebijakan SetIntegrationRequest.
  5. Menyimpan respons integrasi dalam pesan respons.

File XML yang berisi deklarasi <IntegrationEndpoint> akan tersedia di direktori APIGEE_BUNDLE_DIRECTORY/apiproxy/integration-endpoints/. Jika Anda membuat proxy API menggunakan opsi Develop > API Proxies > CREATE NEW > Integration target, Apigee akan menyimpan deklarasi dalam file /apiproxy/integration-endpoints/default.xml. Jika membuat XML endpoint integrasi dari UI, Anda dapat memberikan nama kustom untuk file XML.

Contoh berikut menunjukkan deklarasi elemen <IntegrationEndpoint> dalam file XML:

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>false</AsyncExecution>
</IntegrationEndpoint>

Elemen konfigurasi IntegrationEndpoint

Nama Deskripsi Default Wajib?
IntegrationEndpoint
name Nama IntegrationEndpoint. Karakter yang dapat Anda gunakan dalam nama dibatasi hingga: A-Za-z0-9._\-$ % T/A Ya
AsyncExecution Nilai Boolean yang menentukan apakah integrasi harus berjalan dalam mode sinkron atau asinkron. Untuk mengetahui informasi selengkapnya, lihat Eksekusi Sinkron vs Asinkron. false Tidak

Eksekusi Sinkron vs Asinkron

Anda dapat mengonfigurasi integrasi untuk berjalan dalam mode sinkron atau asinkron. Untuk memahami perbedaan antara mode eksekusi sinkron dan asinkron, lihat <AsyncExecution>.

Gunakan elemen <AsyncExecution> dalam </IntegrationEndpoint> untuk menentukan eksekusi sinkron atau asinkron. Jika Anda menetapkan <AsyncExecution> ke true, integrasi akan berjalan secara asinkron. Dan jika Anda menyetelnya ke false, integrasi akan berjalan secara sinkron.

Contoh berikut menetapkan AsyncExecution ke true:

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>true</AsyncExecution>
</IntegrationEndpoint>

Kebijakan

Direktori /policies di proxy API berisi semua kebijakan yang tersedia untuk dilampirkan ke Alur di proxy API.

Elemen konfigurasi kebijakan

Nama Deskripsi Default Wajib?
Policy
name

Nama internal kebijakan. Karakter yang dapat Anda gunakan dalam nama dibatasi untuk: A-Za-z0-9._\-$ %. Namun, UI Apigee menerapkan batasan tambahan, seperti menghapus karakter yang bukan alfanumerik secara otomatis.

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

T/A Ya
enabled

Tetapkan ke true untuk menerapkan kebijakan.

Tetapkan ke false untuk menonaktifkan kebijakan. Kebijakan tidak akan diterapkan meskipun tetap terlampir ke alur.

true Tidak
continueOnError

Tetapkan ke false untuk menampilkan error saat kebijakan gagal. Hal ini adalah perilaku yang diharapkan untuk sebagian besar kebijakan.

Tetapkan ke true agar eksekusi alur berlanjut meskipun setelah kebijakan gagal.

false Tidak
async

Jika disetel ke true, eksekusi kebijakan akan dialihkan ke thread lain, sehingga thread utama bebas menangani permintaan tambahan. Setelah pemrosesan offline selesai, thread utama akan kembali dan menyelesaikan penanganan alur pesan. Dalam beberapa kasus, menetapkan asinkron ke true akan meningkatkan performa proxy API. Namun, penggunaan asinkron yang berlebihan dapat menurunkan performa dengan terlalu banyak pengalihan thread.

Untuk menggunakan perilaku asinkron di proxy API, lihat Model objek JavaScript.

false Tidak

Lampiran kebijakan

Gambar berikut menunjukkan urutan eksekusi alur proxy API:

menunjukkan klien yang memanggil layanan HTTP. Permintaan menemukan
  endpoint proxy dan endpoint target, yang masing-masing berisi langkah-langkah yang memicu kebijakan. Setelah layanan HTTP menampilkan respons, respons akan diproses oleh endpoint target, lalu ProxyEndpoing sebelum ditampilkan ke klien. Seperti permintaan, respons diproses
  oleh kebijakan dalam langkah-langkah.

Seperti yang ditunjukkan di atas:

Kebijakan dilampirkan sebagai langkah pemrosesan ke Alur. Nama kebijakan digunakan untuk mereferensikan kebijakan yang akan diterapkan sebagai Langkah pemrosesan. Format lampiran kebijakan adalah sebagai berikut:

<Step><Name>MyPolicy</Name></Step>

Kebijakan diterapkan sesuai urutan lampirannya ke Flow. Contoh:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Elemen konfigurasi lampiran kebijakan

Nama Deskripsi Default Wajib?
Step
Name Nama kebijakan yang akan dieksekusi oleh definisi Langkah ini. T/A Ya
Condition Pernyataan bersyarat yang menentukan apakah kebijakan diterapkan atau tidak. Jika kebijakan memiliki kondisi terkait, kebijakan hanya akan dieksekusi jika pernyataan bersyarat bernilai benar. T/A Tidak

Alur

ProxyEndpoint dan TargetEndpoint menentukan pipeline untuk pemrosesan pesan permintaan dan respons. Pipeline pemrosesan terdiri dari alur permintaan dan alur respons. Setiap alur permintaan dan alur respons dibagi lagi menjadi PreFlow, satu atau beberapa alur bersyarat atau bernama opsional, dan PostFlow.

  • Pra-Aliran: Selalu dieksekusi. Dieksekusi sebelum Flow bersyarat apa pun.
  • PostFlow: Selalu dieksekusi. Dieksekusi setelah Flow kondisional.

Selain itu, Anda dapat menambahkan PostClientFlow ke endpoint proxy, yang dieksekusi setelah respons ditampilkan ke aplikasi klien yang meminta. Hanya kebijakan MessageLogging yang dapat dilampirkan ke alur ini. PostClientFlow mengurangi latensi proxy API dan menyediakan informasi untuk logging yang tidak dihitung hingga setelah respons ditampilkan ke klien, seperti client.sent.start.timestamp dan client.sent.end.timestamp.Alur ini digunakan terutama untuk mengukur interval waktu antara stempel waktu awal dan akhir untuk pesan respons.

Berikut adalah contoh PostClientFlow dengan kebijakan logging pesan yang dilampirkan.

...
  <PostFlow name="PostFlow">
      <Request/>
      <Response/>
  </PostFlow>
  <PostClientFlow>
      <Request/>
      <Response>
          <Step>
              <Name>Message-Logging-1</Name>
          </Step>
      </Response>
  </PostClientFlow>
  ...

Pipeline pemrosesan proxy API menjalankan Flow dalam urutan berikut:

Pipeline Permintaan:

  1. PreFlow Permintaan Proxy
  2. Alur Bersyarat Permintaan Proxy (Opsional)
  3. PostFlow Permintaan Proxy
  4. PreFlow Permintaan Target
  5. Alur Bersyarat Permintaan Target (Opsional)
  6. PostFlow Permintaan Target

Pipeline Respons:

  1. Pra-Alur Respons Target
  2. Alur Bersyarat Respons Target (Opsional)
  3. PostFlow Respons Target
  4. Pra-Alur Respons Proxy
  5. Alur Bersyarat Respons Proxy (Opsional)
  6. PostFlow Respons Proxy
  7. Respons PostClientFlow (Opsional)

Hanya Flow dengan lampiran kebijakan yang perlu dikonfigurasi dalam konfigurasi ProxyEndpoint atau TargetEndpoint. PreFlow dan PostFlow hanya perlu ditentukan dalam konfigurasi ProxyEndpoint atau TargetEndpoint jika kebijakan perlu diterapkan selama pemrosesan PreFlow atau PostFlow.

Berbeda dengan alur kondisional, pengurutan elemen PreFlow dan PostFlow tidak penting--proxy API akan selalu mengeksekusi setiap elemen pada titik yang sesuai dalam pipeline, terlepas dari tempat elemen tersebut muncul dalam konfigurasi Endpoint.

Alur kondisional

Endpoint proxy dan endpoint target mendukung alur bersyarat dalam jumlah yang tidak terbatas (juga dikenal sebagai alur bernama).

Proxy API menguji kondisi yang ditentukan dalam alur kondisional dan, jika kondisi tersebut terpenuhi, langkah-langkah pemrosesan dalam alur kondisional akan dijalankan oleh proxy API. Jika kondisi tidak terpenuhi, langkah-langkah pemrosesan dalam alur kondisional akan dilewati. Alur bersyarat dievaluasi dalam urutan yang ditentukan di proxy API dan alur pertama yang kondisinya terpenuhi akan dieksekusi.

Dengan menentukan alur bersyarat, Anda akan mendapatkan kemampuan untuk menerapkan langkah-langkah pemrosesan di proxy API berdasarkan:

  • URI Permintaan
  • Kata kerja HTTP (GET/PUT/POST/DELETE)
  • Nilai parameter kueri, header, dan parameter formulir
  • Banyak jenis kondisi lainnya

Misalnya, alur kondisional berikut menentukan bahwa alur tersebut hanya dijalankan jika jalur resource permintaan adalah /accesstoken. Setiap permintaan masuk dengan jalur /accesstoken menyebabkan alur ini dieksekusi, beserta kebijakan apa pun yang dilampirkan ke alur. Jika jalur permintaan tidak menyertakan akhiran /accesstoken, alur tidak akan dieksekusi (meskipun alur bersyarat lain mungkin akan dieksekusi).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request> 
  </Flow>
</Flows>   

Elemen konfigurasi flow

Nama Deskripsi Default Wajib?
Flow Pipeline pemrosesan permintaan atau respons yang ditentukan oleh endpoint proxy atau endpoint target
Name Nama unik Flow. T/A Ya
Condition Pernyataan bersyarat yang mengevaluasi satu atau beberapa variabel untuk dievaluasi ke benar atau salah. Semua Flow selain jenis PreFlow dan PostFlow yang telah ditentukan sebelumnya harus menentukan kondisi untuk dieksekusi. Namun, jika Anda menyertakan satu alur tanpa kondisi di akhir urutan alur, alur tersebut akan berfungsi sebagai pernyataan "Else" di akhir urutan alur. T/A Ya
Request Pipeline yang terkait dengan pemrosesan pesan Permintaan T/A Tidak
Response Pipeline yang terkait dengan pemrosesan pesan Respons T/A Tidak

Pemrosesan langkah

Urutan berurutan Alur bersyarat diterapkan oleh Apigee. Alur Bersyarat dieksekusi dari atas ke bawah. Flow kondisional pertama yang kondisinya bernilai true akan dieksekusi, dan hanya satu Flow kondisional yang dieksekusi.

Misalnya, dalam konfigurasi Flow berikut, setiap permintaan masuk yang tidak menyertakan akhiran jalur /first atau /second akan menyebabkan ThirdFlow dieksekusi, yang menerapkan kebijakan yang disebut Return404.

<Flows>
  <Flow name="FirstFlow">
    <Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="SecondFlow">
    <Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
      <Step><Name>SecondPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="ThirdFlow">
    <Request>
      <Step><Name>Return404</Name></Step>
    </Request>
  </Flow>
</Flows>

Referensi

"Resource" (file resource untuk digunakan di proxy API) adalah skrip, kode, dan transformasi XSL yang dapat dilampirkan ke Alur menggunakan kebijakan. Kode ini muncul di bagian Skrip pada editor proxy API di UI Apigee.

Lihat Mengelola resource untuk jenis resource yang didukung.

Resource dapat disimpan di proxy API, lingkungan, atau organisasi. Dalam setiap kasus, resource direferensikan berdasarkan namanya dalam Kebijakan. Apigee me-resolve nama dengan berpindah dari proxy API, ke lingkungan, ke tingkat organisasi.

Resource yang disimpan di tingkat organisasi dapat dirujuk oleh Kebijakan di lingkungan mana pun. Resource yang disimpan di tingkat lingkungan dapat dirujuk oleh Kebijakan di lingkungan tersebut. Resource yang disimpan di tingkat proxy API hanya dapat direferensikan oleh Kebijakan di proxy API tersebut.