Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
Il criterio Script Python ti consente di aggiungere funzionalità Python personalizzate al flusso del proxy API, soprattutto quando la funzionalità di cui hai bisogno va oltre quelle fornite dai criteri predefiniti di Edge provide.
Il supporto del linguaggio Python è fornito tramite Jython versione 2.5.2. Le librerie di terze parti che aggiungi devono essere "pure Python" (implementate solo in Python). Per saperne 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 API in cui viene eseguito lo script Python. Puoi caricare
il tuo script tramite l'editor del proxy dell'interfaccia utente di gestione oppure puoi includerlo nella
/resources/py directory nei proxy API che sviluppi localmente.
Esempi
Criterio e script Python
Criterio 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 dello script Python pertinente.
Script Python
Di seguito è riportato un esempio di ciò che 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 del criterio:
| Attributo | Descrizione | Predefinito | Presenza |
|---|---|---|---|
name |
Il nome interno del criterio. Il valore dell'attributo Se vuoi, puoi utilizzare l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta il valore su Imposta su |
falso | Facoltativo |
enabled |
Imposta il valore su Imposta |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
falso | Deprecato |
<DisplayName> elemento
Da utilizzare in aggiunta all'attributo name per etichettare il criterio in
editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
| Predefinito |
N/D Se ometti questo elemento, il valore dell'attributo |
|---|---|
| Presenza | Facoltativo |
| Tipo | Stringa |
<ResourceURL> elemento
Questo elemento specifica il file Python principale che verrà eseguito nel flusso API. Puoi archiviare
questo file nell'ambito del proxy API (in /apiproxy/resources/py nel bundle del proxy API
o nella sezione Script del riquadro Navigatore dell'editor del proxy API) oppure 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 |
<IncludeURL> elemento
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 e i messaggi di errore restituiti, nonché le variabili di errore. impostate da Edge quando questo criterio attiva un errore. È importante conoscere queste informazioni se stai sviluppando regole di errore per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
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. Normalmente i tipi di errori riscontrati includono 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 all'interno di <ResourceURL> o
l'elemento <IncludeURL> del criterio PythonScript non è valido, la distribuzione del proxy API non va a buon fine. |
build |
InvalidResourceUrlReference |
Se gli elementi <ResourceURL> o <IncludeURL>
fare riferimento a un file PythonScript che non esiste, il deployment del proxy API non va a buon fine.
Il file di origine a cui viene fatto riferimento deve esistere a livello di organizzazione, di proxy API o di ambiente. |
build |
Variabili di errore
Queste variabili vengono impostate quando il criterio attiva un errore in fase di runtime. Per ulteriori informazioni, consulta Cosa che devi conoscere sugli errori relativi alle norme.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è 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>