Вы просматриваете документацию 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
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>