Antipola: Gunakan Kebijakan Panggilan Layanan untuk memanggil layanan backend di Proxy API Tidak Ada Target

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

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

Apigee Edge menawarkan banyak fleksibilitas untuk membangun perilaku yang canggih berdasarkan pola ini. Misalnya, Anda dapat menambahkan kebijakan untuk mengontrol cara API memproses permintaan klien sebelum mengirim ke layanan backend, atau memanipulasi respons yang diterima dari layanan backend meneruskannya ke klien. Anda dapat memanggil layanan lain menggunakan kebijakan info 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 dapat dilakukan secara teknis, tetapi mengakibatkan hilangnya data analitik tentang kinerja layanan eksternal.

Proxy API yang tidak berisi rute target dapat berguna jika Anda tidak perlu meneruskan pesan permintaan ke TargetEndpoint. Sebaliknya, ProxyEndpoint melakukan semua diproses. Misalnya, ProxyEndpoint dapat mengambil data dari pencarian ke metode penyimpanan kunci/nilai dan menampilkan respons tanpa memanggil layanan backend.

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

<RouteRule name="noroute"/>

Proxy yang menggunakan rute null dianggap "tidak ada target" proxy, karena tidak memanggil layanan backend target.

Secara teknis, Anda dapat menambahkan pemanggilan 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 tingkat error), sehingga menyulitkan penilaian performa layanan eksternal.

Dampak

  • Informasi Analytics mengenai interaksi dengan layanan eksternal ( kode error, waktu respons, performa target, dll.) tidak tersedia
  • Logika khusus apa pun yang diperlukan sebelum atau setelah memanggil info layanan disertakan sebagai dari keseluruhan logika {i>proxy<i}, yang membuatnya lebih sulit untuk dipahami dan digunakan kembali.

Praktik Terbaik

Jika proxy API berinteraksi hanya dengan satu layanan eksternal, proxy harus mengikuti aturan pola desain, yang mana layanan backend didefinisikan sebagai titik akhir target dari proxy API. {i>Proxy<i} tanpa aturan pemilihan rute ke endpoint target tidak boleh memanggil layanan backend menggunakan kebijakan Servicecallout.

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

<!-- /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 info Layanan untuk mendukung skenario mashup, tempat Anda ingin memanggil layanan eksternal sebelum atau setelah memanggil endpoint target. Info layanan tidak dimaksudkan untuk menggantikan endpoint target pemanggilan.

Bacaan lebih lanjut