Membuat rantai proxy API bersama-sama

Halaman ini berlaku untuk Apigee dan Apigee Hybrid.

Baca dokumentasi Apigee Edge.

Anda dapat menentukan bahwa satu proxy adalah endpoint target dari proxy lainnya, yang secara efektif menghubungkan kedua proxy dalam rantai proxy. Membuat rantai proxy dengan cara ini dapat membantu Anda menghindari hop jaringan, sehingga dapat meningkatkan performa secara keseluruhan.

Dengan perantaian proxy, Anda menentukan bahwa satu proxy adalah endpoint target lokal dari proxy lainnya. Alih-alih menggunakan elemen HTTPTargetConnection untuk melakukan panggilan ke proxy kedua, Anda dapat menggunakan elemen LocalTargetConnection.

<LocalTargetConnection>
    <APIProxy>myproxy2</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

Anda mungkin perlu menggunakan perantaian proxy jika memiliki proxy yang menawarkan beberapa fungsi tingkat rendah terpisah yang akan digunakan oleh proxy lain. Misalnya, proxy yang mengekspos operasi buat/baca/perbarui/hapus dengan penyimpanan data backend bisa menjadi proxy target untuk beberapa proxy lain yang mengekspos data ke klien.

Video: Tonton video singkat untuk mempelajari lebih lanjut perantaian proxy API.

Cara kerja perantaian proxy

Proxy chain menggunakan koneksi lokal untuk meminimalkan overhead jaringan saat memanggil satu proxy dari proxy lainnya. Koneksi lokal ini lebih efisien karena mengabaikan fitur jaringan, seperti load balancer, router, dan pemroses pesan.

Berikut adalah ilustrasi perbedaan antara menghubungkan proxy dengan HTTPTargetConnection dan LocalTargetConnection (rantai proxy):

Diagram panggilan proxy-ke-proxy tanpa perantaian proxy.

Diagram panggilan proxy-ke-proxy dengan proxy chaining.

Anda menghubungkan proxy dengan menentukan bahwa salah satunya merupakan endpoint target lokal dari proxy lainnya. Untuk konfigurasi dalam diagram di atas (Panggilan proxy-to-proxy dengan proxy chaining), Anda harus menentukan bahwa ProxyB (/proxyB) adalah endpoint target lokal ProxyA (/proxyA). Hal ini menyebabkan permintaan yang tiba di ProxyA diteruskan ke ProxyB.

Anda dapat membuat koneksi lokal antar proxy dengan dua cara:

  • Dengan menentukan nama proxy target dan nama ProxyEndpoint
  • Dengan menentukan jalur ke endpoint proxy target

Anda menghubungkan proxy target dalam konfigurasi TargetEndpoint, menggunakan elemen LocalTargetConnection, seperti yang dijelaskan di bawah ini.

Menghubungkan proxy dengan nama proxy

Anda dapat menentukan proxy target berdasarkan nama. Anda mungkin merasa bahwa cara ini paling berguna ketika Anda membuat koneksi sejak awal dan mengembangkan proxy bersama-sama. Jika Anda tidak tahu nama tersebut (atau namanya mungkin berubah), pertimbangkan untuk menghubungkan dengan jalur endpoint proxy target, seperti yang dijelaskan di bawah ini.

Saat terhubung ke proxy target berdasarkan nama, Anda menentukan nama proxy dan nama ProxyEndpoint-nya.

Contoh berikut menentukan proxy target yang disebut data-manager, beserta nama ProxyEndpoint yang diekspos oleh data-manager. Untuk informasi referensi, lihat Referensi konfigurasi proxy API.

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <APIProxy>data-manager</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>
</TargetEndpoint>

Menghubungkan proxy berdasarkan jalur

Anda dapat menentukan proxy target berdasarkan jalur endpoint-nya. Anda mungkin perlu melakukannya dengan cara ini ketika Anda tidak tahu nama proxy, atau ketika nama tersebut mungkin berubah.

Jika proxy Anda hanyalah konsumen dari proxy target—misalnya saat Anda tidak mengembangkan keduanya—jalur tersebut mungkin merupakan cara yang paling andal untuk terhubung. Misalnya, jika proxy yang Anda hubungkan dikembangkan dan dikelola oleh tim lain, Anda mungkin ingin terhubung menggunakan jalur endpoint yang andal.

Contoh berikut menetapkan proxy target di /v1/streetcarts/foodcarts/data-manager, dengan host dianggap sama dengan proxy saat ini. Untuk informasi referensi, lihat Referensi konfigurasi proxy API.

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <Path>/v1/streetcarts/foodcarts/data-manager</Path>
    </LocalTargetConnection>
</TargetEndpoint>

Elemen <Path> pada bagian <LocalTargetConnection> dapat berupa string, atau Anda dapat menggunakan template pesan untuk menetapkan nilai secara dinamis.

Menghubungkan proxy menggunakan UI Apigee

Anda juga dapat menghubungkan proxy, baik dengan nama atau jalur proxy, menggunakan UI Apigee. Pada contoh berikut, ada dua proxy, ProxyA dan ProxyB. Anda ingin ProxyB menjadi endpoint target ProxyA. Untuk menghubungkan proxy menurut nama proxy, lakukan langkah-langkah berikut:

  1. Login ke UI Apigee.
  2. Pilih Develop > Proxies di panel sebelah kiri.
  3. Dalam daftar proxy, pilih ProxyA.
  4. Klik tab Mengembangkan.
  5. Di panel Code, ganti bagian <TargetEndpoint> XML dengan yang berikut ini:
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. Klik Save.

Proxy berantai, produk API, dan keamanan

Perantaian proxy paling cocok untuk kasus ketika kedua proxy berada di produk API yang sama. Secara default, keduanya tersedia untuk klien. Apigee saat ini tidak mendukung pemaketan proxy kedua dalam produk API terpisah yang tidak dapat diakses oleh klien.

Jika proxy kedua Anda harus diamankan dari permintaan klien langsung, pertimbangkan untuk menambahkan logika agar proxy kedua Anda memeriksa alamat IP klien. Dalam kasus panggilan yang dilakukan dengan perantaian, alamat IP akan bersifat lokal. Kode Anda dapat memvalidasi bahwa kode tersebut bersifat lokal sebelum mengizinkan pemrosesan dilanjutkan. Lihat kebijakan AccessControl untuk mengetahui satu cara melakukannya.