Questa pagina si applica a Apigee e Apigee ibridi.
Visualizza
documentazione di Apigee Edge.
Cosa
Il criterio dello script Python ti consente di aggiungere funzionalità Python personalizzate al flusso del proxy API, soprattutto quando le funzionalità di cui hai bisogno vanno oltre i criteri pronti all'uso di Apigee. che fornisce.
Questo criterio è una norma estendibile e il suo utilizzo potrebbe comportare costi o di utilizzo delle applicazioni, a seconda della licenza Apigee. Per informazioni sui tipi di norme e le implicazioni per l'utilizzo, consulta Tipi di criteri.
Il supporto del linguaggio Python è fornito tramite Jython versione 2.5.2. Le librerie di terze parti che aggiungi devono essere "Python puro" (implementato solo in Python). Per ulteriori informazioni sull'aggiunta di librerie, consulta File di risorse.
Un criterio Python non contiene codice effettivo. Un criterio Python fa riferimento invece a un file Python
risorsa e definisce il passaggio nel flusso dell'API in cui viene eseguito lo script Python. Puoi caricare
il tuo script tramite l'editor proxy UI Apigee oppure puoi includerlo
Directory /resources/py
nei proxy API che sviluppi localmente.
Esempi
Criteri Python e copione
Criterio dello script Python
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> </Script>
In questo esempio, l'elemento ResourceURL specifica lo script Python pertinente risorsa.
Script Python
Questo mostra cosa potresti includere nello script Python stesso.
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)
Riferimento 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>
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno della norma. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
N/A | Obbligatorio |
continueOnError |
Impostalo su Imposta su |
false | Facoltativo |
enabled |
Imposta il criterio su Impostala su |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
false | Deprecata |
Elemento <DisplayName>
Utilizzalo in aggiunta all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/A Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
<ResourceURL> elemento
Questo elemento specifica il file Python principale che verrà eseguito nel flusso dell'API. Puoi archiviare
questo file nell'ambito del proxy API (in /apiproxy/resources/py
nel proxy API
o nella sezione Script del riquadro di navigazione dell'editor del proxy API) o nella
a livello di organizzazione o di ambiente per il riutilizzo in più proxy API, come descritto in
File di risorse: Il tuo codice può utilizzare
oggetti, metodi e proprietà del modello a oggetti JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
Predefinita: | Nessuno |
Presenza: | Obbligatorio |
Tipo: | Stringa |
<IncludeURL> elemento
Specifica un file Python da caricare come dipendenza dal file Python principale specificato con
Elemento <ResourceURL>
. Gli script verranno valutati nell'ordine in cui
sono elencate nelle norme.
Includi più di una risorsa di dipendenza Python con
<IncludeURL>
elementi.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
Predefinita: | Nessuno |
Presenza: | Facoltativo |
Tipo: | Stringa |
Codici di errore
Questa sezione descrive i codici e i messaggi di errore restituiti e le variabili di errore impostate da Apigee quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se stai sviluppando regole di errore per la gestione degli errori. Per scoprire di più, consulta gli articoli Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
Codice di errore | Stato HTTP | Causa | Correggi |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 |
Il criterio PythonScript può generare diversi tipi di errori ScriptExecutionFailed non riusciti. I tipi di errori più comuni sono NameError e ZeroDivisionError. | build |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
Nome errore | Causa | Correggi |
---|---|---|
InvalidResourceUrlFormat |
Se il formato dell'URL della risorsa specificato nell'elemento <ResourceURL> o
<IncludeURL> del criterio PythonScript non è valido, il deployment del proxy API non va a buon fine. |
build |
InvalidResourceUrlReference |
Se gli elementi <ResourceURL> o <IncludeURL> fanno riferimento a un file PythonScript che non esiste, il deployment del proxy API non va a buon fine.
Il file di origine di riferimento deve esistere a livello di organizzazione, proxy API o ambiente. |
build |
Variabili di errore
Queste variabili vengono impostate quando questo criterio attiva un errore in fase di runtime. Per maggiori informazioni, consulta la sezione Cosa devi sapere sugli errori dei criteri.
Variabili | Dove | Esempio |
---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime riportata sopra. Il nome del guasto è l'ultima parte del codice di errore. | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | pythonscript.PythonScript-1.failed = true |
Esempio di risposta di errore
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
Esempio di regola di errore
<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>