Политика PythonScript

Вы просматриваете документацию 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

Внутреннее имя политики. Значение атрибута 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>

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

,

Вы просматриваете документацию 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

Внутреннее имя политики. Значение атрибута 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>

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