Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
Użyj zasady FlowCallout, aby wywołać współdzielony przepływ z proxy interfejsu API lub innego współdzielonego przepływu.
W współdzielonym przepływie tworzysz sekwencję kroków, których możesz używać wielokrotnie w czasie działania z wielu miejsc. Te kroki są implementowane jako zasady, tak jak w przypadku proxy interfejsu API. Zasada FlowCallout umożliwia wywoływanie współdzielonego przepływu z proxy interfejsu API i innych współdzielonych przepływów. Działa ona jak wywołanie funkcji w tradycyjnym języku programowania.
- Wyobraź sobie na przykład, że masz współdzielony przepływ z funkcjami zabezpieczeń, takimi jak weryfikacja klucza interfejsu API, sprawdzanie poprawności tokena OAuth i ochrona za pomocą wyrażeń regularnych. Ten przepływ współdzielony reprezentuje Twoją konwencję sprawdzania żądań przychodzących. Za pomocą zasad FlowCallout możesz wywoływać ten współdzielony przepływ z wielu proxy interfejsu API.
- Możesz wywołać jeden współdzielony przepływ z innego, implementując zasadę FlowCallout w przepływie współdzielonym.
Przykłady
Weryfikowanie klucza interfejsu API w przepływie współdzielonym
W tym przykładzie współdzielony przepływ służy do wykonywania typowych zadań związanych z bezpieczeństwem. W tym przypadku przepływ współdzielony sprawdza poprawność klucza interfejsu API. Proxy interfejsu API i inne współdzielone przepływy mogą używać zasady FlowCallout do wywoływania tego współdzielonego przepływu.
Ta definicja współdzielonego przepływu zawiera zasadę Verify-API-Key, która jest wykonywana gdy współdzielony przepływ jest wywoływany przez zasadę FlowCallout w proxy interfejsu API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SharedFlow name="default">
<Step>
<Name>Verify-API-Key</Name>
</Step>
</SharedFlow>Zasada VerifyAPIKey w poprzednim współdzielonym przepływie pobiera wartość klucza i weryfikuje ją.
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
<DisplayName>Verify API Key</DisplayName>
<APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>Ta zasada FlowCallout, używana w proxy interfejsu API, wywołuje poprzedni przepływ współdzielony, aby
zweryfikować klucz interfejsu API. Pakiet przepływu współdzielonego verify-apikey-shared (nie jest tu pokazany)
konfiguruje przepływ współdzielony w taki sam sposób, jak pakiet APIProxy konfiguruje proxy.
<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout">
<DisplayName>Auth Flow Callout</DisplayName>
<SharedFlowBundle>verify-apikey-shared</SharedFlowBundle>
</FlowCallout>Przekazywanie parametrów do współdzielonego przepływu
Ten przykład pokazuje, jak przekazywać parametry z zasady FlowCallout do współdzielonego przepływu. W tym przypadku zasada FlowCallout wywołuje przepływ współdzielony, który ma wykonywać typowe funkcje obsługi ciągów znaków. Współdzielony przepływ zawiera JavaScript, który łączy dane wejściowe, zamienia je na małe litery lub wykonuje obie te czynności. Zasada FlowCallout definiuje parametry, które określają ciąg wejściowy, wyjściowy i sposób postępowania z danymi wejściowymi.
Zasada FlowCallout
String-Handlerwywołuje współdzielony przepływ, przekazując parametry określające zmienną, w której mają być przechowywane dane wyjściowe współdzielonego przepływu, operację współdzielonego przepływu, która ma być używana, oraz dane wejściowe (w tym przypadku literał ciągu znaków, ale może to być też zmienna przepływu). ElementyParameterokreślają nazwy i wartości zmiennych do tworzenia w czasie działania. Współdzielony przepływ może pobierać te zmienne do użycia w swoim kodzie.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="operations">concatenate tolowercase</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>Ten współdzielony przepływ
defaultzawiera zasadę JavaScriptSharedStringFunctions, która jest wykonywana, gdy współdzielony przepływ jest wywoływany przez zasadę FlowCallout.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>SharedStringFunctions</Name> </Step> </SharedFlow>W współdzielonym przepływie ta zasada JavaScript
SharedStringFunctionsokreśla plik JavaScript SharedStringFunctions.js z kodem do wykonania.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions"> <DisplayName>SharedStringFunctions</DisplayName> <Properties/> <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL> </Javascript>
Ten JavaScript, SharedStringFunctions.js, jest wykonywany przez
SharedStringFunctionszasadę JavaScript. Ten skrypt pobiera wartości z zmiennych utworzonych na podstawie elementówParameterzasady FlowCallout.// Input value from the calling API proxy. var handledString = context.getVariable("input"); // Variable to use for output from this script. var outputVariable = context.getVariable("outputVariable"); // A space-separated list of things to do to the input string. // Convert to lower case to handle unintentional capitals in configuration. var operation = context.getVariable("operations").toLowerCase(); // If "lowercase" was given as an operation, convert the input to lowercase. if (operation.includes("tolowercase")) { handledString = handledString.toLowerCase(); } // If "concatenate" was given as an operation, concatenate the input. if (operation.includes("concatenate")) { handledString = handledString.replace(/\s+/g, ''); } // Assign the resulting string to the output variable specified by // the calling API proxy. context.setVariable(outputVariable, handledString);
- Wykonanie wraca z zasady JavaScript do współdzielonego przepływu, a następnie do zasady FlowCallout w źródłowym proxy interfejsu API.
Dokumentacja elementów
Poniżej znajdziesz elementy i atrybuty, które możesz skonfigurować w tej zasadzie:
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
<DisplayName>Custom label used in UI</DisplayName>
<SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle>
</FlowCallout>Atrybuty <FlowCallout>
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
| Atrybut | Opis | Domyślny | Obecność |
|---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> element
Używaj oprócz atrybutu name do oznaczania zasady w
edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
| Domyślny |
Nie dotyczy Jeśli pominiesz ten element, atrybut |
|---|---|
| Obecność | Opcjonalnie |
| Typ | Ciąg znaków |
Element <SharedFlowBundle>
Określa nazwę współdzielonego przepływu, który ma zostać wywołany. Wartość tego elementu powinna być taka sama jak wartość atrybutu name elementu docelowego SharedFlowBundle.
<SharedFlowBundle/>
W najprostszym przykładzie jako wartość tego
elementu podajesz nazwę wywoływanego przepływu współdzielonego. Oznacza to, że wartość tego elementu musi być taka sama jak wartość atrybutu name
przepływu współdzielonego.
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
| Domyślna | Nie dotyczy |
| Obecność |
Wymagane. |
| Typ | Nie dotyczy |
Atrybuty
Brak.
Element <Parameter>
Określa parametr i wartość (lub źródło wartości), które mają być przekazywane jako zmienna do współdzielonego przepływu wywoływanego przez tę zasadę.
Za pomocą parametru możesz określić wartość (lub zmienną zawierającą wartość), która ma być przekazywana do współdzielonego przepływu wywoływanego przez zasadę. Jest to koncepcyjnie podobne do określania parametru w wywołaniu funkcji. Podobnie jak w przypadku parametru funkcji, wartość parametru FlowCallout może różnić się w zależności od kontekstu wywołania współdzielonego przepływu.
Parametry FlowCallout są widoczne tylko podczas wykonywania przepływu współdzielonego.
Składnia
Możesz użyć tego elementu z dowolną z tych form składni. Pamiętaj, że w przypadku użycia wartości literalnej format określonej wartości będzie zależeć od kodu, który ją wykorzystuje.
<!- A literal value in an attribute. --/> <Parameter name="parameter-name" value='parameter-value' /> <!- A reference to a variable in an attribute. --/> <Parameter name="parameter-name" ref='source-variable-name' /> <!- A literal value in the element content. --/> <Parameter name="parameter-name">parameter-value</Parameter> <!- An reference to an attribute in the element content. --/> <Parameter name="parameter-name">{source-variable-name}</Parameter>
Przykład
Ta zasada FlowCallout String-Handler przekazuje parametry, które określają, gdzie
mają być przechowywane dane wyjściowe przepływu współdzielonego i jakie dane wejściowe mają być używane. Elementy Parameter
określają nazwy i wartości zmiennych, które mają być tworzone w czasie działania. Współdzielony przepływ może pobierać
te zmienne do użycia w swoim kodzie.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
<DisplayName>String Handler</DisplayName>
<Parameters>
<Parameter name="input">Gladys Kravitz</Parameter>
<Parameter name="outputVariable">string.handler.output</Parameter>
</Parameters>
<SharedFlowBundle>StringHandler</SharedFlowBundle>
</FlowCallout>| Domyślna | Nie dotyczy |
| Obecność |
Wymagane. |
| Typ | Nie dotyczy |
Atrybuty
| Atrybut | Opis | Domyślna | Obecność | Typ |
|---|---|---|---|---|
| name | Nazwa zmiennej czasu działania, która ma zostać utworzona za pomocą tego parametru. | Brak. | Wymagane. | Ciąg znaków |
| ref |
Zmienna zawierająca wartość, która ma być używana w czasie działania. Pomiń ten atrybut, jeśli określasz wartość literalną. |
Brak. | Opcjonalnie. | Ciąg znaków |
| value | Wartość, która ma być używana w zmiennej czasu działania utworzonej za pomocą tego parametru. Pomiń ten atrybut, jeśli określasz nazwę zmiennej, która ma być źródłem wartości. | Brak. | Opcjonalnie. | Ciąg znaków |
Element <Parameters>
Określa zestaw elementów <Parameter>, które mają być przekazywane jako zmienne do współdzielonego przepływu wywoływanego przez tę zasadę.
Składnia
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
| Domyślna | Nie dotyczy |
| Obecność |
Opcjonalnie. |
| Typ | Nie dotyczy |
Atrybuty
Brak.
Schematy
Zmienne przepływu
Zmienne przepływu umożliwiają dynamiczne działanie zasad i przepływów w czasie działania na podstawie nagłówków HTTP , treści wiadomości lub kontekstu przepływu. Więcej informacji o zmiennych przepływu znajdziesz w dokumentacji zmiennych.
| Zmienna | Opis |
|---|---|
|
|
Zakres: podczas wykonywania przepływu współdzielonego Wartość atrybutu name przepływu współdzielonego. |
|
|
Zakres: podczas wykonywania współdzielonego przepływu dołączonego do punktu zaczepienia przepływu. Nazwa punktu zaczepienia przepływu. |
Dokumentacja błędów
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, a także zmienne błędów ustawiane przez Edge, gdy ta zasada aktywuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
| Kod błędu | Stan HTTP | Przyczyna | Napraw |
|---|---|---|---|
flow.SharedFlowNotFound |
500 | Przepływ udostępniony nie istnieje albo przepływ udostępniony istnieje, ale nie został wdrożony. | build |
Błędy wdrażania
Nie dotyczy
Powiązane artykuły
- Tworzenie przepływów współdzielonych: Przepływy współdzielone wielokrotnego użytku
- Wykonywanie współdzielonych przepływów w wielu proxy: dołączanie współdzielonego przepływu za pomocą punktu zaczepienia przepływu