JavaScript nesne modeli

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.

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 öğesi kullanıldığında, JavaScript kodu 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

context.flow

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';
}

context.session

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 requestkı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

url özelliği, targetRequest için şema, ana makine, bağlantı noktası, yol ve sorgu parametrelerini birleştiren bir okuma/yazma kolaylığı mülküdür.

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

  • protokol: URL'nin protokolü (ör. HTTP, HTTPS)
  • bağlantı noktası: Bağlantı noktası (örneğin, :80, :443)
  • barındırıcı: URL'nin ana makinesi (örneğin, www.example.com)
  • path: URI'nın 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 istek 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
Ş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

String => List eşlemesi olarak istek mesajı sorgu parametreleri.

Ö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 (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;

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:

  • 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 şekilde erişmek için:

var name = context.targetRequest.body.asXML.name;

XML özellikleri özelliklerine erişmek için @ gösterimini kullanın.

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

Ö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ıysa true değerini döndürür. 4xx ve 5xx HTTP durum kodları, bağlantı tamamlandığında ve geçerli bir yanıt kodu döndürüldüğünde isError() false sonucunu verir. isError() işlevi true değerini döndürürse getResponse() 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ıysa true değerini döndürür.
  • isComplete(): (boole) İstek tamamlanırsa true 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

Apigee Topluluğu makaleleri

Apigee Topluluğu'nda ilgili şu makaleleri bulabilirsiniz: