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

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Proxy interfejsu API to zarządzana fasada usług backendu. Podstawowa konfiguracja proxy interfejsu API składa się z elementu ProxyEndpoint (określającego adres URL proxy interfejsu API) i elementu TargetEndpoint (określającego adres URL usługi backendu).

Apigee Edge zapewnia dużą elastyczność w zakresie tworzenia zaawansowanych zachowań na podstawie tego wzorca. Możesz na przykład dodawać zasady, aby kontrolować sposób przetwarzania żądania klienta przez interfejs API przed wysłaniem go do usługi backendu, lub modyfikować odpowiedź otrzymaną z usługi backendu przed przekazaniem jej do klienta. Możesz wywoływać inne usługi za pomocą zasad wywoływania usług, dodawać niestandardowe zachowania, dodając kod JavaScript, a nawet tworzyć proxy interfejsu API, które nie wywołuje usługi backendu.

Antywzorzec

Używanie wywołań usług do wywoływania usługi backendu w proxy interfejsu API bez tras do docelowego punktu końcowego jest technicznie możliwe, ale powoduje utratę danych analitycznych o wydajności usługi zewnętrznej.

Proxy interfejsu API, które nie zawiera tras docelowych, może być przydatne w przypadkach, gdy nie trzeba przekazywać wiadomości z żądaniem do elementu TargetEndpoint. Zamiast tego element ProxyEndpoint wykonuje wszystkie niezbędne przetwarzanie. Na przykład element ProxyEndpoint może pobierać dane z wyszukiwania w magazynie klucz-wartość usługi interfejsu API i zwracać odpowiedź bez wywoływania usługi backendu.

W proxy interfejsu API możesz zdefiniować trasę zerową, jak pokazano tutaj:

<RouteRule name="noroute"/>

Proxy korzystające z trasy zerowej to proxy „bez miejsca docelowego”, ponieważ nie wywołuje docelowej usługi backendu.

Technicznie możliwe jest dodanie wywołania usługi do proxy bez miejsca docelowego w celu wywołania usługi zewnętrznej, jak pokazano 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>

Proxy nie może jednak dostarczać informacji analitycznych o zachowaniu usługi zewnętrznej (takich jak czas przetwarzania czy współczynnik błędów), co utrudnia ocenę jej wydajności.

Wpływ

  • Informacje analityczne o interakcji z usługą zewnętrzną ( kody błędów, czas odpowiedzi, wydajność miejsca docelowego itp.) są niedostępne.
  • Wszelka logika wymagana przed lub po wywołaniu usługi jest częścią ogólnej logiki proxy, co utrudnia jej zrozumienie i ponowne wykorzystanie.

Sprawdzona metoda

Jeśli proxy interfejsu API wchodzi w interakcję tylko z 1 usługą zewnętrzną, powinno ono korzystać z podstawowego wzorca projektowego, w którym usługa backendu jest zdefiniowana jako docelowy punkt końcowy proxy interfejsu API. Proxy bez reguł routingu do docelowego punktu końcowego nie powinno wywoływać usługi backendu za pomocą zasady ServiceCallout.

Poniższa konfiguracja proxy implementuje to samo zachowanie co w powyższym przykładzie, 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żywaj wywołań usług do obsługi scenariuszy mashup, w których chcesz wywoływać usługi zewnętrzne przed lub po wywołaniu docelowego punktu końcowego. Wywołania usług nie mają zastępować wywoływania docelowego punktu końcowego

Więcej informacji