Règle PythonScript

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Quoi

La stratégie de script Python vous permet d'ajouter des fonctionnalités Python personnalisées à votre flux de proxy d'API, en particulier lorsque la fonctionnalité dont vous avez besoin dépasse celles fournies par les stratégies prêtes à l'emploi d'Edge.

La compatibilité avec le langage Python est fournie via Jython version 2.5.2. Les bibliothèques tierces que vous ajoutez doivent être en "Python pur" (mises en œuvre uniquement en Python). Pour en savoir plus sur l'ajout de bibliothèques, consultez la section Fichiers de ressources.

Une règle Python ne contient aucun code réel. À la place, une règle Python référence une ressource Python et définit l'étape du flux d'API où le script Python s'exécute. Vous pouvez importer votre script via l'éditeur de proxys de l'UI de gestion ou l'inclure dans le répertoire /resources/py dans les proxys d'API que vous développez localement.

Samples

Règles et script Python

Règle de 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>

Dans cet exemple, l'élément ResourceURL spécifie la ressource de script Python appropriée.

Script Python

Cet exemple montre ce que vous pouvez inclure dans le script Python lui-même.

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)

Documentation de référence des éléments

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

Le tableau suivant décrit les attributs communs à tous les éléments parents des règles :

Attribut Description Par défaut Présence
name

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion, en utilisant un nom différent, en langage naturel.

N/A Obligatoire
continueOnError

Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles.

Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle.

false Facultatif
enabled

Définissez sur true pour appliquer la règle.

Définissez sur false pour désactiver la règle. La stratégie ne sera pas appliquée, même si elle reste associée à un flux.

true Facultatif
async

Cet attribut est obsolète.

false Obsolète

Élément <DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent, en langage naturel.

<DisplayName>Policy Display Name</DisplayName>
Par défaut

N/A

Si vous omettez cet élément, la valeur de l'attribut name de la règle est utilisée.

Présence Facultatif
Type Chaîne

Élément <ResourceURL>

Cet élément spécifie le fichier Python principal qui sera exécuté dans le flux d'API. Vous pouvez stocker ce fichier au niveau du proxy d'API (sous /apiproxy/resources/py dans le groupe de proxys d'API ou dans la section Scripts du volet de navigation de l'éditeur de proxy d'API), ou aux niveaux de l'organisation ou de l'environnement afin de le réutiliser sur plusieurs proxys d'API, comme décrit dans la section Fichiers de ressources. Votre code peut utiliser les objets, les méthodes et les propriétés du modèle d'objet JavaScript.

<ResourceURL>py://myscript.py</ResourceURL>
Valeur par défaut : Aucun
Présence : Obligatoire
Type : Chaîne

Spécifie un fichier Python à charger en tant que dépendance au fichier Python principal spécifié avec l'élément <ResourceURL>. Les scripts seront évalués dans l'ordre dans lequel ils sont répertoriés dans la règle.

Incluez plusieurs ressources de dépendance Python avec des éléments <IncludeURL> supplémentaires.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
Valeur par défaut : Aucun
Présence : Facultatif
Type : Chaîne

Codes d'erreur

Cette section décrit les codes d'erreur et les messages d'erreur renvoyés, ainsi que les variables d'erreur définies par Edge lorsque cette stratégie déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.

Erreurs d'exécution

Ces erreurs peuvent se produire lors de l'exécution de la règle.

Code d'erreur État HTTP Cause Solution
steps.script.ScriptEvaluationFailed 500 La règle PythonScript peut générer plusieurs types d'erreurs différents ScriptExecutionFailed. Les types d'erreurs courants incluent NameError et ZeroDivisionError.

Erreurs de déploiement

Ces erreurs peuvent se produire lorsque vous déployez un proxy contenant cette règle.

Nom de l'erreur Cause Solution
InvalidResourceUrlFormat Si le format de l'URL de la ressource spécifiée dans l'élément <ResourceURL> ou <IncludeURL> de la règle PythonScript n'est pas valide, alors le déploiement du proxy d'API échoue.
InvalidResourceUrlReference Si les éléments <ResourceURL> ou <IncludeURL> font référence à un fichier PythonScript qui n'existe pas, alors le déploiement du proxy d'API échoue. Le fichier source référencé doit exister au niveau du proxy d'API, de l'environnement ou de l'organisation.

Variables de panne

Ces variables sont définies lorsque cette règle déclenche une erreur au moment de l'exécution. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.

Variables Où : Exemple
fault.name="fault_name" fault_name est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. fault.name Matches "ScriptExecutionFailed"
pythonscript.policy_name.failed policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. pythonscript.PythonScript-1.failed = true

Exemple de réponse d'erreur

{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"",
    "detail": {
      "errorcode": "steps.script.ScriptExecutionFailed"
    }
  }
}

Exemple de règle de défaillance

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

Articles associés