Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
I criteri per lo 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 estendibili e il loro utilizzo potrebbe avere implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di policy e sulle implicazioni di utilizzo, consulta Tipi di policy.
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
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 | Presence |
|---|---|---|---|
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 su |
true | Facoltativo |
async |
Questo attributo è stato ritirato. |
falso | Deprecato |
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 |
|---|---|
| Presence | Facoltativo |
| Tipo | Stringa |
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>
| 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
本部分介绍当此政策触发错误时返回的故障代码和错误消息,以及由 Apigee 设置的故障变量。在开发故障规则以处理故障时,请务必了解此信息。如需了解详情,请参阅您需要了解的有关政策错误的信息和处理故障。
运行时错误
政策执行时可能会发生这些错误。
| 故障代码 | HTTP 状态 | 原因 | 修复 |
|---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 |
PythonScript 政策可能会引发几种不同的 ScriptExecutionFailed 错误。常见的错误类型包括 NameError 和 ZeroDivisionError。 | build |
部署错误
在您部署包含此政策的代理时,可能会发生这些错误。
| 错误名称 | 原因 | 修复 |
|---|---|---|
InvalidResourceUrlFormat |
如果 PythonScript 政策的 <ResourceURL> 或 <IncludeURL> 元素中指定的资源网址格式无效,则 API 代理的部署将失败。 |
build |
InvalidResourceUrlReference |
如果 <ResourceURL> 或 <IncludeURL> 元素引用了不存在的 PythonScript 文件,则 API 代理的部署将失败。引用的源文件必须存在于 API 代理、环境或组织级别。 |
build |
故障变量
当此政策在运行时触发错误时,将设置这些变量。如需了解详情,请参阅您需要了解的有关政策错误的信息。
| 变量 | 其中 | 示例 |
|---|---|---|
fault.name="fault_name" |
fault_name 是故障名称,如上面的运行时错误表中所列。 故障名称是故障代码的最后一部分。 | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name 是抛出故障的政策的用户指定名称。 | pythonscript.PythonScript-1.failed = true |
错误响应示例
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
故障规则示例
<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>