Membuat rantai proxy API bersama-sama

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat Dokumentasi Apigee Edge.

Anda dapat menentukan bahwa satu {i>proxy<i} adalah titik akhir target dari {i>proxy<i} lain, yang secara efektif menghubungkan dua {i>proxy<i} dalam rantai {i>proxy<i}. Membuat rantai {i>proxy<i} dengan cara ini dapat membantu Anda menghindari {i>network hop<i}, dan jadi meningkatkan performa secara keseluruhan.

Dengan perantaian proxy, Anda menentukan bahwa satu proxy adalah endpoint target lokal yang lain. Daripada menggunakan elemen HTTPTargetConnection untuk melakukan panggilan ke elemen kedua gunakan elemen LocalTargetConnection.

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

Anda mungkin menemukan manfaat perantaian proxy ketika Anda memiliki {i>proxy<i} yang menawarkan beberapa tingkat fungsionalitas yang akan digunakan oleh {i>proxy<i} lain. Misalnya, {i>proxy<i} yang mengekspos operasi create/read/update/delete dengan penyimpanan data backend dapat menjadi proxy target untuk beberapa {i>proxy<i} lain yang mengekspos data ke klien.

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

Cara kerja perantaian proxy

Perantaian proxy menggunakan koneksi lokal untuk meminimalkan overhead jaringan saat memanggil satu proxy dari yang lain. Koneksi lokal ini lebih efisien karena melewati fitur jaringan seperti sebagai load balancer, router, dan pemroses pesan.

Berikut ini menjelaskan perbedaan antara menghubungkan {i>proxy<i} dengan HTTPTargetConnection dan LocalTargetConnection (peranan proxy):

Diagram panggilan proxy-ke-proxy tanpa perantaian proxy.

Diagram panggilan proxy-ke-proxy dengan perantaian proxy.

Anda menghubungkan proxy dengan menentukan bahwa salah satunya adalah endpoint target lokal yang lain. Untuk konfigurasi dalam diagram di atas (Panggilan proxy-ke-proxy dengan perantaian proxy), Anda akan menentukan bahwa {i>ProxyB<i} (/proxyB) adalah endpoint target lokal ProxyA (/proxyA). Hal ini menyebabkan permintaan yang tiba di ProxyA diteruskan ke ProxyB.

Anda dapat membuat koneksi lokal di antara 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 LocalTargetConnection, seperti yang dijelaskan di bawah ini.

Menghubungkan proxy berdasarkan nama proxy

Anda dapat menentukan proxy target berdasarkan nama. Anda mungkin menemukan bahwa ini paling berguna ketika Anda membuat koneksi dari awal dan mengembangkan {i>proxy<i} bersama-sama. Jika Anda tidak tahu (atau namanya mungkin berubah), pertimbangkan untuk menghubungkan dengan jalur endpoint proxy target, karena yang dijelaskan di bawah.

Saat terhubung ke proxy target menurut nama, Anda menentukan nama proxy dan nama proxy ProxyEndpoint.

Contoh berikut menentukan proxy target yang disebut data-manager, beserta nama ProxyEndpoint yang ditampilkan oleh data-manager. Untuk referensi informasi selengkapnya, 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 menurut jalur

Anda dapat menentukan proxy target berdasarkan jalur endpoint-nya. Anda mungkin ingin melakukannya dengan cara ini ketika Anda tidak mengetahui nama {i>proxy<i}, atau kapan namanya mungkin berubah.

Jika proxy Anda hanyalah konsumen proxy target—seperti saat Anda tidak mengembangkan keduanya—jalur ini mungkin menjadi cara yang paling dapat diandalkan untuk terhubung. Misalnya, jika proxy Anda dikembangkan dan dikelola oleh tim lain, Anda mungkin ingin terhubung menggunakan yang dapat diandalkan.

Contoh berikut menetapkan proxy target di /v1/streetcarts/foodcarts/data-manager, yang mana host dianggap sama dengan {i>proxy<i} 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> di bawah <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 berdasarkan nama atau jalur proxy, menggunakan UI Apigee. Pada contoh berikut, ada dua {i>proxy<i}, {i>ProxyA<i} dan {i>ProxyB<i}, dan Anda ingin ProxyB menjadi endpoint target ProxyA. Untuk menghubungkan {i>proxy<i} dengan nama {i>proxy<i}, lakukan langkah-langkah berikut:

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

Proxy berantai, produk API, dan keamanan

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

Jika {i>proxy<i} kedua Anda harus diamankan dari permintaan klien langsung, pertimbangkan untuk menambahkan logika ke meminta {i>proxy<i} kedua Anda memeriksa alamat IP klien. Jika ada panggilan yang dilakukan dengan perantaian, alamat IP-nya akan bersifat lokal. Kode Anda dapat memvalidasi bahwa kode tersebut bersifat lokal sebelum mengizinkan sebelum melanjutkan. Lihat kebijakan AccessControl untuk mengetahui satu cara melakukannya.