Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Co
Zasada dotycząca skryptu w języku Python umożliwia dodawanie dostosowanych funkcji Pythona do procesu serwera proxy interfejsu API, zwłaszcza wtedy, gdy potrzebne funkcje wykraczają poza gotowe zasady dotyczące Edge i udostępniania.
Obsługa języka Python jest świadczona przez Jython wersji 2.5.2. Dodawane przez Ciebie biblioteki innych firm muszą być „czystego Pythona” (zaimplementowane tylko w Pythonie). Więcej informacji o dodawaniu bibliotek znajdziesz w sekcji Pliki zasobów.
Zasada Pythona nie zawiera rzeczywistego kodu. Zamiast tego zasada Pythona odwołuje się do tego języka.
i określa krok w przepływie interfejsu API, na którym wykonuje się skrypt Pythona. Możesz przesłać
za pomocą edytora serwera proxy interfejsu zarządzania. Można też umieścić go w
Katalog /resources/py
na serwerach proxy interfejsu API, które tworzysz lokalnie.
Przykłady
Python – zasady pismo
Zasada skryptu Python
<?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 skrypt Pythona .
Skrypt Pythona
Tutaj możesz zobaczyć, co można 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>
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 |
<ResourceURL> element
Ten element określa główny plik Pythona, który zostanie uruchomiony w przepływie interfejsu API. Możesz przechowywać
ten plik w zakresie serwera proxy interfejsu API (w sekcji /apiproxy/resources/py
na serwerze proxy API
pakietu lub w sekcji Skrypty w panelu Nawigator edytora serwera proxy API bądź na stronie
zakresy organizacji lub środowiska do ponownego wykorzystania na wielu serwerach proxy interfejsu API, jak opisano w
Pliki zasobów. W Twoim kodzie może być używana sekcja
obiekty, metody i właściwości obiektowego modelu JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
Domyślne: | Brak |
Obecność: | Wymagane |
Typ: | Ciąg znaków |
<IncludeURL> element
Określa plik Pythona do załadowania jako zależności od głównego pliku Pythona określonego za pomocą metody
<ResourceURL>
element. Skrypty zostaną ocenione w kolejności, w której
są wymienione w zasadach.
Uwzględnij więcej niż jeden zasób zależności Pythona z dodatkowymi
<IncludeURL>
elementów.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
Domyślne: | Brak |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Kody błędów
W tej sekcji opisano zwracane kody błędów i komunikaty o błędach oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. To ważna informacja jeśli tworzysz reguły błędów obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami
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 zgłaszać różne typy błędów ScriptExecutionFailed. Powszechnie które obejmują błędy NameError i ZeroDivisionError. | build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidResourceUrlFormat |
Jeśli format adresu URL zasobu podany w tagu <ResourceURL> lub
element <IncludeURL> zasady PythonScript jest nieprawidłowy, nie uda się wdrożyć serwera proxy interfejsu API. |
build |
InvalidResourceUrlReference |
Jeśli elementy <ResourceURL> lub <IncludeURL>
odwołują się do pliku PythonScript, który nie istnieje, wdrożenie serwera proxy interfejsu API się nie uda.
Wskazany 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 ta zasada wywołuje błąd w czasie działania. Aby dowiedzieć się więcej, zapoznaj się z artykułem Co musisz wiedzieć o błędach związanych z naruszeniem zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | 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>