JavaScript nesne modeli

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.

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 öğesi kullanılırken JavaScript kodu, 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>
Daha sonra 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

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

context.flow

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_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_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';
}

context.session

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

url özelliği, hedef istek için şema, ana makine, bağlantı noktası, yol ve sorgu parametrelerini birleştiren, okuma/yazma kolaylığı sağlayan bir özelliktir.

İsteğin tam URL'si aşağıdaki özelliklerden oluşur:

  • protocol: URL'nin protokolü (örneğin, HTTP, HTTPS)
  • bağlantı noktası: Bağlantı noktası (örneğin, :80, :443)
  • host: URL'nin ana makinesi (örneğin, www.example.com)
  • path: URI'nin yolu (örneğin, /v1/mocktarget)

url alınırken aşağıdaki biçimde bir URL döndürülür:

protocol://host:port/path?queryParams

Örnekler:

context.targetRequest.url = 'http://www.example.com/path?q1=1'
context.targetRequest.protocol ='https';
headers

String => List eşlemesi olarak HTTP isteği başlıkları

Örnekler:

Bu HTTP isteği 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.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, String => List eşlemesi olarak.

Ö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 (GET, POST, PUT, DELETE, PATCH vb.)

Ö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:

  • context.targetRequest.body.asXML;
  • context.targetRequest.body.asJSON;
  • context.targetRequest.body.asForm;

Ö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 @ notasyonunu kullanın.

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, String => List eşlemesi olarak.

Ö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ıysa true değerini döndürür. Bağlantı tamamlandığı ve geçerli bir yanıt kodu döndürüldüğü için 4xx ve 5xx HTTP durum kodları isError() false ile sonuçlanır. isError() true değerini döndürürse getResponse() çağrısı JavaScript undefined değerini döndürür.
  • isSuccess(): (boolean) Gönderme işlemi tamamlandıysa ve başarılı olduysa true değerini döndürür.
  • isComplete(): (boolean) İstek tamamlandıysa true değ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

Apigee Topluluğu makaleleri

Bu ilgili makaleleri Apigee Topluluğu'nda bulabilirsiniz: