Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Ne
Python Komut Dosyası politikası, API proxy akışınıza, özellikle de ihtiyaç duyduğunuz işlevin kullanıma hazır politikaların dışında olduğu durumlarda özelleştirilmiş Python işlevleri eklemenize olanak tanır.
Python dil desteği, Jython 2.5.2 sürümü üzerinden sağlanır. Eklediğiniz üçüncü taraf kitaplıkların "tam Python" olması (yalnızca Python'da uygulanması gerekir) olmalıdır. Kitaplık ekleme hakkında daha fazla bilgi için Kaynak dosyaları bölümüne bakın.
Python politikaları gerçek kod içermez. Bunun yerine, Python politikaları bir Python kaynağına referans verir ve API akışında Python komut dosyasının yürütüldüğü Adımı tanımlar. Komut dosyanızı Yönetim Kullanıcı Arayüzü proxy düzenleyicisi aracılığıyla yükleyebilir veya yerel olarak geliştirdiğiniz API proxy'lerindeki /resources/py
dizinine ekleyebilirsiniz.
Sana Özel
Python politikası ve komut dosyası
Python Komut Dosyası Politikası
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> </Script>
Bu örnekte ResourceURL öğesi, ilgili Python komut dosyası kaynağını belirtir.
Python Komut Dosyası
Bu, Python komut dosyasına neler ekleyebileceğinizi gösterir.
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)
Öğe referansı
<?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>
Aşağıdaki tabloda, tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
name |
Politikanın dahili adı. İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için |
Yok | Gerekli |
continueOnError |
Bir politika başarısız olduğunda hata döndürülmesi için Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için |
false | İsteğe bağlı |
enabled |
Politikayı uygulamak için Politikayı devre dışı bırakmak için |
true | İsteğe bağlı |
async |
Bu özellik kullanımdan kaldırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğesi
Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name
özelliğine ek olarak kullanın.
<DisplayName>Policy Display Name</DisplayName>
Varsayılan |
Yok Bu öğeyi çıkarırsanız politikanın |
---|---|
Varlık | İsteğe bağlı |
Tür | Dize |
<ResourceURL> öğesi
Bu öğe, API akışında yürütülecek ana Python dosyasını belirtir. Bu dosyayı, Kaynak dosyaları bölümünde açıklandığı gibi API proxy kapsamında (API proxy paketindeki /apiproxy/resources/py
bölümünde veya API proxy düzenleyicisi bölmesinin Komut Dosyaları bölümünde) ya da birden çok API proxy'si arasında yeniden kullanılabilecek kuruluş veya ortam kapsamlarında saklayabilirsiniz. Kodunuz, JavaScript nesne modelinin nesnelerini, yöntemlerini ve özelliklerini kullanabilir.
<ResourceURL>py://myscript.py</ResourceURL>
Varsayılan: | Yok |
Bulunma: | Gerekli |
Tür: | Dize |
<IncludeURL> öğesi
<ResourceURL>
öğesiyle belirtilen ana Python dosyasına bağımlılık olarak yüklenecek bir Python dosyasını belirtir. Komut dosyaları, politikada listelendikleri sırayla değerlendirilir.
Ek <IncludeURL>
öğeleriyle birden fazla Python bağımlılık kaynağı ekleyin.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
Hata kodları
Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ve hata mesajları ile döndürülen hata değişkenleri açıklanmaktadır. Hataları ele almak için hata kuralları geliştiriyorsanız bu bilgiye sahip olmanız önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.
Çalışma zamanı hataları
Politika yürütüldüğünde bu hatalar ortaya çıkabilir.
Hata kodu | HTTP durumu | Neden | Düzelt |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 | PythonScript politikası, birkaç farklı türde ScriptExecutionFailed hatası verebilir. Yaygın olarak görülen hata türleri arasında NameError ve ZeroDivisionError bulunur. | build |
Dağıtım hataları
Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.
Hata adı | Neden | Düzelt |
---|---|---|
InvalidResourceUrlFormat |
PythonScript politikasının <ResourceURL> veya <IncludeURL> öğesi içinde belirtilen kaynak URL'sinin biçimi geçersizse API proxy'sinin dağıtımı başarısız olur. |
build |
InvalidResourceUrlReference |
<ResourceURL> veya <IncludeURL> öğeleri mevcut olmayan bir PythonScript dosyasına referans veriyorsa API proxy'sinin dağıtımı başarısız olur.
Başvurulan kaynak dosya API proxy'si, ortam veya kuruluş düzeyinde bulunmalıdır. |
build |
Hata değişkenleri
Bu değişkenler, bu politika çalışma zamanında bir hata tetiklediğinde ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.
Değişkenler | Konum | Örnek |
---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen hatanın adıdır. Hata adı, hata kodunun son kısmıdır. | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. | pythonscript.PythonScript-1.failed = true |
Örnek hata yanıtı
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
Hata kuralı örneği
<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>