Norme relative a PythonScript

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

icona delle norme

Cosa

I criteri per gli script Python ti consentono di aggiungere funzionalità Python personalizzate al flusso del proxy API, soprattutto quando la funzionalità di cui hai bisogno va oltre ciò che forniscono i criteri predefiniti di Apigee.

Queste norme sono estensibili e il loro utilizzo potrebbe avere implicazioni in termini di costi o di utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni di 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 "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 lo script tramite l'editor proxy dell'interfaccia utente Apigee oppure puoi 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 dello 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>

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails. See also:

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

Elemento<ResourceURL>

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

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

Variabili di errore

Queste variabili vengono impostate quando questo criterio attiva un errore in fase di esecuzione. 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>