Política PythonScript

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Qué

La política de secuencias de comandos de Python te permite agregar una funcionalidad de Python personalizada a tu flujo de proxy de API, en especial cuando la funcionalidad que necesitas supera las que proporcionan las políticas listas para usar de Edge.

La compatibilidad con el lenguaje Python se proporciona a través de la versión 2.5.2 de Jython. Las bibliotecas de terceros que agregues deben ser “Python puro” (solo implementado en Python). Para obtener más información sobre cómo agregar bibliotecas, consulta Archivos de recursos.

Una política de Python no contiene código real. En su lugar, una política de Python hace referencia a un recurso de Python y define el paso en el flujo de API en el que se ejecuta la secuencia de comandos de Python. Puedes subir tu secuencia de comandos a través del editor de proxy de la IU de administración o puedes incluirla en el directorio /resources/py de los proxies de API que desarrollas de forma local.

Ejemplos

Política y secuencia de comandos de Python

Política de secuencia de comandos de Python

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Script name="Python-1">
        <DisplayName>Python-1</DisplayName>
        <ResourceURL>py://myscript.py</ResourceURL>
</Script>

En este ejemplo, el elemento, ResourceURL especifica el recurso de secuencia de comandos de Python correspondiente.

Secuencia de comandos de Python

Aquí se muestra lo que podrías incluir en la secuencia de comandos de 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)

Referencia de elementos

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

En la siguiente tabla, se describen los atributos que son comunes a todos los elementos principales de las políticas:

Atributo Descripción Predeterminada Presencia
name

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

No disponible Obligatorias
continueOnError

Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas.

Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle.

false Opcional
enabled

Configúralo como true para aplicar la política.

Configúralo como false para desactivar la política. La política no se aplicará incluso si permanece adjunta a un flujo.

true Opcional
async

Este atributo dejó de estar disponible.

false Funciones obsoletas

Elemento <DisplayName>

Se usan además del atributo name para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

<DisplayName>Policy Display Name</DisplayName>
Predeterminada

No disponible

Si omites este elemento, se usa el valor del atributo name de la política.

Presencia Opcional
Tipo Cadena

Elemento <ResourceURL>

Este elemento especifica el archivo principal de Python que se ejecutará en el flujo de la API. Puedes almacenar este archivo en el permiso del proxy de API (en /apiproxy/resources/py en el paquete del proxy de API o en la sección de secuencias de comandos del panel de navegación del editor de proxy de API), o en los permisos de la organización o del entorno para volver a utilizarse en múltiples proxies de API, como se describe en Archivos de recursos. Tu código puede usar los objetos, los métodos y las propiedades del modelo de objetos de JavaScript.

<ResourceURL>py://myscript.py</ResourceURL>
Predeterminado: Ninguna
Presencia: Obligatorias
Tipo: Cadena

Elemento <IncludeURL>

Especifica un archivo de Python que se cargará como dependencia al archivo principal de Python especificado con el elemento <ResourceURL>. Las secuencias de comandos se evaluarán en el orden en que se incluyan en la política.

Incluye más de un recurso de dependencia de Python con elementos <IncludeURL> adicionales.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
Predeterminado: Ninguna
Presencia: Opcional
Tipo: Cadena

Códigos de error

En esta sección, se describen los códigos y mensajes de error que se muestran, así como las variables de fallas que establece Edge cuando esta política activa un error. Esta información es importante para saber si estás desarrollando reglas de fallas con el propósito de manejar fallas. Para obtener más información, consulta Lo que necesitas saber sobre errores de políticas y Controla fallas.

Errores de entorno de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de falla Estado de HTTP Causa Corregir
steps.script.ScriptEvaluationFailed 500 La política de PythonScript puede arrojar varios tipos diferentes de errores de ScriptExecutionFailed. Los tipos de errores más comunes que aparecen son NameError y ZeroDivisionError.

Errores en la implementación

Estos errores pueden generarse cuando implementas un proxy que contiene esta política.

Nombre del error Causa Corregir
InvalidResourceUrlFormat Si el formato de la URL del recurso especificado en elemento <ResourceURL> o <IncludeURL> de la política de PythonScript no es válida, la implementación del proxy de la API falla.
InvalidResourceUrlReference Si los elementos <ResourceURL> o <IncludeURL> hacen referencia a un archivo de PythonScript que no existe, la implementación del proxy de API falla. El archivo de origen al que se hace referencia debe existir a nivel de proxy de API, entorno u organización.

Variables con fallas

Estas variables se configuran cuando esta política activa un error en el entorno de ejecución. Para obtener más información, consulta Qué debes saber sobre los errores de la política.

Variables Donde Ejemplo
fault.name="fault_name" fault_name es el nombre de la falla, como se indica en la tabla de Errores del entorno de ejecución anterior. El nombre de la falla es la última parte del código de la falla. fault.name Matches "ScriptExecutionFailed"
pythonscript.policy_name.failed policy_name es el nombre especificado por el usuario de la política que generó la falla. pythonscript.PythonScript-1.failed = true

Ejemplo de respuesta de error

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

Ejemplo de regla de falla

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

Temas relacionados