Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
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 Opcionalmente, use o elemento |
N/A | Obrigatória |
continueOnError |
Definido como Definido como |
falso | Opcional |
enabled |
Defina como Defina como |
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 |
---|---|
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. | build |
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. |
build |
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. |
build |
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>