Политика PythonScript

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Что

Политика Python Script позволяет вам добавлять настраиваемые функции Python в поток прокси-сервера API, особенно если нужные вам функции выходят за рамки того, что предоставляют готовые политики Edge.

Поддержка языка Python обеспечивается через Jython версии 2.5.2 . Добавляемые вами сторонние библиотеки должны быть «чистыми» на Python (реализованными только на Python). Подробнее о добавлении библиотек см. в разделе Файлы ресурсов .

Политика Python не содержит реального кода. Вместо этого политика Python ссылается на ресурс Python и определяет шаг в потоке API, на котором выполняется сценарий Python. Вы можете загрузить свой сценарий через редактор прокси-сервера пользовательского интерфейса управления или включить его в каталог /resources/py в прокси-серверы API, которые вы разрабатываете локально.

Образцы

Политика и сценарий Python

Политика 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>

В этом примере элемент ResourceURL указывает соответствующий ресурс сценария Python.

Python-скрипт

Здесь показано, что вы можете включить в сам скрипт 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)

Ссылка на элемент

<?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>

В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:

Атрибут Описание По умолчанию Присутствие
name

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы отключить политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <ResourceURL>

Этот элемент указывает основной файл Python, который будет выполняться в потоке API. Вы можете сохранить этот файл в области прокси API (в разделе /apiproxy/resources/py в пакете прокси API или в разделе «Сценарии» на панели «Навигатор» редактора прокси API) или в областях организации или среды для повторного использования на нескольких прокси API. , как описано в разделе Файлы ресурсов . Ваш код может использовать объекты, методы и свойства объектной модели JavaScript .

<ResourceURL>py://myscript.py</ResourceURL>
По умолчанию: Никто
Присутствие: Необходимый
Тип: Нить

Элемент <IncludeURL>

Указывает файл Python, который будет загружен как зависимость от основного файла Python, указанного с помощью элемента <ResourceURL> . Сценарии будут оцениваться в том порядке, в котором они перечислены в политике.

Включите более одного ресурса зависимостей Python с дополнительными элементами <IncludeURL> .

<IncludeURL>py://myscript_dependency.py</IncludeURL>
По умолчанию: Никто
Присутствие: Необязательный
Тип: Нить

Коды ошибок

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникнуть при выполнении политики.

Код неисправности Статус HTTP Причина Исправить
steps.script.ScriptEvaluationFailed 500 Политика PythonScript может выдавать несколько различных типов ошибок ScriptExecutionFailed. Часто встречающиеся типы ошибок включают NameError и ZeroDivisionError .

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина Исправить
InvalidResourceUrlFormat Если формат URL-адреса ресурса, указанный в элементе <ResourceURL> или <IncludeURL> политики PythonScript, недействителен, развертывание прокси-сервера API завершается неудачей.
InvalidResourceUrlReference Если элементы <ResourceURL> или <IncludeURL> ссылаются на несуществующий файл PythonScript, развертывание прокси-сервера API завершается неудачно. Исходный файл, на который есть ссылка, должен существовать либо на уровне прокси-сервера API, либо на уровне среды, либо на уровне организации.

Переменные неисправности

Эти переменные устанавливаются, когда эта политика вызывает ошибку во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "ScriptExecutionFailed"
pythonscript. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. pythonscript.PythonScript-1.failed = true

Пример ответа об ошибке

{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"",
    "detail": {
      "errorcode": "steps.script.ScriptExecutionFailed"
    }
  }
}

Пример правила неисправности

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

Связанные темы