Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Cosa
Il criterio di script Python ti consente di aggiungere funzionalità Python personalizzate al flusso del proxy API, soprattutto quando la funzionalità di cui hai bisogno va oltre quella fornita dai criteri predefiniti di Apigee.
Questo criterio è un criterio estensibile e il suo utilizzo potrebbe comportare implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle 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 aggiunte devono essere "pure Python" (implementate solo in Python). Per scoprire di più sull'aggiunta di librerie, consulta File di risorse.
Un criterio Python non contiene codice effettivo. Un criterio Python fa invece riferimento a una risorsa Python e definisce il passaggio nel flusso dell'API in cui viene eseguito lo script Python. Puoi caricare
lo script tramite l'editor proxy dell'interfaccia utente di Apigee oppure includerlo nella directory
/resources/py
nei proxy API che sviluppi localmente.
Esempi
Norme e script Python
Norme relative agli 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 la risorsa script Python pertinente.
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 del criterio. Il valore dell'attributo Se vuoi, utilizza l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta su Imposta su |
falso | Facoltativo |
enabled |
Imposta su Imposta |
true | Facoltativo |
async |
Questo attributo è stato ritirato. |
falso | Ritirato |
Elemento <DisplayName>
Da utilizzare insieme 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/D Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
Elemento <ResourceURL>
Questo elemento specifica il file Python principale che verrà eseguito nel flusso dell'API. Puoi memorizzare questo file nell'ambito del proxy API (in /apiproxy/resources/py
nel bundle del proxy API o nella sezione Script del riquadro di navigazione dell'editor del proxy API) o negli ambiti dell'organizzazione o dell'ambiente per il riutilizzo in più proxy API, come descritto in File di risorse. Il codice può utilizzare gli oggetti, i metodi e le proprietà del modello oggetto JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
Valore predefinito: | Nessuno |
Presenza: | Obbligatorio |
Tipo: | Stringa |
Elemento <IncludeURL>
Specifica un file Python da caricare come dipendenza del file Python principale specificato con l'elemento
<ResourceURL>
. Gli script verranno valutati nell'ordine in cui sono elencati nel criterio.
Includi più di una risorsa di dipendenza Python con elementi <IncludeURL>
aggiuntivi.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
Valore predefinito: | Nessuno |
Presenza: | Facoltativo |
Tipo: | Stringa |
Codici di errore
Questa sezione descrive i codici di errore e i messaggi di errore restituiti e le variabili di errore impostate da Apigee quando questo criterio attiva un errore. Queste informazioni sono importanti se stai sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta Informazioni importanti sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi durante l'esecuzione del criterio.
Codice guasto | Stato HTTP | Causa | Correggi |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 |
Il criterio PythonScript può generare diversi tipi di errori ScriptExecutionFailed. I tipi di errori più comuni includono NameError e ZeroDivisionError. | build |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
Nome dell'errore | Causa | Correggi |
---|---|---|
InvalidResourceUrlFormat |
Se il formato dell'URL della risorsa specificato all'interno dell'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 non esistente, il deployment del proxy API non va a buon fine.
Il file di origine a cui si fa riferimento deve esistere a livello di proxy API, ambiente o organizzazione. |
build |
Variabili di errore
Queste variabili vengono impostate quando questo criterio attiva un errore in fase di runtime. Per ulteriori informazioni, consulta Informazioni importanti sugli errori relativi alle norme.
Variabili | Dove | Esempio |
---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime sopra. Il nome dell'errore è l'ultima parte del codice dell'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>