Política PythonScript

Esta página se aplica à Apigee e à Apigee híbrida.

Confira a documentação da Apigee Edge.

Ícone da política

O que

Com a política de script do Python, você pode adicionar funcionalidades Python personalizadas ao fluxo de proxy da API, especialmente quando você precisa de funcionalidades que as políticas prontas para uso da Apigee não oferecem.

Esta é uma política extensível. O uso dela pode ter implicações no custo ou na utilização, dependendo da sua licença da Apigee. Para informações sobre tipos de política e implicações de uso, consulte Tipos de política.

O suporte à linguagem Python é fornecido pelo Jython versão 2.5.2. As bibliotecas de terceiros adicionadas precisam ser "Python puro" (implementadas apenas em Python). Para mais informações sobre como adicionar bibliotecas, consulte Arquivos de recursos.

Uma política do Python não contém um código real. Em vez disso, uma política do Python faz referência a um recurso do Python e define a etapa no fluxo da API em que o script do Python é executado. É possível fazer upload do script usando o editor de proxy da IU da Apigee ou incluí-lo no diretório /resources/py nos proxies da API desenvolvidos localmente.

Amostras

Política e script do Python

Política de script do Python

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

Neste exemplo, o elemento ResourceURL especifica o recurso de script Python relevante.

Script do Python

Mostra o que você pode incluir no próprio script 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)

Referência de elemento

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

A tabela a seguir descreve atributos comuns a todos os elementos pai de políticas:

Atributo Descrição Padrão Presence
name

O nome interno da política. O valor do atributo name pode conter letras, números, espaços, hifens, sublinhados e pontos. Esse valor não pode exceder 255 caracteres.

Opcionalmente, use o elemento <DisplayName> para rotular a política no editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.

N/A Obrigatório
continueOnError

Defina como false para retornar um erro quando uma política falhar. Esse é o comportamento esperado na maioria das políticas.

Defina como true para que a execução do fluxo continue mesmo depois que uma política falhar. Consulte também:

false Opcional
enabled

Defina como true para aplicar a política.

Defina como false para desativar a política. A política não será aplicada mesmo se ela permanecer anexada a um fluxo.

true Opcional
async

Esse atributo está obsoleto.

false Descontinuado

Elemento <DisplayName>

Use em conjunto com o atributo name para rotular a política no editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.

<DisplayName>Policy Display Name</DisplayName>
Padrão

N/A

Se você omitir esse elemento, será usado o valor do atributo name da política.

Presence Opcional
Tipo String

<ResourceURL> element

Esse elemento especifica o arquivo principal do Python que será executado no fluxo da API. É possível armazenar esse arquivo no escopo do proxy da API (em /apiproxy/resources/py no pacote do proxy da API ou na seção "Scripts" do painel de navegação do editor de proxy da API) ou no escopo da organização ou do ambiente para reutilização em vários proxies de API, conforme descrito em Arquivos de recurso. O código pode usar os objetos, métodos e propriedades do modelo de objeto JavaScript.

<ResourceURL>py://myscript.py</ResourceURL>
Padrão: Nenhum
Presença: Obrigatório
Tipo: String

Elemento <IncludeURL>

Especifica um arquivo Python que será carregado como dependência ao arquivo principal do Python especificado com o elemento <ResourceURL>. Os scripts serão avaliados na ordem em que estão listados na política.

Inclua mais de um recurso de dependência do Python com elementos <IncludeURL> adicionais.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
Padrão: Nenhum
Presença: Opcional
Tipo: String

Códigos de erro

Nesta seção, descrevemos os códigos de falha e as mensagens de erro retornadas e as variáveis com falha definidas pela Apigee quando essa política aciona um erro. Essas informações são importantes para saber se você está desenvolvendo regras de falha para lidar com falhas. Para saber mais, consulte O que você precisa saber sobre erros de política e Como lidar com falhas.

Erros de execução

Esses erros podem ocorrer quando a política é executada.

Código de falha Status HTTP Causa Correção
steps.script.ScriptEvaluationFailed 500 A política PythonScript pode gerar vários tipos diferentes de erros ScriptExecutionFailed. Alguns dos tipos de erros mais comuns são NameError e ZeroDivisionError.

Erros na implantação

Esses erros podem ocorrer quando você implanta um proxy que contém esta política.

Nome do erro Causa Correção
InvalidResourceUrlFormat Se o formato do URL do recurso especificado no <ResourceURL> ou no elemento <IncludeURL> da política PythonScript for inválido, a implantação do proxy da API falhará.
InvalidResourceUrlReference Se os elementos <ResourceURL> ou <IncludeURL> fizerem referência a um arquivo PythonScript que não existe, a implantação do proxy da API falhará. O arquivo de origem referenciado precisa existir no proxy, no ambiente ou no nível da organização da API.

Variáveis de falha

Essas variáveis são definidas quando essa política aciona um erro no ambiente de execução. Para mais informações, consulte O que você precisa saber sobre erros de política.

Variáveis Onde Exemplo
fault.name="fault_name" fault_name é o nome da falha, conforme listado na tabela Erros de ambiente de execução acima. O nome da falha é a última parte do código de falha. fault.name Matches "ScriptExecutionFailed"
pythonscript.policy_name.failed policy_name é o nome especificado pelo usuário da política que causou a falha. pythonscript.PythonScript-1.failed = true

Exemplo de resposta de erro

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

Exemplo de regra de falha

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