Zasady dotyczące objaśnień przepływu

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.

  1. Zasada FlowCallout String-Handler wywoł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). Elementy Parameter okreś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>
  2. Ten współdzielony przepływ default zawiera zasadę JavaScript SharedStringFunctions, 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>
  3. W współdzielonym przepływie ta zasada JavaScript SharedStringFunctions okreś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>
  4. Ten JavaScript, SharedStringFunctions.js, jest wykonywany przez SharedStringFunctions zasadę JavaScript. Ten skrypt pobiera wartości z zmiennych utworzonych na podstawie elementów Parameter zasady 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);
  5. 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 name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; 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 name zasady otrzyma wartość .

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

apigee.edge.sharedflow.name

Zakres: podczas wykonywania przepływu współdzielonego
Typ: ciąg znaków
Uprawnienia: odczyt

Wartość atrybutu name przepływu współdzielonego.

apigee.edge.flowhook.name

Zakres: podczas wykonywania współdzielonego przepływu dołączonego do punktu zaczepienia przepływu.
Typ: ciąg znaków
Uprawnienia: odczyt

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.

Błędy wdrażania

Nie dotyczy

Powiązane artykuły