Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Bu konuda, Apigee Edge JavaScript Nesne Modeli. 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 JavaScript kodu yürütmek için 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 nesnelerin, API proxy akışı içinde bir kapsamı vardır. Bu, belirli nesnelerin ve özelliklerin yalnızca akışın belirli noktalarında mevcut olduğu anlamına gelir. 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:
- bağlam: İleti içeriğine erişim sağlayan bir nesne
- request: İstek nesnesine erişime olanak tanıyan bir kısaltma
- Yanıt: İstek nesnesine erişim sağlayan bir kısaltma
- crypto: Çeşitli karma işlevleri sağlar
- print: Çıkış gönderen bir işlev
- properties: Politikadaki yapılandırma özelliklerine okuma erişimi sağlar.
Bağlam nesnesi
context
nesnesi global kapsama sahip. API proxy akışının her yerinde kullanılabilir. Dört alt nesnesi vardır: proxyRequest
, proxyResponse
,
targetRequest
, targetResponse
. Bu alt nesnelerin, proxy isteği ve yanıtı veya hedef istek ve yanıtı olmak üzere ortam isteği ve yanıtı kapsamına alınır. Örneğin, JavaScript politikası akışın proxy uç noktası bölümünde yürütülüyorsa context.proxyRequest
ve context.proxyResponse
nesneleri kapsam dahilindedir. JavaScript bir hedef akışta çalışıyorsa context.targetRequest
ve context.targetResponse
nesneleri kapsam dahilindedir.
context
nesnesi, bu konuda ayrıntılı olarak açıklanan özellik ve yöntemlere de sahiptir. Örneğin, aşağıdaki JavaScript kodu örneği context.flow
özelliğini kullanır ve context
üzerinde get/setVariable()
yöntemlerini çağırır.
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("USER.name", username); }
Bu yöntemler, akış değişkenleriyle doğrudan etkileşime girer.
context.flow
özellik değeri, geçerli akış kapsamıdır. Proxy istek akışında PROXY_REQ_FLOW
sabit değeri olarak ayarlanır. Hedef yanıt akışındaysa TARGET_RESP_FLOW
olarak ayarlanır. Bu sabit değer, kapsama özel kodu yürütmek için kullanışlıdır. Alıcı, akış değişkenlerini almanıza olanak tanırken ayarlayıcı 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 kullanılabilir.
Daha fazla ayrıntı ve örnek için aşağıdaki bağlam nesnesi referansı bölümüne bakın.
Şifreleme nesnesi
Şifreleme nesnesi, JavaScript Nesne Modeli'ne temel, yüksek performanslı şifreleme desteği ekler. Daha fazla ayrıntı ve örnek için aşağıdaki kripto nesnesi referansı bölümüne bakın.
İstek ve yanıt nesneleri
request
ve response
nesneleri, proxy isteği ve yanıtı ya da hedef istek ve yanıt olarak ortam isteği ve yanıtı için kısaca referanslardır. Bu değişkenlerin atıfta bulunduğu nesneler, JavaScript politikasının yürütüldüğü bağlama bağlıdır. JavaScript, bir proxy uç noktası akışında çalışıyorsa istek ve yanıt değişkenleri context.proxyRequest
ve context.proxyResponse
referanslarına başvurur. JavaScript bir hedef akışta çalışıyorsa değişkenler context.targetRequest
ve context.targetResponse
'a referans verir.
Print() işlevi
JavaScript nesne modeli, hata ayıklama bilgilerinin Edge Trace aracına çıkışını sağlamak için kullanabileceğiniz bir print()
işlevi içerir. JavaScript Print() ifadeleriyle hata ayıklama bölümünü inceleyin.
Özellikler nesnesi
Politika yapılandırmasında bir properties
değişkenini kullanarak bu özelliklerin değerlerine erişebilir.
Örneğin, JavaScript yapılandırmanız şunları içeriyorsa:
<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
uygulamasında şunları yapabilirsiniz:
print(properties.firstname); // prints Jenny print(properties.number); // 8675309
Daha pratik şekilde ifade etmek gerekirse yapılandırma, farklı ortamlarda, farklı anlarda veya herhangi bir nedenle çalıştırıldığında kodun farklı şekilde davranmasına izin verebilir.
Örneğin, aşağıda JavaScript'in bilgileri yayınlaması gereken "değişken adı" ve çıkış stili belirtilir:
<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>Daha sonra
emit-results.js
ürününde kod şu işlemleri 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)); }
şifreleme nesnesi referansı
Şifreleme nesnesi, JavaScript'te temel şifreleme karma oluşturma işlevlerini gerçekleştirebilmenizi sağlar.
Şifreleme nesnesi global kapsama sahiptir. API proxy akışının her yerinde 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, onaltılık ve base64 değerlerine dönüştürebilirsiniz.
Yeni bir SHA-1 nesnesi oluşturma
var _sha1 = crypto.getSHA1();
SHA-1 nesnesi güncelleme
Söz dizimi
_sha1.update(value);
Parametreler
- value - (Dize) Herhangi bir dize değeri.
Örnek
Bir SHA-1 nesnesini güncelleyin:
_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ün
var _hashed_token = _sha1.digest64();
SHA-256 nesneleriyle çalışma
SHA-256 nesneleri oluşturabilir, bunları güncelleyebilir, onaltılık ve base64 değerlerine dönüştürebilirsiniz.
Yeni bir SHA-256 nesnesi oluşturma
var _sha256 = crypto.getSHA256();
SHA-256 nesnesi güncelleme
Söz dizimi
_sha256.update(value);
Parametreler
- value - (Dize) Herhangi bir dize değeri.
Örnek
Bir SHA-256 nesnesini güncelleyin:
_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, onaltılık ve base64 değerlerine dönüştürebilirsiniz.
Yeni bir SHA-512 nesnesi oluşturma
var _sha512 = crypto.getSHA512();
SHA-512 nesnesi güncelleme
Söz dizimi
_sha512.update(value);
Parametreler
- value - (Dize) Herhangi bir dize değeri.
Örnek
Bir SHA-512 nesnesini güncelleyin:
_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, onaltılık ve 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ürme
var _hashed_token = _md5.digest64();
Kripto tarih/saat desteği
Şifreleme nesnesi, tarih/saat biçimlendirme kalıplarını 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 şeklindedir. Örneğin: "yyyy-AA-GG SS:dd:ss.SSS"
- timezone - (Dize, isteğe bağlı) Bu parametrenin temel uygulaması java.util.TimeZone şeklindedir. Bu parametre sameDefault: UTC
- time - (Sayı, isteğe bağlı) Biçimlendirilecek Unix zaman damgası değeri. Varsayılan: şu anki saat
Örnekler
Milisaniye cinsinden geçerli saati al:
var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');
Pasifik Saat Diliminde geçerli saati al:
var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');
Şu andan itibaren on saniyenin değerini bulun:
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 bakı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 nesnelerinden herhangi birini almak için getHash() 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 ile ö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'; }
bağlam nesnesi referansı
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 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
aracında kullanılabilecek değişkenlere örnektir. Bu nedenle context
, özel davranış yürütmek için bu özellikleri kullanan bir mantık oluşturmak açısından faydalıdır.
Akış değişkenleri referansı ve Değişkenleri Ayıklama politikası bölümlerine bakın.
bağlam nesnesi özeti
Bu tabloda, bağlam nesnesi ve alt öğeleri kısaca açıklanmış ve her birine bağlı özellikler listelenmiştir.
Ad | Açıklama | Özellikler |
---|---|---|
context |
Mesaj işleme ardışık düzeni bağlamı ve ProxyEndpoint ile TargetEndpoint tarafından yürütülen istek ve yanıt akışları için sarmalayıcıdır. | akış, oturum |
context. proxyRequest |
ProxyEndpoint'e (istekte bulunan uygulamadan API proxy'sine) gelen istek mesajını temsil eden bir nesne | başlıklar, sorgu parametreleri, yöntem, gövde, url |
context. targetRequest |
TargetEndpoint'ten (API proxy'sinden arka uç hizmetine) giden istek mesajını temsil eden bir nesnedir. | başlıklar, sorgu parametreleri, yöntem, gövde, url |
context. targetResponse |
Gelen hedef yanıt mesajını temsil eden bir nesne (arka uç hizmetinden API proxy'sine) | üstbilgi, içerik, durum |
context. proxyResponse |
Giden proxy yanıt mesajını temsil eden bir nesne (API proxy'sinden istekte bulunan uygulamaya) | üstbilgi, içerik, durum |
context.flow |
Mevcut akışın adı. | Aşağıdaki context.flow'a bakın. |
context.session |
Nesneleri aynı bağlamda yürütülen iki farklı adım arasında geçirmek için kullanabileceğiniz ad/değer çiftleri eşlemesi. Örneğin: context.session['key'] = 123 . |
Bu nesnenin ne zaman ve ne zaman kullanılmayacağı hakkında daha fazla bilgi için bu Apigee Topluluğu tartışmasına göz atın. |
bağlama nesnesi 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
Mevcut yılın değerini öğrenmek için:
var year = context.getVariable('system.time.year');
context.setVariable()
Özel bir değişkenin veya yazılabilir herhangi bir önceden tanımlanmış değişkenin değerini ayarlar.
Söz dizimi
context.setVariable("variable-name", value);
Örnek
Değişken ayarlamak için yaygın olarak kullanılan bir senaryo, API proxy'sinin hedef URL'yi dinamik olarak yazması gerektiğidir. Aşağıdaki JavaScript, USER.name
adlı bir değişkenin değerini alır, bu değeri http://mocktarget.apigee.net?user=
URL'sine bir sorgu parametresi olarak ekler ve ardından, önceden tanımlı target.url
öğesini bu değere ayarlar.
context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));
context.removeVariable()
Bir değişkeni bağlamdan kaldırır.
Söz dizimi
context.removeVariable('variable-name');
Bağlam nesnesi özellikleri
flow
özelliği, mevcut API proxy akışını tanımlayan bir dizedir. Bu özellik, JavaScript'in bağlı olduğu Akışı belirtmek için kullanılır. Desteklenen değerler şunlardır:
PROXY_REQ_FLOW
PROXY_RESP_FLOW
TARGET_REQ_FLOW
TARGET_RESP_FLOW
Her bir Akış adı PreFlow, PostFlow ve ProxyEndpoints ya da TargetEndpoints'de tanımlanan tüm koşullu Akışları kapsar.
Bu isteğe bağlı özellik, yaygın JavaScript'ler 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. Birden çok API proxy'sinde yeniden kullanılması amaçlanan JavaScript modülleri için Akış özelliğini kullanın. Burada, mantığı yürütmeden önce mevcut Akışı kontrol etmek için kod gerekir.
Ö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ı mesaj bağlamında yürütülen iki politika arasında nesne aktarmak için kullanılabilecek ad/değer çiftleri eşlemesi.
Örnek
Oturumda bir değer ayarlayın:
context.session['key'] = 123;
Oturumdan değeri alın:
var value = context.session['key']; // 123
bağlam nesnesi alt öğeleri
Aşağıda gösterildiği gibi, eksiksiz bir API proxy Akışı dört farklı aşamadan oluşur. Bu aşamaların her biri, bağlam nesnesinin alt öğesi olan ilişkili bir mesaj nesnesine sahiptir:
context.proxyRequest
: İstekte bulunan istemciden alınan gelen istek mesajı.context.targetRequest
: Arka uç hizmetine gönderilen giden istek mesajı.context.proxyResponse
: İstekte 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:
bağlam.*Alt nesneler isteme
API proxy'sinde yürütülen her HTTP işlemi için bir inbound (istemciden gelen istek) ve bir inbound (API proxy'si tarafından oluşturulan ve arka uç hedefine gönderilen istek) olmak üzere iki istek mesajı nesnesi oluşturulur.
context
nesnesi, şu istek mesajlarını temsil eden alt nesnelere sahiptir: context.proxyRequest
ve context.targetRequest
. Bu nesneler, JavaScript kodunuz yürütüldüğünde kapsamdaki istek akışındaki mülklere erişmenizi sağlar.
Not: Bir istek akışında bu özelliklere erişmek için request
kısaca nesnesini de kullanabilirsiniz. request
nesnesi, JavaScript kodunuzun akışın neresinde yürütüldüğüne bağlı olarak context.proxyRequest
veya context.targetRequest
değerini belirtir.
bağlam.*Alt nesne özelliklerini isteme
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Şu JavaScript: context.proxyRequest.headers['Content-Type']; context.proxyRequest.headers['Authorization']; işlevi şu değerleri döndürür: application/json Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z |
|
queryParams |
|
Örnekler: "?city=PaloAlto&city=NewYork" şu şekilde 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; işlevi şu değeri döndürür: POST |
|
body |
HTTP isteğinin mesaj 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 şekilde erişmek için: var name = context.targetRequest.body.asXML.name; XML özellikleri özelliklerine erişmek için var number = context.targetRequest.body.asXML.@number; Bir 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.*Yanıt alt nesneleri
API proxy'sinde yürütülen her HTTP işlemi için bir inbound (arka uç hizmetinden gelen yanıt) ve bir inbound (istemciye geri gönderilen yanıt) olmak üzere iki yanıt mesajı nesnesi oluşturulur.
Bağlam nesnesi, şu yanıt mesajlarını temsil eden alt nesnelere sahiptir: context.proxyResponse
ve context.targetResponse
. Bu nesneler, JavaScript kodunuz yürütüldüğünde kapsam dahilinde olan yanıt akışındaki özelliklere erişmenizi sağlar.
Not: Bu özelliklere bir yanıt akışından erişmek için kısayol nesnesi olarak response
da kullanabilirsiniz. response
nesnesi, JavaScript kodunuzun akışın neresinde yürütüldüğüne bağlı olarak context.proxyResponse
veya context.targetResponse
değerini belirtir.
bağlam.*Yanıt nesnesi özellikleri
Mülk adı | Açıklama |
---|---|
headers |
Yanıt mesajının |
Örnek: var cookie = context.targetResponse.headers['Set-Cookie']; |
|
status |
Özellik olarak 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ğinde aşağıdaki üyeler bulunur: context.targetResponse.content.asXML; context.targetResponse.content.asJSON; |
.asXML gösterimini kullanma
.asXML
gösterimini kullanarak bir XML dokümanında gezinmenin pratik bir yolu vardır.
Bu bölümde, bu gösterimin nasıl kullanılacağı ve request.content
ile context.proxyRequest.content
ile arasındaki fark açıklanmaktadır.
Örneğin:
request.content.asXML
veya
context.proxyRequest.content.asXML
Hem *.content
hem de *.content.asXML
formları dize bağlamında kullanılabilir ve JavaScript bunları dizeye dönüşür. İlk örnekte (*.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şisini aktarmak için .asXML
formunu kullanabilirsiniz. Diğer söz dizimini kullanarak hiyerarşiyi incelemek 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 İzleme aracına hata ayıklama bilgileri çıktısı vermek içinprint() işlevini kullanabileceğinizi unutmayın. Bu işleve doğrudan JavaScript nesne modeli üzerinden erişilebilir. Ö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")); }
Sonucu görmek için İzleme penceresinin alt kısmındaki Tüm işlemlerden çıkış'ı seçin. Çıkışı stepExecution-stdout
adlı Trace özelliğinde de bulabilirsiniz.
httpClient ile JavaScript çağrıları yapma
Bir API proxy akışında yürütülen özel JavaScript kodu içinden herhangi bir URL'ye birden fazla paralel, eşzamansız HTTP isteği göndermek için httpClient
API'sini kullanın.
httpClient
nesnesi, Apigee Edge JavaScript nesne modeli tarafından gösterilir.
httpClient Hakkında
httpClient
nesnesi, JavaScript nesne modeli aracılığıyla Apigee Edge'de çalışan özel JavaScript koduna maruz kalır. Bir API proxy'sine özel JavaScript eklemek için JavaScript politikasını kullanın. Politika çalıştırıldığında, özel JavaScript kodu yürütülür.
httpClient
nesnesi, kompozit hizmetler veya melez uygulamalar 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 ServiceCall politikasına alternatif olarak kullanılır.
Temel kullanım şeklini aşağıda görebilirsiniz. Bir İstek nesnesini somutlaştırın, nesneye bir URL atayın (örneğin, çağırmak istediğiniz bir arka uç hizmetine) ve bu istek nesnesiyle httpClient.send
yöntemini çağırın.
var myRequest = new Request(); myRequest.url = "http://www.example.com"; var exchangeObj = httpClient.send(myRequest);
httpMüşteri Referansı
HTTP İstemcisi iki yöntem sunar: get()
ve send()
.
httpClient.get()
HTTP üst bilgileri desteği olmadan, basit HTTP GET
istekleri için kullanışlı bir yöntem.
Kullanım
var exchangeObj = httpClient.get(url);
İadeler
Yöntem bir exchange
nesnesi döndürür. Bu nesnede özellik yok ve aşağıdaki yöntemler gösteriliyor:
isError()
: (boole) httpClient, sunucuya bağlanamadıysatrue
değerini döndürür.4xx
ve5xx
HTTP durum kodları, bağlantı tamamlandığında ve geçerli bir yanıt kodu döndürüldüğündeisError()
false
sonucunu verir.isError()
işlevitrue
değerini döndürürsegetResponse()
işlevine yapılan bir çağrıundefined
JavaScript kodunu döndürür.isSuccess()
: (boole) Gönderme işlemi tamamlandı ve başarılıysatrue
değerini döndürür.isComplete()
: (boole) İstek tamamlanırsatrue
değerini döndürür.waitForComplete()
: İstek tamamlanana kadar (başarılı veya hatayla) ileti dizisini duraklatır.getResponse()
: (nesne)httpClient.send()
tamamlandı ve başarılıysa yanıt nesnesini döndürür. Döndürülen nesne,context.proxyResponse nesnesiyle aynı yönteme ve özelliklere sahiptir. Bağlam nesnesi özeti bölümüne 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
Proxy akışına özel JavaScript kodu 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 sayfasına bakın.
- Çalışan JavaScript kod örnekleri için GitHub'daki Apigee Edge örneklerini inceleyin.
Apigee Topluluğu makaleleri
Apigee Topluluğu'nda ilgili şu makaleleri bulabilirsiniz: