Política de PythonScript

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Ícone de política

O quê

A política de script Python permite-lhe adicionar funcionalidades Python personalizadas ao fluxo do proxy de API, especialmente quando a funcionalidade de que precisa está além do que as políticas prontas a usar do Apigee oferecem.

Esta política é uma política extensível e a utilização desta política pode ter implicações de custo ou utilização, consoante a sua licença do Apigee. Para ver informações sobre os tipos de políticas e as implicações de utilização, consulte Tipos de políticas.

O suporte do idioma Python é fornecido através do Jython versão 2.5.2. As bibliotecas de terceiros que adicionar têm de ser "Python puro" (implementadas apenas em Python). Para mais informações sobre como adicionar bibliotecas, consulte o artigo Ficheiros de recursos.

Uma política do Python não contém código real. Em alternativa, uma política Python faz referência a um recurso Python e define o passo no fluxo da API em que o guião Python é executado. Pode carregar o script através do editor de proxy da IU do Apigee ou incluí-lo no diretório /resources/py em proxies de API que desenvolve localmente.

Amostras

Política e script Python

Política de scripts 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 Python

Isto mostra o que 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 do 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 seguinte descreve os atributos comuns a todos os elementos principais de políticas:

Atributo Descrição Predefinição Presença
name

O nome interno da política. O valor do atributo name pode conter letras, números, espaços, hífenes, sublinhados e pontos finais. Este valor não pode exceder 255 carateres.

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

N/A Obrigatória
continueOnError

Definido como false para devolver um erro quando uma política falha. Este comportamento é o esperado para a maioria das políticas.

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

falso Opcional
enabled

Defina como true para aplicar a política.

Defina como false para desativar a política. A política não é aplicada, mesmo que permaneça associada a um fluxo.

verdadeiro Opcional
async

Este atributo foi descontinuado.

falso Descontinuado

Elemento <DisplayName>

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

<DisplayName>Policy Display Name</DisplayName>
Predefinição

N/A

Se omitir este elemento, é usado o valor do atributo name da política.

Presença Opcional
Tipo String

Elemento <ResourceURL>

Este elemento especifica o ficheiro Python principal que vai ser executado no fluxo da API. Pode armazenar este ficheiro no âmbito do proxy de API (em /apiproxy/resources/py no pacote do proxy de API ou na secção Scripts do painel Navigator do editor do proxy de API) ou nos âmbitos da organização ou do ambiente para reutilização em vários proxies de API, conforme descrito em Ficheiros de recursos. O seu código pode usar os objetos, os métodos e as propriedades do modelo de objetos JavaScript.

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

Elemento<IncludeURL>

Especifica um ficheiro Python a ser carregado como dependência do ficheiro Python principal especificado com o elemento <ResourceURL>. Os scripts são avaliados pela ordem em que são apresentados na política.

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

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

Códigos de erro

Esta secção descreve os códigos de falha e as mensagens de erro devolvidas, bem como as variáveis de falha definidas pelo Apigee quando esta política aciona um erro. É importante conhecer estas informações se estiver a desenvolver regras de falhas para resolver falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e Como processar falhas.

Erros de tempo de execução

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

Código de falha Estado de HTTP Causa Corrigir
steps.script.ScriptEvaluationFailed 500 A política de PythonScript pode gerar vários tipos diferentes de erros ScriptExecutionFailed. Os tipos de erros mais comuns incluem NameError e ZeroDivisionError.

Erros de implementação

Estes erros podem ocorrer quando implementa um proxy que contém esta política.

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

Variáveis de falha

Estas variáveis são definidas quando esta política aciona um erro no tempo de execução. Para mais informações, consulte o artigo O que precisa de saber sobre os erros de políticas.

Variáveis Onde Exemplo
fault.name="fault_name" fault_name é o nome da falha, conforme indicado na tabela Erros de tempo 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 utilizador da política que gerou 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>