Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Bu konuda, Apigee Edge JavaScript Nesne Modeli ele alınmaktadır. Bir API proxy'sine özel JavaScript eklemek için JavaScript politikasını kullanmayı planlıyorsanız bu modeli anlamanız önemlidir.
Edge JavaScript nesne modeli hakkında
Apigee Edge JavaScript nesne modeli, Apigee Edge proxy akışında yürütülen JavaScript kodu tarafından kullanılabilen ilişkili özelliklere sahip nesneleri tanımlar. Bu özel kodu bir API proxy akışına eklemek için JavaScript politikasını kullanırsınız.
Bu model tarafından tanımlanan nesneler, API proxy akışında kapsama sahiptir. Bu nedenle, belirli nesneler ve özellikler yalnızca akışın belirli noktalarında kullanılabilir. JavaScript'iniz yürütüldüğünde yürütme için bir kapsam oluşturulur. Bu kapsamda aşağıdaki nesne referansları oluşturulur:
- context: Mesaj bağlamına erişim sağlayan bir nesne
- request: İstek nesnesine erişime izin veren bir kısaltma
- response: İstek nesnesine erişime izin veren bir kısaltma
- crypto: Çeşitli karma işlevleri sağlar.
- print: Çıkış oluşturma işlevi
- properties: Politikadaki yapılandırma özelliklerine okuma erişimine izin verir.
Bağlam nesnesi
context nesnesi genel kapsamlıdır. API proxy akışında her yerde kullanılabilir. Dört alt nesnesi vardır: proxyRequest, proxyResponse, targetRequest, targetResponse. Bu alt nesneler, ortam isteği ve yanıtı (proxy isteği ve yanıtı ya da hedef isteği ve yanıtı) ile kapsamlandırılır. Örneğin, JavaScript politikası akışın proxy uç nokta bölümünde yürütülürse context.proxyRequest ve context.proxyResponse nesneleri kapsamdadır. JavaScript bir hedef akışta çalıştırılıyorsa context.targetRequest ve context.targetResponse nesneleri kapsamdadır.
context nesnesi, bu konuda ayrıntılı olarak açıklanan özelliklere ve yöntemlere de sahiptir. Örneğin, aşağıdaki JavaScript kodu örneğinde context.flow özelliği kullanılmakta ve context üzerinde get/setVariable() yöntemleri çağrılmaktadır.
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("USER.name", username); }
Bu yöntemler doğrudan akış değişkenleriyle etkileşime girer.
context.flow özellik değeri, mevcut akış kapsamıdır. Proxy istek akışında, sabit PROXY_REQ_FLOW olarak ayarlanır. Hedef yanıt akışında TARGET_RESP_FLOW olarak ayarlanmışsa. Bu sabit, kapsamla ilgili kod yürütmek için kullanışlıdır. Getter, akış değişkenlerini almanıza, setter ise akış değişkenlerini ayarlamanıza olanak tanır. Bu değişkenler genellikle proxy akışında kullanılabilir ve diğer politikalar tarafından tüketilebilir.
Daha fazla bilgi ve örnek için aşağıdaki bağlam nesnesi referansı bölümüne bakın.
Kripto nesnesi
Kripto nesnesi, JavaScript nesne modeline temel ve yüksek performanslı kriptografik destek ekler. Daha fazla bilgi ve örnek için aşağıdaki kripto nesnesi referansına bakın.
İstek ve yanıt nesneleri
request ve response nesneleri, ortam isteğine ve yanıtına (proxy isteği ve yanıtı ya da hedef isteği ve yanıtı) yönelik kısa referanslardır. Bu değişkenlerin referans verdiği nesneler, JavaScript politikasının yürütüldüğü bağlama bağlıdır. JavaScript bir proxy uç noktasının akışında çalışıyorsa istek ve yanıt değişkenleri context.proxyRequest ve context.proxyResponse değerlerini ifade eder. JavaScript bir hedef akışta çalışıyorsa değişkenler context.targetRequest ve context.targetResponse değerlerini ifade eder.
print() işlevi
JavaScript nesne modeli, hata ayıklama bilgilerini Edge Trace aracına aktarmak için kullanabileceğiniz bir print() işlevi içerir. JavaScript print() ifadeleriyle hata ayıklama başlıklı makaleyi inceleyin.
Özellikler nesnesi
Politika yapılandırmasında properties değişkenini kullanarak bu özelliklerin değerlerine erişebilir.
Örneğin, JavaScript yapılandırmanızda şunlar varsa:
<Javascript name='JS-1' > <Properties> <Property name="number">8675309</Property> <Property name="firstname">Jenny</Property> </Properties> <ResourceURL>jsc://my-code.js</ResourceURL> </Javascript>
Ardından my-code.js bölümünde şunları yapabilirsiniz:
print(properties.firstname); // prints Jenny print(properties.number); // 8675309
Daha pratik bir şekilde, yapılandırma sayesinde kod farklı ortamlarda, farklı zamanlarda veya herhangi bir nedenle çalıştırıldığında farklı şekilde davranabilir.
Örneğin, aşağıda "değişken adı" ve JavaScript'in bilgi yayması gereken çıkış stili belirtilmektedir:
<Javascript name='JS-2' > <Properties> <Property name="output">my_output_variable</Property> <Property name="prettyPrint">true</Property> </Properties> <ResourceURL>jsc://emit-results.js</ResourceURL> </Javascript>
emit-results.js içinde kod şu işlemi yapabilir:
var result = { prop1: "something", prop2 : "something else" } ; if (properties.prettyPrint == "true") { context.setVariable(properties.output, JSON.stringify(result, null, 2)); } else { context.setVariable(properties.output, JSON.stringify(result)); }
kripto nesne referansı
Crypto nesnesi, JavaScript'te temel şifreleme karma oluşturma işlevlerini gerçekleştirmenize olanak tanır.
Kripto nesnesi genel kapsamdadır. API proxy akışında her yerde kullanılabilir. Crypto, şu karma nesneleriyle çalışmanıza olanak tanır:
- SHA-1
- SHA256
- SHA512
- MD5
SHA-1 nesneleriyle çalışma
SHA-1 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ile Base64 değerlerine dönüştürebilirsiniz.
Yeni bir SHA-1 nesnesi oluşturma
var _sha1 = crypto.getSHA1();
SHA-1 nesnesini güncelleme
Söz dizimi
_sha1.update(value);
Parametreler
- value: (Dize) Herhangi bir dize değeri.
Örnek
SHA-1 nesnesini güncelleme:
_sha1.update("salt_value"); _sha1.update("some text");
SHA-1 nesnesini onaltılık dize olarak döndürme
var _hashed_token = _sha1.digest();
SHA-1 nesnesini base64 dizesi olarak döndür
var _hashed_token = _sha1.digest64();
SHA-256 nesneleriyle çalışma
SHA-256 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ile base64 değerlerine dönüştürebilirsiniz.
Yeni bir SHA-256 nesnesi oluşturma
var _sha256 = crypto.getSHA256();
SHA-256 nesnesini güncelleme
Söz dizimi
_sha256.update(value);
Parametreler
- value: (Dize) Herhangi bir dize değeri.
Örnek
SHA-256 nesnesini güncelleme:
_sha256.update("salt_value"); _sha256.update("some text");
SHA-256 nesnesini onaltılık dize olarak döndürme
var _hashed_token = _sha256.digest();
SHA-256 nesnesini base64 dizesi olarak döndürün
var _hashed_token = _sha256.digest64();
SHA-512 nesneleriyle çalışma
SHA-512 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ile base64 değerlerine dönüştürebilirsiniz.
Yeni bir SHA-512 nesnesi oluşturma
var _sha512 = crypto.getSHA512();
SHA-512 nesnesini güncelleme
Söz dizimi
_sha512.update(value);
Parametreler
- value: (Dize) Herhangi bir dize değeri.
Örnek
SHA-512 nesnesini güncelleme:
_sha512.update("salt_value"); _sha512.update("some text");
SHA-512 nesnesini onaltılık dize olarak döndürme
var _hashed_token = _sha512.digest();
SHA-512 nesnesini base64 dizesi olarak döndürün
var _hashed_token = _sha512.digest64();
MD5 nesneleriyle çalışma
MD5 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ile base64 değerlerine dönüştürebilirsiniz.
Yeni bir MD5 nesnesi oluşturma
var _md5 = crypto.getMD5();
MD5 nesnesini güncelleme
Söz dizimi
_md5.update(value);
Parametreler
- value: (Dize) Herhangi bir dize değeri.
Örnek
MD5 nesnesini güncelleme:
_md5.update("salt_value"); _md5.update("some text");
MD5 nesnesini onaltılık dize olarak döndürme
var _hashed_token = _md5.digest();
MD5 nesnesini base64 dizesi olarak döndürün
var _hashed_token = _md5.digest64();
Kripto tarih/saat desteği
Crypto nesnesi, tarih/saat biçimlendirme düzenlerini destekler.
crypto.dateFormat()
Dize biçiminde bir tarih döndürür.
Söz dizimi
crypto.dateFormat(format, [timezone], [time])
Parametreler
- format: (Dize) Bu parametrenin temel uygulaması java.text.SimpleDateFormat'tir. Örneğin: "yyyy-AA-GG SS:dd:ss.SSS"
- timezone: (Dize, isteğe bağlı) Bu parametrenin temel uygulaması java.util.TimeZone'dur. Bu parametre aynıdır. Varsayılan: UTC
- time: (Sayı, isteğe bağlı) Biçimlendirilecek Unix zaman damgası değeri. Varsayılan: geçerli saat
Örnekler
Milisaniye cinsinden geçerli saati alma:
var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');
Pasifik Saat Dilimi'ndeki geçerli saati öğrenmek için:
var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');
Şu andan itibaren on saniyelik değeri alın:
var _timeNow = Number(context.getVariable('system.timestamp')); var ten_seconds = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);
Diğer örnekler java.text.SimpleDateFormat dokümanlarına da göz atın.
var _pst = crypto.dateFormat('M');
var _pst = crypto.dateFormat('EEE, d MMM yyyy HH:mm:ss Z');
var _pst = crypto.dateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Desteklenen karma nesnelerden herhangi birini almak için getHash() işlevini kullanın.
Örnekler
var _hash1 = crypto.getHash('MD5'); var _hash2 = crypto.getHash('SHA-1'); var _hash3 = crypto.getHash('SHA-256'); var _hash4 = crypto.getHash('SHA-512');
Kripto para birimi içeren örnek
try { // get values to use with hash functions var salt = context.getVariable("salt") || 'SomeHardCodedSalt'; var host = context.getVariable("request.header.Host"); var unhashed_token = ""; var _timeNow = Number(context.getVariable('system.timestamp')); var now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow); unhashed_token = "|" + now + "|" + host // generate a hash with the unhashedToken: var sha512 = crypto.getSHA512(); sha512.update(salt); sha512.update(unhashed_token); // convert to base64 var base64_token = sha512.digest64(); // set headers context.setVariable("request.header.now", now); context.setVariable("request.header.token", base64_token); } catch(e) { throw 'Error in Javascript'; }
context object reference
- context object summary
- context object methods (bağlam nesnesi yöntemleri)
- context object properties
- context object children
Bir API proxy'si tarafından yürütülen her istek/yanıt işlemi için bir context nesnesi oluşturulur. context nesnesi, her işlemle ilgili değişkenleri alma, ayarlama ve kaldırma yöntemlerini kullanıma sunar.
Değişkenler, bir işleme özgü özellikleri tanımlar. Günün saati, istekte bulunan istemcinin yerel ayarı, istekte bulunan istemcinin kullanıcı aracısı ve hedef hizmetin URL'si, context içinde kullanılabilen değişkenlere örnek olarak verilebilir. Bu nedenle, context, özel davranışları yürütmek için bu özelliklere dayanan mantık oluşturmak açısından faydalıdır.
Akış değişkenleri referansı ve Değişkenleri Çıkarma Politikası'na bakın.
context object summary
Bu tabloda, bağlam nesnesi ve alt öğeleri kısaca açıklanır ve her birine bağlı özellikler listelenir.
| Ad | Açıklama | Özellikler |
|---|---|---|
context |
Mesaj işleme ardışık düzen bağlamı ile ProxyEndpoint ve TargetEndpoint tarafından yürütülen istek ve yanıt akışları için bir sarmalayıcı. | akış, oturum |
context.proxyRequest |
ProxyEndpoint'e (istekte bulunan uygulamadan API proxy'sine) gelen istek mesajını temsil eden bir nesne | üstbilgiler, sorgu parametreleri, yöntem, gövde, URL |
context.targetRequest |
Hedef uç noktasından (API proxy'sinden arka uç hizmetine) giden istek mesajını temsil eden bir nesne. | üstbilgiler, sorgu parametreleri, yöntem, gövde, URL |
context.targetResponse |
Gelen hedef yanıt iletisini (arka uç hizmetinden API proxy'sine) temsil eden bir nesne | üstbilgiler, içerik, durum |
context.proxyResponse |
Giden proxy yanıt mesajını (API proxy'sinden istekte bulunan uygulamaya) temsil eden bir nesne | üstbilgiler, içerik, durum |
context.flow |
Mevcut akışın adı. | Aşağıdaki context.flow bölümüne bakın. |
context.session |
Aynı bağlamda yürütülen iki farklı adım arasında nesneleri iletmek için kullanabileceğiniz ad/değer çiftlerinin haritası. Örneğin: context.session['key'] = 123. |
Bu nesnenin ne zaman ve ne zaman kullanılmaması gerektiği hakkında daha fazla bilgi için Apigee Topluluğu'ndaki bu tartışmaya göz atın. |
context nesne yöntemleri
context.getVariable()
Önceden tanımlanmış veya özel bir değişkenin değerini alır.
Söz dizimi
context.getVariable("variable-name");
Örnek
Geçerli yılın değerini almak için:
var year = context.getVariable('system.time.year');
context.setVariable()
Özelleştirilebilen bir değişkenin veya yazılabilir önceden tanımlanmış değişkenlerin değerini ayarlar.
Söz dizimi
context.setVariable("variable-name", value);
Örnek
Bir değişkeni ayarlamanın yaygın bir senaryosu, bir API proxy'sinin hedef URL'yi dinamik olarak yazması gerektiği zamandır. Aşağıdaki JavaScript, USER.name adlı bir değişkenin değerini alır, bu değeri URL'ye sorgu parametresi olarak ekler http://mocktarget.apigee.net?user= ve ardından önceden tanımlanmış target.url değerini bu değer olarak ayarlar.
context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));
context.removeVariable()
Bağlamdan bir değişkeni kaldırır.
Söz dizimi
context.removeVariable('variable-name');
context nesne özellikleri
flow özelliği, mevcut API proxy akışını tanımlayan bir dizedir. Bu özellik, JavaScript'in eklendiği akışı belirtmek için kullanılır. Desteklenen değerler:
PROXY_REQ_FLOWPROXY_RESP_FLOWTARGET_REQ_FLOWTARGET_RESP_FLOW
Her akış adı, PreFlow, PostFlow ve ProxyEndpoints veya TargetEndpoints'te tanımlanan koşullu akışları kapsar.
Bu isteğe bağlı özellik, ortak JavaScript birden fazla akışta yürütüldüğünde kullanışlıdır ancak yürütüldüğü akışa bağlı olarak davranışı değişebilir. Kodu çalıştırmadan önce mevcut akışın kontrol edilmesi gereken ve birden fazla API proxy'sinde yeniden kullanılmak üzere tasarlanan JavaScript modülleri için Flow özelliğini kullanın.
Örnek
Yalnızca targetRequest akışında bir HTTP üstbilgisi ayarlayın:
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
İçeriği yalnızca proxyResponse akışında ayarlayın:
if (context.flow=="PROXY_RESP_FLOW") { context.proxyResponse.content='bar'; }
Aynı ileti bağlamında yürütülen iki politika arasında nesneleri iletmek için kullanılabilen ad/değer çiftlerinin haritası.
Örnek
Oturumda bir değer ayarlayın:
context.session['key'] = 123;
Oturumdan değeri alın:
var value = context.session['key']; // 123
context object children
Aşağıda gösterildiği gibi, eksiksiz bir API proxy akışı dört farklı aşamadan oluşur. Bu aşamaların her birinde, bağlam nesnesinin alt öğesi olan ilişkili bir mesaj nesnesi bulunur:
context.proxyRequest: İstemde bulunan istemciden alınan gelen istek mesajı.context.targetRequest: Arka uç hizmetine gönderilen giden istek mesajı.context.proxyResponse: İstemde bulunan istemciye döndürülen giden yanıt mesajı.context.targetResponse: Arka uç hizmetinden alınan gelen istek mesajı.

Aşağıdaki bölümlerde bu nesnelerin yöntemleri ve özellikleri açıklanmaktadır:
context.*Request child objects
Bir API proxy'sinde yürütülen her HTTP işlemi için iki istek mesajı nesnesi oluşturulur: biri gelen (istemciden gelen istek), diğeri ise giden (API proxy tarafından oluşturulan ve arka uç hedefine gönderilen istek).
context nesnesinde, bu istek mesajlarını temsil eden alt nesneler bulunur: context.proxyRequest ve context.targetRequest. Bu nesneler, JavaScript kodunuz yürütülürken kapsam dahilindeki istek akışındaki özelliklere erişmenize olanak tanır.
Not: İstek akışında bu özelliklere erişmek için request shorthand nesnesini de kullanabilirsiniz. request nesnesi, JavaScript kodunuzun akışta nerede yürütüldüğüne bağlı olarak context.proxyRequest veya context.targetRequest'ı ifade eder.
context.*Request alt nesne özellikleri
| Mülk adı | Açıklama |
|---|---|
url |
İsteğin tam URL'si aşağıdaki özelliklerden oluşur:
|
|
Örnekler: context.targetRequest.url = 'http://www.example.com/path?q1=1' context.targetRequest.protocol ='https'; |
|
headers |
|
|
Örnekler: Bu HTTP isteği için: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z context.proxyRequest.headers['Content-Type']; context.proxyRequest.headers['Authorization']; aşağıdaki değerleri döndürür. application/json Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z |
|
queryParams |
İstek mesajı sorgu parametreleri, |
|
Örnekler: "?city=PaloAlto&city=NewYork"şeklinde erişilebilir: context.proxyRequest.queryParams['city']; // == 'PaloAlto' context.proxyRequest.queryParams['city'][0] // == 'PaloAlto' context.proxyRequest.queryParams['city'][1]; // == 'NewYork' context.proxyRequest.queryParams['city'].length(); // == 2 |
|
method |
İstekle ilişkili HTTP fiili ( |
|
Örnekler: Bu istek için: POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z Aşağıdaki JavaScript: context.proxyRequest.method; aşağıdaki değeri döndürür. POST |
|
body |
HTTP isteğinin ileti gövdesi (yük). İstek gövdesinde aşağıdaki üyeler bulunur:
|
|
Örnekler: XML gövdesi için: <customer number='1'> <name>Fred<name/> <customer/> XML nesnesinin öğelerine aşağıdaki gibi erişmek için: var name = context.targetRequest.body.asXML.name; XML özelliklerine erişmek için var number = context.targetRequest.body.asXML.@number; JSON istek gövdesi için: { "a": 1 , "b" : "2" } var a = context.proxyRequest.body.asJSON.a; // == 1 var b = context.proxyRequest.body.asJSON.b; // == 2 Form parametrelerini okumak için: "vehicle=Car&vehicle=Truck"v0 = context.proxyRequest.body.asForm['vehicle'][0]; v1 = context.proxyRequest.body.asForm['vehicle'][1]; |
context.*Response alt nesneleri
Bir API proxy'sinde yürütülen her HTTP işlemi için iki yanıt mesajı nesnesi oluşturulur: biri gelen (arka uç hizmetinden gelen yanıt), diğeri ise giden (istemciye geri gönderilen yanıt).
Bağlam nesnesinde, şu yanıt mesajlarını temsil eden alt nesneler bulunur: context.proxyResponse ve context.targetResponse. Bu nesneler, JavaScript kodunuz yürütüldüğünde kapsam dahilinde olan yanıt akışındaki özelliklere erişmenize olanak tanır.
Not: Bir yanıtlama akışından bu özelliklere erişmek için response kısa nesnesini de kullanabilirsiniz. response nesnesi, JavaScript kodunuzun akışta nerede yürütüldüğüne bağlı olarak context.proxyResponse veya context.targetResponse'ı ifade eder.
context.*Response nesne özellikleri
| Mülk adı | Açıklama |
|---|---|
headers |
Yanıt mesajının HTTP üst bilgileri, |
|
Örnek: var cookie = context.targetResponse.headers['Set-Cookie']; |
|
status |
Durum mesajı içeren durum kodu. Hem durum kodu hem de durum mesajı özellik olarak kullanılabilir. |
|
Örnek: var status = context.targetResponse.status.code; // 200 var msg = context.targetResponse.status.message; // "OK" |
|
content |
Yanıt mesajının HTTP gövdesi (yük içeriği). Yanıt içeriği aşağıdaki üyeleri içerir: context.targetResponse.content.asXML; context.targetResponse.content.asJSON; |
.asXML gösterimini kullanma
.asXML notasyonunu kullanarak bir XML belgesinde kolayca gezinebilirsiniz.
Bu bölümde, bu notasyonun nasıl kullanılacağı ve request.content ile context.proxyRequest.content arasındaki fark açıklanmaktadır.
Örneğin:
request.content.asXML
veya
context.proxyRequest.content.asXML
Hem *.content hem de *.content.asXML biçimleri bir dize bağlamında kullanılabilir ve JavaScript bunları dizeye dönüştürür. İlk durumda (*.content) dize, tüm bildirimlerin yanı sıra XML yorumlarını da içerir. İkinci durumda (*.content.asXML), sonucun dize değeri bildirimlerden ve yorumlardan temizlenir.
Örnek
msg.content:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error> <!-- mg023.mail.gq1.yahoo.com uncompressed/chunked Sat Dec 14 01:23:35 UTC 2013 -->
msg.content.asXML:
<?xml version="1.0" encoding="UTF-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng" xml:lang="en-US"> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="unable_to_determine_oauth_type", realm="yahooapis.com" </yahoo:description> </yahoo:error>
Ayrıca, öğelerin ve özelliklerin adlarını belirterek XML hiyerarşisinde gezinmek için .asXML formunu kullanabilirsiniz. Diğer söz dizimi kullanılarak hiyerarşide gezinmek mümkün değildir.
JavaScript print() ifadeleriyle hata ayıklama
Özel JavaScript kodunu yürütmek için JavaScript politikasını kullanıyorsanız hata ayıklama bilgilerini İzleme Aracı'na aktarmak için print() işlevini kullanabileceğinizi unutmayın. Bu işlev doğrudan JavaScript nesne modeli üzerinden kullanılabilir. Örneğin:
if (context.flow=="PROXY_REQ_FLOW") { print("In proxy request flow"); var username = context.getVariable("request.queryparam.user"); print("Got query param: " + username); context.setVariable("USER.name", username); print("Set query param: " + context.getVariable("USER.name")); } if (context.flow=="TARGET_REQ_FLOW") { print("In target request flow"); var username = context.getVariable("USER.name"); var url = "http://mocktarget.apigee.net/user?" context.setVariable("target.url", url + "user=" + username); print("callout to URL: ", context.getVariable("target.url")); }
Çıkışı görmek için İzleme penceresinin alt kısmında Tüm işlemlerden çıkış'ı seçin. Çıktıyı stepExecution-stdout adlı İzleme özelliğinde de bulabilirsiniz.
httpClient ile JavaScript açıklama metinleri oluşturma
API proxy akışında yürütülen özel JavaScript kodundan herhangi bir URL'ye birden fazla, paralel ve asenkron HTTP isteği göndermek için httpClient kullanın.
httpClient nesnesi, Apigee Edge JavaScript nesne modeli tarafından kullanıma sunulur.
httpClient hakkında
httpClient nesnesi, JavaScript nesne modeli aracılığıyla Apigee Edge'de çalışan özel JavaScript koduna sunulur. Bir API proxy'sine özel JavaScript eklemek için JavaScript politikasını kullanırsınız. Politika çalıştırıldığında özel JavaScript kodu yürütülür.
httpClient nesnesi, bileşik hizmetler veya mashup'lar geliştirmek için kullanışlıdır. Örneğin, birden fazla arka uç çağrısını tek bir API yönteminde birleştirebilirsiniz.
Bu nesne, genellikle ServiceCallout politikasına alternatif olarak kullanılır.
Temel bir kullanım kalıbı aşağıda verilmiştir. Bir istek nesnesi oluşturun, bu nesneye bir URL atayın (örneğin, çağırmak istediğiniz bir arka uç hizmetine) ve bu istek nesnesiyle httpClient.send işlevini çağırın.
var myRequest = new Request(); myRequest.url = "http://www.example.com"; var exchangeObj = httpClient.send(myRequest);
httpClient Referansı
HTTP istemcisi iki yöntem sunar: get() ve send().
httpClient.get()
HTTP başlıkları desteği olmadan, basit HTTP GET istekleri için kolaylık sağlayan bir yöntem.
Kullanım
var exchangeObj = httpClient.get(url);
İadeler
Yöntem, exchange nesnesi döndürür. Bu nesnenin özellikleri yoktur ve aşağıdaki yöntemleri kullanır:
isError(): (boolean) httpClient sunucuya bağlanamadıysatruedeğerini döndürür. Bağlantı tamamlandığı ve geçerli bir yanıt kodu döndürüldüğü için4xxve5xxHTTP durum kodlarıisError()falseile sonuçlanır.isError()truedeğerini döndürürsegetResponse()çağrısı JavaScriptundefineddeğerini döndürür.isSuccess(): (boolean) Gönderme işlemi tamamlandıysa ve başarılı olduysatruedeğerini döndürür.isComplete(): (boolean) İstek tamamlandıysatruedeğerini döndürür.waitForComplete(): İsteğin tamamlanmasına (başarı veya hata ile) kadar ileti dizisini duraklatır.getResponse(): (nesne)httpClient.send()tamamlanıp başarılı olduysa yanıt nesnesini döndürür. Döndürülen nesne, context.proxyResponse nesnesiyle aynı yöntemlere ve özelliklere sahiptir. Bağlam nesnesi özetine bakın.getError(): (dize)httpClient.send()çağrısı hatayla sonuçlanırsa hata mesajını dize olarak döndürür.
Örnek
HTTP isteğinin özelliklerini içeren, tamamen yapılandırılmış bir İstek nesnesi gönderin. Yanıtı işlemek için engellemeyen bir geri çağırma kullanın.
// Add the required the headers for making a specific API request var headers = {'X-SOME-HEADER' : 'some value' }; // Make a GET API request along with headers var myRequest = new Request("http://www.example.com","GET",headers); // Define the callback function and process the response from the GET API request function onComplete(response,error) { // Check if the HTTP request was successful if (response) { context.setVariable('example.status', response.status); } else { context.setVariable('example.error', 'Woops: ' + error); } } // Specify the callback Function as an argument httpClient.get(myRequest, onComplete);
JavaScript politikasını kullanma
Özel JavaScript kodunu bir proxy akışına eklemek için JavaScript politikasını kullanın. JavaScript politikasına bakın.
İlgili konular
- JavaScript politikası
- JavaScript nesne modeli
- Temel örnekler ve talimatlar için JavaScript ile API proxy'lerini programlama başlıklı makaleyi inceleyin.
- Çalışan JavaScript kodu örnekleri için GitHub'daki Apigee Edge örneklerine bakın.
Apigee Topluluğu makaleleri
Bu ilgili makaleleri Apigee Topluluğu'nda bulabilirsiniz: