Oglądasz dokumentację Apigee Edge.
Wyświetl dokumentację Apigee X.

Co
Zasada języka Python umożliwia dodanie do interfejsu proxy interfejsu API niestandardowych funkcji Pythona, zwłaszcza jeśli potrzebne funkcje są poza standardowymi zasadami Edge.
Obsługę języka Python zapewnia Jython w wersji 2.5.2. Biblioteki zewnętrzne, które dodajesz, muszą być „pure Python” (zaimplementowane wyłącznie w Pythonie). Więcej informacji o dodawaniu bibliotek znajdziesz w artykule Pliki zasobów.
Zasada Pythona nie zawiera żadnego kodu. Zasada Pythona odwołuje się do zasobu Pythona i definiuje krok w procesie interfejsu API, w którym wykonywany jest skrypt Pythona. Skrypt możesz przesłać za pomocą edytora proxy interfejsu zarządzania, ale możesz też umieścić go w katalogu /resources/py
na serwerach proxy interfejsu API, które tworzysz lokalnie.
Sample
Zasady i skrypt w Pythonie
Zasada 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 Python.
Skrypt Python
To pokazuje, co możesz uwzględnić w skrypcie w języku Python.
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 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 opisuje atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślnie | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie użyj elementu |
Nie dotyczy | Wymagany |
continueOnError |
Ustaw wartość Ustaw wartość |
fałsz | Opcjonalnie |
enabled |
Ustaw jako Ustaw zasadę |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
Element <DisplayName>
Używaj atrybutu name
tak, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślnie |
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 interfejsie API. Możesz przechowywać ten plik w zakresie serwera proxy interfejsu API (w sekcji /apiproxy/resources/py
w pakiecie pakietów proxy interfejsu API, w sekcji Skrypty w panelu nawigatora proxy interfejsu API) albo w zakresie organizacji lub środowiska do użycia na wielu serwerach proxy interfejsu API zgodnie z opisem w plikach zasobów. Kod może korzystać z obiektów, metod i właściwości modelu JavaScriptu.
<ResourceURL>py://myscript.py</ResourceURL>
Domyślne: | Brak |
Obecność: | Wymagany |
Typ: | Ciąg znaków |
element<IncludeURL>
Określa plik Pythona, który ma zostać załadowany jako zależność od głównego pliku Pythona określonego za pomocą elementu <ResourceURL>
. Skrypty będą sprawdzane w kolejności, w jakiej są wymienione w zasadach.
Uwzględnij więcej niż 1 zależność w Pythonie z dodatkowymi elementami <IncludeURL>
.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
Domyślne: | Brak |
Obecność: | Opcjonalnie |
Typ: | Ciąg znaków |
Kody błędów
W tej sekcji opisano kody błędów i zwracane komunikaty o błędach, które są zmieniane przez Edge po wywołaniu tej zasady. Ta informacja jest ważna, gdy opracowujesz reguły obsługi błędów. Więcej informacji znajdziesz w artykułach Co musisz wiedzieć o błędach zasad i Obsługa 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ć różne typy błędów ScriptExecutionFailed. Typowe typy błędów to NameError i ZeroDivisionError. | build |
Błędy wdrażania
Te błędy mogą wystąpić, gdy wdrażasz serwer proxy zawierający tę zasadę.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidResourceUrlFormat |
Jeśli format adresu URL zasobu określony w elemencie <ResourceURL> lub 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ę.
Wskazany plik źródłowy musi istnieć na poziomie serwera proxy, środowiska lub organizacji. |
build |
Zmienne błędów
Zmienne te są ustawiane, gdy ta zasada powoduje błąd w czasie działania. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu, zgodnie z tabelą Błędy środowiska wykonawczego. Nazwa błędu jest ostatnią częścią 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 awarii
<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>