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.
Apigee X belgelerine gidin.
bilgi

API proxy'si, arka uç hizmetleri için yönetilen bir arayüzdür. Temel bir API proxy yapılandırması, bir ProxyEndpoint (API proxy'sinin URL'sini tanımlar) ve bir TargetEndpoint (arka uç hizmetinin URL'sini tanımlar) içerir.

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

Antipattern

Teknik olarak, hedef uç noktaya yönlendirmesi olmayan bir API proxy'sinde arka uç hizmeti çağırmak için hizmet çağrıları kullanmak uygundur ancak harici hizmetin performansıyla ilgili analiz verilerinin kaybına neden olur.

Hedef rota içermeyen bir API proxy'si, istek mesajını TargetEndpoint'e yönlendirmenizin gerekmediği durumlarda yararlı olabilir. Bunun yerine, gerekli tüm işlemleri ProxyEndpoint gerçekleştirir. Örneğin ProxyEndpoint, API hizmetinin anahtar/değer deposuna yapılan aramadan veri alabilir ve bir arka uç hizmeti çağırmadan yanıtı döndürebilir.

Aşağıda gösterildiği gibi, API proxy'sinde boş bir Rota tanımlayabilirsiniz:

<RouteRule name="noroute"/>

Boş yol kullanan bir proxy, hedef arka uç hizmetini çağırmadığı için "hedef olmayan" proxy'dir.

Aşağıdaki örnekte gösterildiği gibi, harici bir hizmeti çağırmak için hedef olmayan bir proxy'ye bir hizmet çağrısı 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ışı (işleme süresi veya hata oranları gibi) hakkında analiz bilgileri sağlayamaz. Bu da harici hizmetin performansını değerlendirmeyi zorlaştırır.

Etki

  • Harici hizmetle etkileşim hakkında Analytics bilgileri ( hata kodları, yanıt süresi, hedef performans vb.) mevcut değil
  • Hizmet çağrısını çağırmadan önce veya çağırdıktan sonra gereken belirli bir mantık, genel proxy mantığının bir parçası olarak dahil edilir. Böylece, çağrının anlaşılması ve yeniden kullanılması daha zordur.

En İyi Uygulama

Bir API proxy'si yalnızca tek bir harici hizmetle etkileşim kurarsa proxy, temel tasarım kalıbına uymalıdır. Burada arka uç hizmeti, API proxy'sinin hedef uç noktası olarak tanımlanır. Hedef uç noktasına yönlendirme kuralı olmayan bir proxy, ServiceCall politikasını kullanarak arka uç hizmeti çağırmamalıdır.

Aşağıdaki proxy yapılandırmasında yukarıdaki örnekle aynı davranış uygulanır ancak en iyi uygulamalar izlenir:

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

Hedef uç noktayı çağırmadan önce veya çağırdıktan sonra harici hizmetleri çağırmak istediğiniz karma senaryoları desteklemek için Hizmet açıklama metinlerini kullanın. Hizmet çağrıları, hedef uç nokta çağrısının yerini almaz.

Daha fazla bilgi