Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Политика «Скрипты Python» позволяет добавлять настраиваемые функции Python в поток API-прокси, особенно если необходимая функциональность выходит за рамки стандартных политик 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>
Связанные темы
, Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Политика «Скрипты Python» позволяет добавлять настраиваемые функции Python в поток API-прокси, особенно если необходимая функциональность выходит за рамки стандартных политик 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>