Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
Co
Zasada Python Script umożliwia dodawanie niestandardowych funkcji w języku Python do przepływu proxy interfejsu API, zwłaszcza gdy potrzebne funkcje wykraczają poza możliwości standardowych zasad Edge zapewniają.
Obsługa języka Python jest zapewniana przez Jython w wersji 2.5.2. Dodawane biblioteki innych firm muszą być „czystym Pythonem” (czyli zaimplementowane tylko w Pythonie). Więcej informacji o dodawaniu bibliotek znajdziesz w artykule Pliki zasobów.
Zasada Python nie zawiera rzeczywistego kodu. Zamiast tego odwołuje się do zasobu Python
i określa krok w przepływie interfejsu API, w którym jest wykonywany skrypt w Pythonie. Skrypt możesz przesłać za pomocą edytora proxy w interfejsie zarządzania lub dołączyć go do
/resources/py katalogu w proxy interfejsu API, które tworzysz lokalnie.
Przykłady
Zasada i skrypt w Pythonie
Zasada Python Script
<?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 w Pythonie
Poniżej znajdziesz przykład tego, co możesz umieścić w samym skrypcie w Pythonie.
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)
Dokumentacja elementów
<?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 |
Element<ResourceURL>
Ten element określa główny plik w Pythonie, który będzie wykonywany w przepływie interfejsu API. Ten plik możesz przechowywać w zakresie proxy interfejsu API (w katalogu /apiproxy/resources/py w pakiecie proxy interfejsu API lub w sekcji Skrypty w panelu nawigacyjnym edytora proxy interfejsu API) albo w zakresie organizacji lub środowiska, aby można go było używać w wielu proxy interfejsu API, jak opisano w artykule Pliki zasobów. Kod może używać
obiektów, metod i właściwości modelu obiektów JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
| Domyślnie: | Brak |
| Obecność: | Wymagane |
| Typ: | Ciąg znaków |
Element<IncludeURL>
Określa plik w Pythonie, który ma być wczytany jako zależność od głównego pliku w Pythonie określonego za pomocą elementu
<ResourceURL>. Skrypty będą oceniane w kolejności, w jakiej
są wymienione w zasadzie.
Dodaj więcej niż 1 zasób zależności w Pythonie za pomocą dodatkowych
<IncludeURL> elementów.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
| Domyślnie: | Brak |
| Obecność: | Opcjonalny |
| 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>