PythonScript politikası

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ı. name özelliğinin değeri harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içerebilir. Bu değer 255 karakterden uzun olamaz.

İ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 <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

Politikayı devre dışı bırakmak için false olarak ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanmaz.

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 name özelliğinin değeri kullanılır.

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.

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

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>

İlgili konular