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 Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
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 |
---|---|
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. | build |
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ę. |
build |
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. |
build |
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>