Antipola: Menggunakan Kebijakan Info Layanan untuk memanggil layanan backend di Proxy API Tanpa Target

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

Proxy API adalah facade terkelola untuk layanan backend. Konfigurasi proxy API dasar terdiri dari ProxyEndpoint (menentukan URL proxy API) dan TargetEndpoint (menentukan URL layanan backend).

Apigee Edge menawarkan banyak fleksibilitas untuk membangun perilaku canggih di atas pola ini. Misalnya, Anda dapat menambahkan kebijakan untuk mengontrol cara API memproses permintaan klien sebelum mengirimkannya ke layanan backend, atau memanipulasi respons yang diterima dari layanan backend sebelum meneruskannya ke klien. Anda dapat memanggil layanan lain menggunakan kebijakan panggilan layanan, menambahkan perilaku kustom dengan menambahkan kode Javascript, dan bahkan membuat proxy API yang tidak memanggil layanan backend.

Anti-pola

Menggunakan pemanggilan layanan untuk memanggil layanan backend di Proxy API tanpa rute ke endpoint target secara teknis dapat dilakukan, tetapi akan menyebabkan hilangnya data analisis tentang performa layanan eksternal.

Proxy API yang tidak berisi rute target dapat berguna jika Anda tidak perlu meneruskan pesan permintaan ke TargetEndpoint. Sebagai gantinya, ProxyEndpoint melakukan semua pemrosesan yang diperlukan. Misalnya, ProxyEndpoint dapat mengambil data dari lookup ke penyimpanan nilai kunci layanan API dan menampilkan respons tanpa memanggil layanan backend.

Anda dapat menentukan Rute null di proxy API, seperti yang ditunjukkan di sini:

<RouteRule name="noroute"/>

Proxy yang menggunakan rute null adalah proxy "tanpa target", karena tidak memanggil layanan backend target.

Secara teknis, Anda dapat menambahkan panggilan layanan ke proxy tanpa target untuk memanggil layanan eksternal, seperti yang ditunjukkan dalam contoh di bawah:

<!-- /antipatterns/examples/service-callout-no-target-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>ServiceCallout-InvokeBackend</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/no-target-proxy</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="noroute"/>
</ProxyEndpoint>

Namun, proxy tidak dapat memberikan informasi analisis tentang perilaku layanan eksternal (seperti waktu pemrosesan atau rasio error), sehingga sulit untuk menilai performa layanan eksternal.

Dampak

  • Informasi analisis tentang interaksi dengan layanan eksternal ( kode error, waktu respons, target performa, dll.) tidak tersedia
  • Logika spesifik yang diperlukan sebelum atau setelah memanggil panggilan layanan disertakan sebagai bagian dari logika proxy secara keseluruhan, sehingga lebih sulit dipahami dan digunakan kembali.

Praktik Terbaik

Jika proxy API hanya berinteraksi dengan satu layanan eksternal, proxy harus mengikuti pola desain dasar, dengan layanan backend ditentukan sebagai endpoint target proxy API. Proxy tanpa aturan perutean ke endpoint target tidak boleh memanggil layanan backend menggunakan kebijakan ServiceCallout.

Konfigurasi proxy berikut menerapkan perilaku yang sama seperti contoh di atas, tetapi mengikuti praktik terbaik:

<!-- /antipatterns/examples/service-callout-no-target-2.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/simple-proxy-with-route-to-backend</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

Gunakan Panggilan layanan untuk mendukung skenario mashup, tempat Anda ingin memanggil layanan eksternal sebelum atau setelah memanggil endpoint target. Pesan layanan tidak dimaksudkan untuk menggantikan pemanggilan endpoint target.

Bacaan lebih lanjut