Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Zasada RaiseFault umożliwia programistom interfejsów API inicjowanie przepływu błędów i ustawianie zmiennych błędów.
w treści odpowiedzi i ustawić odpowiednie kody stanu odpowiedzi. Można również użyć funkcji RaiseFault
zasady do ustawiania zmiennych przepływu związanych z błędem, np. fault.name
, fault.type
,
i fault.category
. Ponieważ te zmienne są widoczne w danych analitycznych i logach dostępu do routera
do debugowania, ważne jest, aby dokładnie zidentyfikować błąd.
Za pomocą zasady RaiseFault możesz traktować określone warunki jako błędy, nawet jeśli rzeczywisty błąd został
nie wystąpiła w innej zasadzie ani na serwerze backendu serwera proxy interfejsu API. Na przykład:
serwer proxy do wysyłania niestandardowego komunikatu o błędzie do aplikacji klienckiej za każdym razem, gdy odpowiedź backendu
[body] zawiera ciąg znaków unavailable
, możesz więc wywołać zasadę RaiseFault jako
w tym fragmencie kodu:
<!-- /antipatterns/examples/raise-fault-conditions-1.xml --> <TargetEndpoint name="default"> ... <Response> <Step> <Name>RF-Service-Unavailable</Name> <Condition>(message.content Like "*unavailable*")</Condition> </Step> </Response> ...
Nazwa zasady RaiseFault jest widoczna jako fault.name
w
API Monitoring oraz jako x_apigee_fault_policy
w logach dostępu Analytics i routera.
Pomoże to w łatwym zdiagnozowaniu przyczyny błędu.
Antywzór
Użycie zasady RaiseFault w ramach reguł FaultRules po tym, jak inna zasada zwróciła już błąd
Przyjrzyjmy się przykładowi poniżej, w którym zasada OAuthV2 w procesie proxy interfejsu API zakończyła się niepowodzeniem z użyciem parametru InvalidAccessToken
. W przypadku niepowodzenia Edge ustawi w fault.name
jako InvalidAccessToken
, wpisz
przepływu błędów i wykonanie wszystkich zdefiniowanych reguł FaultRules. W regule FaultRule znajduje się zasada RaiseFault o nazwie
RaiseFault
, który wysyła dostosowaną odpowiedź błędu za każdym razem, gdy InvalidAccessToken
występuje błąd. Jednak użycie zasady RaiseFault w regule FaultRule oznacza, że fault.name
jest zastępowana i maskuje prawdziwą przyczynę błędu.
<!-- /antipatterns/examples/raise-fault-conditions-2.xml --> <FaultRules> <FaultRule name="generic_raisefault"> <Step> <Name>RaiseFault</Name> <Condition>(fault.name equals "invalid_access_token") or (fault.name equals "InvalidAccessToken")</Condition> </Step> </FaultRule> </FaultRules>
Używanie zasady RaiseFault w regule błędów we wszystkich warunkach
W poniższym przykładzie zasada RaiseFault o nazwie RaiseFault
jest wykonywana, jeśli fault.name
nie jest RaiseFault
:
<!-- /antipatterns/examples/raise-fault-conditions-3.xml --> <FaultRules> <FaultRule name="fault_rule"> .... <Step> <Name>RaiseFault</Name> <Condition>!(fault.name equals "RaiseFault")</Condition> </Step> </FaultRule> </FaultRules>
Tak jak w pierwszym scenariuszu, kluczowe zmienne błędów fault.name
, fault.code
,
i fault.policy
są zastępowane nazwą zasady RaiseFault. Takie działanie sprawia,
bez dostępu do logu czasu ustalenie, która zasada rzeczywiście spowodowała błąd, jest prawie niemożliwe
plik zawierający błąd lub odtworzenie problemu.
Użycie zasady RaiseFault w celu zwrócenia odpowiedzi HTTP 2xx poza przepływem błędu.
W poniższym przykładzie zasada RaiseFault o nazwie HandleOptionsRequest
jest wykonywana, gdy
czasownik żądania to OPTIONS
:
<!-- /antipatterns/examples/raise-fault-conditions-4.xml --> <PreFlow name="PreFlow"> <Request> … <Step> <Name>HandleOptionsRequest</Name> <Condition>(request.verb Equals "OPTIONS")</Condition> </Step> … </PreFlow>
Intencją jest natychmiastowe zwrócenie odpowiedzi klientowi interfejsu API bez przetwarzania innych zasad. Prowadzi to jednak do wprowadzających w błąd danych analitycznych, ponieważ zmienne błędów zawierają Nazwa zasady ZwiększFault, co utrudnia debugowanie serwera proxy. Właściwy sposób implementacji pożądanym działaniem jest używanie przepływów ze specjalnymi warunkami, tak jak to opisano w Dodanie obsługi CORS.
Wpływ
Zastosowanie zasady RaiseFault w opisany powyżej sposób powoduje zastąpienie kluczowych zmiennych błędów za pomocą parametru
Nazwa zasady RaiseFault zamiast nazwy zasady, która powoduje błąd. W logach dostępu Analytics i NGINX
zmienne x_apigee_fault_code
i x_apigee_fault_policy
zostaną zastąpione. W narzędziu API Monitoring Fault Code
i Fault Policy
są zastąpione. Utrudnia to rozwiązywanie problemów
ustalenie, która zasada jest prawdziwą przyczyną niepowodzenia.
Na zrzucie ekranu poniżej z narzędzia API Monitoring
zobaczysz, że zasady dotyczące kodu błędu i błędu zostały zastąpione ogólnym RaiseFault
przez co niemożliwe jest ustalenie głównej przyczyny błędu na podstawie dzienników:
Sprawdzona metoda
Gdy zasada Edge zgłasza błąd i chcesz dostosować komunikat w odpowiedzi o błędzie, używa zasad AssignMessage lub JavaScript zamiast zasady RaiseFault.
Zasadę RaiseFault należy używać w przepływie innym niż błąd. Oznacza to, że za pomocą funkcji RaiseFault w celu wyeliminowania określonego błędu jako błąd, nawet jeśli żaden błąd nie wystąpił w zasadzie ani na serwerze backendu. serwera proxy interfejsu API. Możesz na przykład użyć zasady RaiseFault, aby zasygnalizować, że wymagane dane wejściowe brakuje parametrów lub mają one nieprawidłową składnię.
Tej funkcji możesz też użyć w regule błędu, jeśli chcesz wykrywać błąd podczas przetwarzania z powodu błędu. Na przykład sam moduł obsługi błędów może powodować błąd, który chcesz zasygnalizować za pomocą funkcji RaiseFault.