Antipattern: Hedef Olmayan API Proxy'sinde arka uç hizmeti çağırmak için Hizmet Çağrı Politikası'nı kullanma

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

API proxy'si, arka uç hizmetleri için yönetilen bir hafif bileşendir. Temel bir API proxy yapılandırması, ProxyEndpoint (API proxy'sinin URL'sini tanımlar) ve bir TargetEndpoint (arka uç hizmetinin URL'sini tanımlar).

Apigee Edge, bu kalıbın üzerine gelişmiş davranışlar oluşturmak için büyük esneklik sunar. Örneğin, API'nin istemci isteğini göndermeden önce işleme şeklini kontrol etmek için politikalar ekleyebilirsiniz. veya arka uç hizmetine yönlendirme yapmadan önce arka uç hizmetinden alınan yanıtı ve müşteriye iletilecektir. Hizmet açıklama metni politikalarını kullanarak diğer hizmetleri çağırabilir, JavaScript kodu ekleyerek özel davranış ekleyebilir, hatta arka uç hizmetini çağırmayan bir API proxy'si oluşturabilirsiniz.

Antipattern

Hedef uç noktaya giden bir yol olmadan API proxy'sinde bir arka uç hizmeti çağırmak için hizmet çağrılarını kullanma teknik olarak uygulanabilir, ancak dış hizmet.

Hedef rota içermeyen bir API proxy'si, yönlendirme yapmanız gerekmeyen durumlarda yararlı olabilir bu istek mesajını TargetEndpoint'e iletir. Bunun yerine ProxyEndpoint, Search Ads 360'ta bahsedeceğim. Örneğin, ProxyEndpoint API hizmetinin anahtar/değer deposunda çalışır ve bir arka uç hizmeti çağırmadan yanıtı döndürür.

boş Rota tanımlayabilirsiniz aşağıdaki gibi bir API proxy'sindedir:

<RouteRule name="noroute"/>

Boş rota kullanan bir proxy "hedef yok" proxy'si vardır. Bunun nedeni, hedef arka uç hizmetini çağırmamasıdır.

Aşağıdaki örnekte gösterildiği gibi, harici bir hizmeti çağırmak için hedef olmayan bir proxy'ye hizmet açıklama metni eklemek teknik olarak mümkündür:

<!-- /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>

Ancak proxy, harici hizmet davranışı hakkında analiz bilgileri (işlem süresi veya hata oranları gibi) sağlayamadığından harici hizmetin performansının değerlendirilmesini zorlaştırır.

Etki

  • Harici hizmetle etkileşime ilişkin analiz bilgileri ( hata kodları, yanıt süresi, hedef performans vb.) mevcut değil
  • Hizmet çağrısı çağrılmadan önce veya çağrıldıktan sonra gerekli olan tüm belirli mantıklar Bu, verilerin anlaşılmasını ve yeniden kullanılmasını zorlaştırır.

En İyi Uygulama

Bir API proxy'si yalnızca tek bir harici hizmetle etkileşime girerse proxy temel arka uç hizmetinin, API proxy'sinin hedef uç noktası olarak tanımlandığı tasarım kalıbı. Proxy bir hedef uç noktaya yönlendirme kuralı olmayanlar ServiceReference politikasını kullanarak arka uç hizmeti çağırmamalıdır.

Aşağıdaki proxy yapılandırması, yukarıdaki örnekle aynı davranışı uygular ancak en iyi örneği izler. uygulamalar:

<!-- /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>

Harici hizmetleri çağırmak istediğiniz karma senaryoları desteklemek için hizmet açıklama metinlerini kullanın. başlatıldıktan sonra belirlenebilir. Hizmet açıklama metinlerinin hedef uç noktanın yerini alması amaçlanmamıştır. çağrılacaktır.

Daha fazla bilgi