Antywzór: użycie zasady objaśnień dotyczących usługi do wywoływania usługi backendu w serwerze proxy interfejsu API bez docelowego adresu URL

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Serwer proxy interfejsu API to zarządzana fasadą dla usług backendu. Podstawowa konfiguracja serwera proxy interfejsu API składa się z punktu ProxyEndpoint (adresu URL serwera proxy interfejsu API) i TargetEndpoint (określającego adres URL usługi backendu).

Apigee Edge zapewnia dużą elastyczność tworzenia zaawansowanych funkcji opartych na tym wzorcu. Możesz na przykład dodać zasady kontrolujące sposób, w jaki interfejs API przetwarza żądanie klienta przed wysłaniem go do usługi backendu lub manipulować odpowiedzią otrzymaną z usługi backendu przed przekazaniem go do klienta. Możesz wywoływać inne usługi za pomocą zasad dotyczących wywołań usługi, dodawać niestandardowe zachowania przez dodanie kodu JavaScript, a nawet utworzyć serwer proxy interfejsu API, który nie wywołuje usługi backendu.

Antywzór

Używanie wywołań usługi w celu wywołania usługi backendu na serwerze proxy interfejsu API bez tras do docelowego punktu końcowego jest technicznie możliwe, ale powoduje utratę danych analitycznych dotyczących wydajności usługi zewnętrznej.

Serwer proxy interfejsu API, który nie zawiera tras docelowych, może być przydatny, gdy nie trzeba przekazywać komunikatu żądania do punktu końcowego docelowego. Zamiast tego ProxyEndpoint wykonuje wszystkie wymagane przetwarzanie. ProxyEndpoint może na przykład pobierać dane z wyszukiwania do magazynu par klucz-wartość usługi API i zwracać odpowiedź bez wywoływania usługi backendu.

Możesz zdefiniować pustą trasę na serwerze proxy interfejsu API, jak pokazano tutaj:

<RouteRule name="noroute"/>

Serwer proxy używający trasy o wartości null jest serwerem proxy bez celu, ponieważ nie wywołuje docelowej usługi backendu.

Technicznie jest możliwe dodanie wywołania usługi do docelowego serwera proxy w celu wywołania usługi zewnętrznej, tak jak w przykładzie poniżej:

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

Serwer proxy nie może jednak dostarczyć danych analitycznych dotyczących zachowania usługi zewnętrznej (takich jak czas przetwarzania czy odsetki błędów), co utrudnia ocenę wydajności takiej usługi.

Wpływ

  • Informacje Analytics dotyczące interakcji z usługą zewnętrzną ( kody błędów, czas reakcji, docelowa wydajność itp.) są niedostępne
  • Każda logika wymagana przed wywołaniem objaśnienia usługi lub po nim jest uwzględniona w ogólnej logice serwera proxy, co utrudnia jego zrozumienie i ponowne wykorzystanie.

Sprawdzona metoda

Jeśli serwer proxy interfejsu API wchodzi w interakcję tylko z jedną usługą zewnętrzną, powinien być zgodny z podstawowym wzorcem projektowania, w którym usługa backendu jest definiowana jako docelowy punkt końcowy serwera proxy interfejsu API. Serwer proxy bez reguł routingu do docelowego punktu końcowego nie powinien wywoływać usługi backendu za pomocą zasady ServiceCallout.

Poniższa konfiguracja proxy działa tak samo jak przykład powyżej, ale jest zgodna ze sprawdzonymi metodami:

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

Użyj wywołań usługi do obsługi scenariuszy mashupów, w których chcesz wywoływać usługi zewnętrzne przed wywołaniem docelowego punktu końcowego lub po nim. Objaśnienia dotyczące usługi nie zastępują wywołania docelowego punktu końcowego.

Więcej informacji