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ı
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.javascript.ScriptExecutionFailed |
500 | The JavaScript policy can throw many different types of ScriptExecutionFailed errors. Commonly seen types of errors include RangeError, ReferenceError, SyntaxError, TypeError, and URIError. | build |
steps.javascript.ScriptExecutionFailedLineNumber |
500 | An error occurred in the JavaScript code. See the fault string for details. | N/A |
steps.javascript.ScriptSecurityError |
500 | A security error occurred when the JavaScript executed. See the fault string for details. | N/A |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidResourceUrlFormat |
If the format of the resource URL specified within the <ResourceURL> or the <IncludeURL> element of the JavaScript policy is invalid, then the deployment of the API proxy fails. |
build |
InvalidResourceUrlReference |
If the <ResourceURL> or the <IncludeURL> elements
refer to a JavaScript file that does not exist, then the deployment of the API proxy fails.
The referenced source file must exist either the API proxy, environment, or organization level. |
build |
WrongResourceType |
This error occurs during deployment if the <ResourceURL> or the <IncludeURL>
elements of the JavaScript policy refer to any resource type other than jsc (JavaScript file). |
build |
NoResourceURLOrSource |
The deployment of the JavaScript policy can fail with this error if the <ResourceURL>
element is not declared or if the resource URL is not defined within this element.
<ResourceURL> element is a mandatory element. Or, The <IncludeURL> element is declared
but the resource URL is not defined within this element. The <IncludeURL> element is optional
but if declared, the resource URL must be specified within the <IncludeURL> element. |
build |
Fault variables
These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "ScriptExecutionFailed" |
javascript.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | javascript.JavaScript-1.failed = true |
Example error response
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Javascript runtime error: "ReferenceError: "status" is not defined. (setresponse.js:6)\"", "detail": { "errorcode": "steps.javascript.ScriptExecutionFailed" } } }
Example fault rule
<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: