Criterio PythonScript

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

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 predefiniti di Edge che forniscono.

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 lo script tramite l'editor proxy dell'interfaccia utente di gestione oppure puoi includerlo nella 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 del criterio:

Attributo Descrizione Predefinito Presenza
name

Il nome interno del criterio. Il valore dell'attributo name può Deve contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, puoi utilizzare l'elemento <DisplayName> per etichettare il criterio in l'editor proxy della UI di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
enabled

Imposta il valore su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicata anche se rimane collegata a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

falso Deprecato

&lt;DisplayName&gt; 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 name del criterio è in uso.

Presenza Facoltativo
Tipo Stringa

&lt;ResourceURL&gt; 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

&lt;IncludeURL&gt; 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, 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.

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.
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.

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>

Argomenti correlati