Zasada PythonScript

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

Co

Zasada skryptu w Pythonie umożliwia dodawanie niestandardowych funkcji Pythona do przepływu serwera proxy interfejsu API, zwłaszcza gdy funkcje wykraczają poza możliwości oferowane przez gotowe zasady Edge.

Obsługa języka Pythona jest zapewniana przez Jython w wersji 2.5.2. Dodane biblioteki innych firm muszą stanowić „czystego Pythona” (zaimplementowane tylko w Pythonie). Więcej informacji o dodawaniu bibliotek znajdziesz w artykule Pliki zasobów.

Zasada Pythona nie zawiera rzeczywistego kodu. Zamiast tego zasada Pythona odwołuje się do zasobu Pythona i określa krok w przepływie interfejsu API, w którym wykonuje się skrypt Pythona. Możesz przesłać skrypt za pomocą edytora serwera proxy w interfejsie zarządzania lub dodać go do katalogu /resources/py na serwerach proxy interfejsów API utworzonych lokalnie.

Sample

Zasady i skrypt Pythona

Zasady dotyczące skryptu w Pythonie

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Script name="Python-1">
        <DisplayName>Python-1</DisplayName>
        <ResourceURL>py://myscript.py</ResourceURL>
</Script>

W tym przykładzie element ResourceURL określa odpowiedni zasób skryptu w Pythonie.

Skrypt Pythona

Tutaj znajdziesz informacje, które możesz umieścić w skrypcie Pythona.

import base64

username = flow.getVariable("request.formparam.client_id")
password = flow.getVariable("request.formparam.client_secret")

base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
authorization = "Basic "+base64string

flow.setVariable("authorizationParam",authorization)

Odwołanie do elementu

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Script name="Python-1">
    <DisplayName>Python-1</DisplayName>
    <ResourceURL>py://myscript.py</ResourceURL>
    <IncludeURL>py://myscript_dependency.py</IncludeURL>
</Script>

Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślne 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

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

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

false Wycofano

Element <DisplayName>

Użyj oprócz atrybutu name, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślne

Nie dotyczy

Jeśli pominiesz ten element, zostanie użyta wartość atrybutu name zasady.

Obecność Opcjonalnie
Typ Ciąg znaków

<ResourceURL>

Ten element określa główny plik Pythona, który zostanie wykonany w przepływie interfejsu API. Możesz przechowywać ten plik w zakresie serwera proxy interfejsu API (w sekcji /apiproxy/resources/py w pakiecie API serwera proxy lub w sekcji Skrypty w panelu nawigacji edytora proxy interfejsu API) albo w zakresach organizacji lub środowisk do ponownego użycia w wielu serwerach proxy interfejsu API, jak opisano w plikach zasobów. Twój kod może korzystać z obiektów, metod i właściwości obiektowego modelu JavaScript.

<ResourceURL>py://myscript.py</ResourceURL>
Domyślnie: Brak
Obecność: Wymagane
Typ: Ciąg znaków

Element<IncludeURL>

Określa plik Pythona do wczytania jako zależność od głównego pliku Pythona określonego za pomocą elementu <ResourceURL>. Skrypty będą oceniane w kolejności, w jakiej są wymienione w zasadzie.

Uwzględnij więcej niż 1 zasób zależności Pythona z dodatkowymi elementami <IncludeURL>.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
Domyślnie: Brak
Obecność: Opcjonalnie
Typ: Ciąg znaków

Kody 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
steps.script.ScriptEvaluationFailed 500 Zasada PythonScript może generować kilka różnych typów błędów ScriptExecutionFailed. Typowe rodzaje błędów to NameError i ZeroDivisionError.

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.

Nazwa błędu Przyczyna Napraw
InvalidResourceUrlFormat Jeśli format adresu URL zasobu określony w elemencie <ResourceURL> lub w elemencie <IncludeURL> zasady PythonScript jest nieprawidłowy, wdrożenie serwera proxy interfejsu API nie powiedzie się.
InvalidResourceUrlReference Jeśli elementy <ResourceURL> lub <IncludeURL> odwołują się do nieistniejącego pliku PythonScript, wdrożenie serwera proxy interfejsu API nie powiedzie się. Przywoływany plik źródłowy musi istnieć na poziomie serwera proxy interfejsu API, środowiska lub organizacji.

Zmienne błędów

Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. fault.name Matches "ScriptExecutionFailed"
pythonscript.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. pythonscript.PythonScript-1.failed = true

Przykładowa odpowiedź na błąd

{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"",
    "detail": {
      "errorcode": "steps.script.ScriptExecutionFailed"
    }
  }
}

Przykładowa reguła błędu

<FaultRule name="PythonScript Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition>
    </Step>
    <Condition>(pythonscript.PythonScript-1.failed = true) </Condition>
</FaultRule>

Powiązane artykuły