Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Правило Python Script позволяет добавить в поток прокси-сервера API настраиваемые функции Python, особенно если вам нужно что-то, что не предусмотрено в стандартных правилах Edge.
Поддержка языка Python обеспечивается с помощью Jython версии 2.5.2. Сторонние библиотеки, которые вы добавляете, должны быть написаны на чистом Python (реализованы только на Python). Подробнее о том, как добавлять библиотеки…
Правило Python не содержит кода. Вместо этого политика Python ссылается на ресурс Python и определяет шаг в потоке API, на котором выполняется скрипт Python. Вы можете загрузить скрипт через прокси-редактор интерфейса управления или включить его в каталог /resources/py в прокси API, которые вы разрабатываете локально.
Примеры
Правила использования Python и скрипт
Правила в отношении скриптов Python
<?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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
Элемент<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. | build |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidResourceUrlFormat |
Если формат URL ресурса, указанного в элементе <ResourceURL> или <IncludeURL> правила PythonScript, недопустим, развертывание прокси-сервера API завершится неудачно. |
build |
InvalidResourceUrlReference |
Если элементы <ResourceURL> или <IncludeURL> ссылаются на несуществующий файл PythonScript, развертывание прокси-сервера API завершится неудачно.
Указанный исходный файл должен существовать на уровне прокси-сервера API, среды или организации. |
build |
Переменные ошибок
Эти переменные задаются, когда правило вызывает ошибку во время выполнения. Подробнее о нарушениях правил…
| Переменные | Место | Пример |
|---|---|---|
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>