Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Ne?
Bu politika, bir API bağlamında yürütülen özel JavaScript kodu eklemenize olanak tanır akış şeklinde ifade edilir. Özel JavaScript kodunuzda Apigee Edge JavaScript nesne modeli. Nesne modeli, nesnel modelle ilgili nesnel değişkenlerini ifade eder. Siz da nesne modeliyle sağlanan temel şifreleme işlevlerini de kullanabilir.
Hakkında
JavaScript politikasının pek çok kullanım alanı vardır. Örneğin, zaman çizelgesiyle ilgili bilgileri özel mantık yürütme, hata işleme, isteklerden verileri ayıklama ve yanıt verebilir, arka uç hedef URL'sini dinamik olarak düzenleyebilir ve çok daha fazlasını yapabilirsiniz. Bu politika şunları yapmanıza olanak tanır: diğer standart Edge politikaları kapsamında olmayan özel davranışlar uygulayabilirsiniz. Aslında Diğer politikalar tarafından uygulanan davranışların birçoğunu elde etmek için bir JavaScript politikası kullanabilir. özel bir kod oluşturun.
JavaScript politikasının günlüğe kaydedilmesi için önermediğimiz bir kullanım alanıdır. Message Logging politikası ve Splunk, Sumo ve Loggly gibi üçüncü taraf günlük kaydı platformlarına daha uygundur. PostClientFlow'da Message Logging politikasını çalıştırarak API proxy'sinin performansını iyileştirebilirsiniz yanıt, istemciye geri gönderildikten sonra yürütülür.
JavaScript politikası, yürütülecek bir JavaScript kaynak dosyası veya
JavaScript kodunu, <Source>
ile doğrudan politikanın yapılandırmasına ekleyebilirsiniz.
öğesine dokunun.
Her iki durumda da JavaScript kodu, politikanın eklendiği adım yürütüldüğünde yürütülür.
Kaynak dosya seçeneğinde, kaynak kodu her zaman
proxy paketindeki standart konum: apiproxy/resources/jsc
. İsterseniz
kaynak kodunu ortam veya kuruluş düzeyinde bir kaynak dosyasında depolamanız gerekir. Örneğin,
Kaynak dosyaları başlıklı makaleyi inceleyin. Şunları yapabilirsiniz:
JavaScript'inizi Apigee kullanıcı arayüzü proxy düzenleyicisi
aracılığıyla da yükleyebilirsiniz.
JavaScript kaynak dosyalarının her zaman .js
uzantısı olmalıdır.
Desteklenen yazılımlar ve desteklenen sürümler başlıklı makaleyi inceleyin. sürümünü kullanın.
Video
JavaScript kullanarak özel politika uzantılarının nasıl oluşturulacağını öğrenmek için kısa bir video izleyin politikası.
Örnekler
Hedef URL'yi yeniden yaz
Yaygın bir kullanım alanı şu şekildedir: istek gövdesinden veri ayıklama veya verileri bir akışta depolama ve bu akış değişkenini proxy akışının başka bir yerinde kullanarak yapabilirsiniz. Diyelim ki bir uygulama Kullanıcı, adını bir HTML formuna girer ve gönderir. API proxy'sinin şunları yapmasını istiyorsunuz: Form verilerini ayıklamak ve arka uç hizmetini çağırmak için kullanılan URL'ye dinamik olarak eklemek. Nasıl? Bunu bir JavsScript politikasında yaparsınız?
Not: Bu örneği denemek isterseniz yeni bir örnek oluşturduğunuzu varsayıyoruz. proxy'si üzerinden kontrol edebilirsiniz. Bu dosyayı oluştururken, arka uç hizmeti URL'sini şu şekilde verin: http://www.example.com. Bu örnekte, arka uç URL'sini dinamik olarak yeniden yazacağız. Yeni bir proxy'nin nasıl oluşturulacağını bilmiyorsanız başlangıç eğiticisine bakın. .
- Edge kullanıcı arayüzünde, proxy düzenleyicisinde oluşturduğunuz proxy'yi açın.
- Geliştirme sekmesini seçin.
- Yeni menüsünden Yeni Komut Dosyası'nı seçin.
- İletişim kutusunda JavaScript'i seçin ve komut dosyasına
js-example
- Aşağıdaki kodu kod düzenleyiciye yapıştırın ve proxy'yi kaydedin. Önemli olan
bildirim,
context
nesnesidir. Bu nesne, JavaScript kodu tarafından kullanılabilir proxy akışının herhangi bir yerinde olur. Akışa özgü sabit değerler elde etmek, yararlı alma/ayarlama yöntemlerini ve daha fazla işlem için. Bu nesne bölümü, Edge'in JavaScript nesne modeli. Not,target.url
akış değişkeninin yerleşik bir okuma/yazma değişkeni olduğunu da Hedef İstek akışında erişilebilir. Bu değişkeni API URL'sine aldığımızda Edge bu URL'ye arka uç çağrısı yapar. Esasen, orijinal hedef URL'yi yeniden yazdık. Bu, proxy'yi oluştururken belirttiğiniz değerdi (ör. http://www.example.com) için geçerli olur.
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("info.username", username); } if (context.flow=="TARGET_REQ_FLOW") { context.setVariable("request.verb", "GET"); var name = context.getVariable("info.username"); var url = "http://mocktarget.apigee.net/" context.setVariable("target.url", url + "?user=" + name); }
- Yeni Politika menüsünden JavaScript'i seçin.
- Politikaya
target-rewrite
gibi bir ad verin. Varsayılanları kabul et ve kaydet politika. - Gezinme Aracı'nda Proxy Uç Noktası Ön Akışı'nı seçerseniz politikanın bu akışa eklenmiştir.
- Gezgin'de Target Endpoint PreFlow simgesini seçin.
- Gezgin'de, JavaScript politikasını Hedef'in İstek tarafına sürükleyin Akış düzenleyicideki uç nokta.
- Kaydet'i tıklayın.
- API'yi bu şekilde çağırarak kuruluş adınızı ve proxy adınızı doğru uygun:
curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'user=Will' http://myorg-test.apigee.net/js-example
Son olarak, Google Etiket Yöneticisi'nde kullanılan JavaScript politikasının XML tanımına
açıklayacağım. Önemli bir nokta, <ResourceURL>
öğesi, yürütülecek JavaScript kaynak dosyasını belirtmek için kullanılır. Aynı desen kullanıldı
herhangi bir JavaScript kaynak dosyası için: jsc://filename.js
. JavaScript kodunuz ise
içerirse şunu yapmak için bir veya daha fazla <IncludeURL>
öğesi kullanabilirsiniz:
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="target-rewrite"> <DisplayName>target-rewrite</DisplayName> <Properties/> <ResourceURL>jsc://js-example.js</ResourceURL> </Javascript>
JavaScript'ten özellik değerini al
Yapılandırmada bir <Property>
öğesi ekleyebilir, ardından
öğesinin değerini JavaScript ile değiştirebilirsiniz.
Öğeye erişmek istediğiniz adı belirtmek için öğenin name
özelliğini kullanın.
özelliğini etkinleştirin. <Property>
öğesinin değeri (
açılış ve kapanış etiketleri arasında),
JavaScript'e dokunun.
JavaScript'te, politika özelliğinin değerini almak için
Properties
nesnesini tanımlayın:
- Mülkü yapılandırın. Burada, özellik değeri değişken adıdır.
response.status.code
<Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="JavascriptURLRewrite"> <DisplayName>JavascriptURLRewrite</DisplayName> <Properties> <Property name="source">response.status.code</Property> </Properties> <ResourceURL>jsc://JavascriptURLRewrite.js</ResourceURL> </Javascript>
- JavaScript ile mülkü alın. Burada, alınan değer (değişken adı)
değeri,
getVariable
işlevi tarafından değişkenin değerini almak için kullanılır.var responseCode = properties.source; // Returns "response.status.code" var value = context.getVariable(responseCode); // Get the value of response.status.code context.setVariable("response.header.x-target-response-code", value);
Hataları işleme
Başarılı bir çalıştırmada kullanabileceğiniz hata giderme tekniklerine ilişkin örnekler JavaScript açıklama metni, bkz. bu yayını Apigee Topluluğu'nda bulabilirsiniz. Apigee Topluluğu'nda sunulan öneriler şunlar içindir: ve Apigee tarafından önerilen en iyi uygulamaları yansıtmayabilir.
Öğe referansı
Öğe referansı, JavaScript politikasının öğelerini ve özelliklerini açıklar.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="JavaScript-1"> <DisplayName>JavaScript 1</DisplayName> <Properties> <Property name="propName">propertyValue</Property> </Properties> <SSLInfo> <Enabled>trueFalse</Enabled> <ClientAuthEnabled>trueFalse</ClientAuthEnabled> <KeyStore>ref://keystoreRef</KeyStore> <KeyAlias>keyAlias</KeyAlias> <TrustStore>ref://truststoreRef</TrustStore> </SSLInfo> <IncludeURL>jsc://a-javascript-library-file</IncludeURL> <ResourceURL>jsc://my-javascript-source-file</ResourceURL> <Source>insert_js_code_here</Source> </Javascript>
<Javascript> Öznitelikler
<Javascript name="Javascript-1" enabled="true" continueOnError="false" async="false" timeLimit="200">
Aşağıdaki özellikler bu politikaya özeldir.
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
timeLimit |
Komut dosyasının erişmesine izin verilen maksimum süreyi (milisaniye cinsinden) belirtir
yardımcı olur. Örneğin, 200 ms'lik bir sınır aşılırsa politika şu hatayı verir:
Not: Ücretsiz deneme hesapları için yürütme süresi 200 ile sınırlıdır. ms. |
Yok | Zorunlu |
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ı |
Yok | Zorunlu |
continueOnError |
Bir politika başarısız olduğunda hata döndürmesi için Akış yürütmenin bir politikadan sonra bile 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 özelliğin desteği sonlandırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğe
Politikayı name
özelliğine ek olarak
farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.
<DisplayName>Policy Display Name</DisplayName>
Varsayılan |
Yok Bu öğeyi çıkarırsanız politikanın |
---|---|
Varlık | İsteğe bağlı |
Tür | Dize |
<IncludeURL> öğe
Ana JavaScript dosyasına bağımlılık olarak yüklenecek bir JavaScript kitaplık dosyasını belirtir
<ResourceURL>
veya <Source>
öğesiyle belirtilir. Komut dosyaları
politikada listelenme sırası. Kodunuz, nesne, yöntemler ve
JavaScript nesne modelinin özelliklerini kullanın.
Ek özelliklere sahip birden fazla JavaScript bağımlılık kaynağı dahil
<IncludeURL>
öğeleri.
<IncludeURL>jsc://my-javascript-dependency.js</IncludeURL>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
Örnek
Sana Özel bölümündeki Temel Örneği inceleyin.
<Property> öğe
Çalışma zamanında JavaScript kodundan erişebileceğiniz bir özelliği belirtir.
<Properties> <Property name="propName">propertyValue</Property> </Properties>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
Özellikler
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
ad |
Mülkün adını belirtir. |
Yok | Zorunlu. |
Örnek
Sana Özel bölümündeki örneğe bakın.
<ResourceURL> öğe
API akışında yürütülecek ana JavaScript dosyasını belirtir. Bu dosyayı depolayabilirsiniz
API proxy kapsamında (API proxy paketinde /apiproxy/resources/jsc
altında veya
API proxy düzenleyicisinin Gezinme bölmesinin Komut Dosyaları bölümünde) veya kuruluşunuzda ya da
ortam kapsamlarının birden çok API proxy'sinde yeniden kullanılabilmesi için Kaynak dosyaları başlıklı makaleye bakın. Kodunuz nesneleri,
JavaScript nesne modelinin yöntemlerini ve özelliklerini öğrenin.
<ResourceURL>jsc://my-javascript.js</ResourceURL>
Varsayılan: | Yok |
Bulunma: | <ResourceURL> veya <Source> gereklidir. Eğer
Hem <ResourceURL> hem de <Source> mevcut <ResourceURL> yoksayılır. |
Tür: | Dize |
Örnek
Sana Özel bölümündeki Temel Örneği inceleyin.
<Source> öğe
Doğrudan politikanın XML yapılandırmasına JavaScript eklemenize olanak tanır. Eklenen Politika, API akışında yürütüldüğünde JavaScript kodu yürütülür.
Varsayılan: | Yok |
Bulunma: | <ResourceURL> veya <Source> gereklidir. Eğer
Hem <ResourceURL> hem de <Source> mevcut <ResourceURL> yoksayılır. |
Tür: | Dize |
Örnek
<Javascript name='JS-ParseJsonHeaderFullString' timeLimit='200' > <Properties> <Property name='inboundHeaderName'>specialheader</Property> <Property name='outboundVariableName'>json_stringified</Property> </Properties> <Source> var varname = 'request.header.' + properties.inboundHeaderName + '.values.string'; var h = context.getVariable(varname); if (h) { h = JSON.parse(h); h.augmented = (new Date()).valueOf(); var v = JSON.stringify(h, null, 2) + '\n'; // further indent var r = new RegExp('^(\S*)','mg'); v= v.replace(r,' $1'); context.setVariable(properties.outboundVariableName, v); } </Source> </Javascript>
<SSLInfo> öğe
JavaScript politikası.
<SSLInfo> <Enabled>trueFalse</Enabled> <ClientAuthEnabled>trueFalse</ClientAuthEnabled> <KeyStore>ref://keystoreRef</KeyStore> <KeyAlias>keyAlias</KeyAlias> <TrustStore>ref://truststoreRef</TrustStore> </SSLInfo>
Varsayılan: | Yok |
Bulunma: | İsteğe bağlı |
Tür: | Dize |
HTTP istemcisi için TLS'yi yapılandırma işlemi, HTTP istemcilerini yapılandırmak için kullandığınız süreçle aynıdır. TargetEndpoint/TargetServer için TLS. Uçtan arka uca TLS'yi yapılandırma bölümüne bakın konulu videomuzu izleyin.
Kullanım notları
JavaScript politikaları gerçek bir kod içermez. Bunun yerine bir JavaScript politikası,
JavaScript "kaynak" ve JavaScript'in yürütüleceği API akışındaki Adımı tanımlar. Şunları yapabilirsiniz:
komut dosyanızı Yönetim Arayüzü proxy düzenleyicisi yoluyla yükleyebilir veya
Yerel olarak geliştirdiğiniz API proxy'lerindeki /resources/jsc
dizini.
JavaScript politika kodunda hata ayıklama
İşleme hata ayıklama bilgilerinin çıkışını almak için print() işlevini kullanın Çıktı panelini kontrol edin. Ayrıntılar ve örnekler için JavaScript ile hata ayıklama bölümüne bakın print() ifadeleri.
Yazdırma özetlerini Trace'te görüntülemek için:
- İzleme Aracı'nı açın ve JavaScript'inizi içeren bir proxy için izleme oturumu başlatın politikası.
- Proxy'yi çağırın.
- İzleme Aracı'nda, çıkışı açmak için Exit from all İşlemler'i tıklayın kontrol edebilirsiniz.
- Basılı ekstreleriniz bu panelde görünür.
İzleme aracına hata ayıklama bilgilerinin çıkışını almak için Print() işlevini kullanabilirsiniz. Bu işlev doğrudan JavaScript nesne modeli aracılığıyla uygulanabilir. Ayrıntılar için "Print() ile JavaScript hatalarını ayıklama" bölümüne bakın özetleri".
Akış Değişkenleri
Bu politika varsayılan olarak hiçbir değişkeni doldurmaz; ancak zaman içindeki akışı ayarlayabilir (ve değişkenlerinin JavaScript kodunuzda nasıl genişleyebilir? Tipik bir desen şöyle görünür:
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"))
Bağlam nesnesi, Apigee Edge JavaScript nesne modelinin bir parçasıdır.
Hata referansı
Bu bölümde, döndürülen hata kodları, hata mesajları ve hata değişkenleri açıklanmaktadır. bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanır. Bu bilgi önemlidir hata kuralları geliştiriyorsanız hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.
Çalışma zamanı hataları
Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.
Hata kodu | HTTP durumu | Neden | Düzelt |
---|---|---|---|
steps.javascript.ScriptExecutionFailed |
500 | JavaScript politikası, birçok farklı türde ScriptExecutionFailed hatası verebilir. Yaygın RangeError, ReferenceError, SyntaxError, TypeError ve URIError. | build |
steps.javascript.ScriptExecutionFailedLineNumber |
500 | JavaScript kodunda bir hata oluştu. Ayrıntılar için hata dizesine bakın. | Yok |
steps.javascript.ScriptSecurityError |
500 | JavaScript yürütüldüğünde bir güvenlik hatası oluştu. Şu hata dizesine bakın: bolca fırsat sunuyor. | Yok |
Dağıtım hataları
Bu politikayı içeren bir proxy dağıttığınızda bu hatalar oluşabilir.
Hata adı | Neden | Düzelt |
---|---|---|
InvalidResourceUrlFormat |
JavaScript 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
var olmayan bir JavaScript dosyasına başvurursa API proxy'sinin dağıtımı başarısız olur.
Başvuruda bulunulan kaynak dosya API proxy'si, ortam veya kuruluş düzeyinde mevcut olmalıdır. |
build |
WrongResourceType |
Bu hata, <ResourceURL> veya <IncludeURL>
JavaScript politikası öğeleri, jsc (JavaScript dosyası) dışındaki herhangi bir kaynak türüne başvuruda bulunuyor. |
build |
NoResourceURLOrSource |
<ResourceURL>
öğesi tanımlanmazsa veya kaynak URL'si bu öğe içinde tanımlanmamışsa.
<ResourceURL> öğesi zorunlu bir öğe. Veya <IncludeURL> öğesi tanımlanmış
ancak kaynak URL'si bu öğe içinde tanımlı değil. <IncludeURL> öğesi isteğe bağlıdır
Ancak belirtilmişse kaynak URL'si <IncludeURL> öğesi içinde belirtilmelidir. |
build |
Hata değişkenleri
Bu değişkenler, politika çalışma zamanında bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Ne, ne ve ne zaman bilmeniz gerekir.
Değişkenler | Konum | Örnek |
---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi hatanın adıdır. Hata adı, hata kodunun son kısmıdır. | fault.name Matches "ScriptExecutionFailed" |
javascript.policy_name.failed |
policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. | javascript.JavaScript-1.failed = true |
Örnek hata yanıtı
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Javascript runtime error: "ReferenceError: "status" is not defined. (setresponse.js:6)\"", "detail": { "errorcode": "steps.javascript.ScriptExecutionFailed" } } }
Örnek hata kuralı
<FaultRule name="JavaScript Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition> </Step> <Condition>(javascript.JavaScript-1.failed = true) </Condition> </FaultRule>
Şema
Her politika türü bir XML şemasıyla (.xsd
) tanımlanır. Referans olması amacıyla politika şemaları
GitHub'da bulabilirsiniz.
İlgili konular
- JavaScript nesne modeli
- Talimatlar, politika örnekleri ve JavaScript örnekleri için bkz. Programlama API'si proxy'leri oluşturun.
Apigee Topluluğu makaleleri
Bu ilgili makaleleri Apigee'de bulabilirsiniz. Topluluk: