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 hafif bileşendir. Temel bir API proxy yapılandırması, ProxyEndpoint (API proxy'sinin URL'sini tanımlar) ve TargetEndpoint'ten (arka uç hizmetinin URL'sini tanımlar) oluşur.

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

Antipattern

Hedef uç noktaya giden rotası olmayan bir API proxy'sinde arka uç hizmeti çağırmak için hizmet çağrılarını kullanmak teknik olarak mümkündür ancak harici hizmetin performansı hakkındaki analiz verilerinin kaybolmasına neden olur.

Hedef rotaları içermeyen bir API proxy'si, istek mesajını TargetEndpoint'e yönlendirmeniz gerekmediği durumlarda faydalı olabilir. Bunun yerine, ProxyEndpoint gerekli tüm işlemleri gerçekleştirir. Örneğin, ProxyEndpoint, API hizmetinin anahtar/değer deposunda arama yaparak verileri alabilir ve bir arka uç hizmetini çağırmadan yanıtı döndürebilir.

Bir API proxy'sinde null Route tanımlayabilirsiniz. Örneğin:

<RouteRule name="noroute"/>

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

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

Etki

  • Harici hizmetle etkileşimle ilgili analiz bilgileri ( hata kodları, yanıt süresi, hedef performans vb.) kullanılamıyor.
  • Hizmet çağrısı çağrılmadan önce veya sonra gereken tüm özel mantık, genel proxy mantığının bir parçası olarak dahil edilir. Bu durum, mantığın 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şimde bulunuyorsa proxy, arka uç hizmetinin API proxy'sinin hedef uç noktası olarak tanımlandığı temel tasarım kalıbını izlemelidir. Hedef uç noktaya yönlendirme kuralı olmayan bir proxy, ServiceCallout 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 uygulamalara uygundur:

<!-- /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 sonra harici hizmetleri çağırmak istediğiniz mashup senaryolarını desteklemek için hizmet çağrılarını kullanın. Hizmet çağrıları, hedef uç nokta çağrısının yerini almaz.

Daha fazla bilgi