Zasada PythonScript

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 name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekraczać 255 znaków.

Opcjonalnie użyj elementu <DisplayName>, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagany
continueOnError

Ustaw wartość false, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad.

Ustaw wartość true, aby kontynuować wykonywanie przepływu nawet po naruszeniu zasady.

fałsz Opcjonalnie
enabled

Ustaw jako true, aby egzekwować zasadę.

Ustaw zasadę false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem.

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 name zasady.

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.

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ę.
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.

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>

Powiązane artykuły