JavaScript nesne modeli

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Bu başlıkta Apigee Edge JavaScript Nesne Modeli ele alınmaktadır. Etkili iletişim sürecinin API'ye özel JavaScript eklemek için JavaScript politikasını kullanmayı planlıyorsanız bu model temsil eder.

Edge JavaScript nesne modeli hakkında

Apigee Edge JavaScript nesne modeli, mobil cihazlar için tasarlanan yalnızca Apigee Edge proxy akışında çalışan JavaScript kodunda kullanılabilir. JavaScript'i kullanıyorsunuz. politikasını uygulayın.

Bu model tarafından tanımlanan nesnelerin API proxy akışı içinde kapsamı vardır, yani belirli nesne ve özelliklerin yalnızca akışın belirli noktalarında kullanılabildiğinden emin olun. JavaScript yürütülür, yürütme için bir kapsam oluşturulur. Bu kapsamda, nesne başvuruları oluşturulur:

  • context: İleti bağlamına erişim sağlayan bir nesne
  • request: İstek nesnesine erişim sağlayan bir kısaltılmış öğe
  • response: İstek nesnesine erişime olanak tanıyan bir kısayol
  • crypto: Çeşitli karma işlevleri sağlar
  • print: Çıkış yayan bir işlev
  • özellikler: Politikadaki yapılandırma özelliklerine okuma erişimi sağlar

Bağlam nesnesi

context nesnesi global kapsama sahip. API'nin her yerinde kullanılabilir akış şeklinde ifade edilir. Dört alt nesnesi var: proxyRequest, proxyResponse, targetRequest, targetResponse. Bu alt nesnelerin kapsamı ortam isteği ve yanıtı, proxy isteği ve yanıtı veya hedef istek ve tıklayın. Ö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. JavaScript bir hedef akışta çalışıyorsa context.targetRequest ve context.targetResponse nesne kapsam dahilinde.

context nesnesi, ayrıntılı olarak açıklanan özelliklere ve yöntemlere de sahiptir daha fazla bilgi edineceksiniz. Örneğin, aşağıdaki JavaScript kodu örneğinde context.flow özelliğini kullanır ve şurada get/setVariable() yöntemlerini çağırır: context.

if (context.flow=="PROXY_REQ_FLOW") {
     var username = context.getVariable("request.formparam.user");
     context.setVariable("USER.name", username);
}

Bu yöntemler akış değişkenleri ile doğrudan etkileşimde bulunur. context.flow özelliğinin değeri, geçerli akış kapsamıdır. Proxy'de istek akışı, sabit PROXY_REQ_FLOW olarak ayarlanır. Hedefteyse yanıt akışı, TARGET_RESP_FLOW olarak ayarlandı. Bu sabit değer, özel kodu yürütmeniz gerekir. Alıcı, akış değişkenleri almanızı sağlar. Ayarlayıcı, akış değişkenlerini akış değişkenlerini de hesaba katmanız gerekir. Bu değişkenler genellikle proxy akışında kullanılır ve diğer politikalar.

Daha fazla ayrıntı için aşağıdaki içerik nesnesi referansı bölümüne bakın ve örnekler.

Şifreleme nesnesi

Şifreleme nesnesi, JavaScript Nesnesi'ne temel, yüksek performanslı kriptografik destek ekler Model. Daha fazla ayrıntı ve örnek için aşağıdaki kripto nesnesi referansı bölümüne bakın.

İstek ve yanıt nesneler

request ve response nesneleri kısa için ortam isteği ve yanıtı, proxy isteği ve yanıtı veya hedef istek ve tıklayın. Bu değişkenlerin atıfta bulunduğu nesneler, JavaScript politikası yürütür. JavaScript bir proxy uç noktası akışında çalışıyorsa istek ve yanıt değişkenleri context.proxyRequest ve context.proxyResponse. JavaScript bir hedef akışta çalışıyorsa değişkenler context.targetRequest ve context.targetResponse bölümlerine bakın.

JavaScript nesne modeli, hata ayıklama çıktısı almak için kullanabileceğiniz bir print() işlevi içerir uç izleme aracına gönderebilirsiniz. JavaScript yazdırma() ile hata ayıklama bölümüne bakın. özetleri.

Özellikler nesnesi

Politika yapılandırmasında bir öğesi kullanırken JavaScript kodu, properties değişkeni

Ö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 bölümünde:

  print(properties.firstname);  // prints Jenny
  print(properties.number);  // 8675309

Daha pratik bir şekilde, yapılandırma, kodun farklı şekilde davranmasına izin verebilir. farklı ortamlarda, farklı anlarda veya belirli bir zamanda çalıştırıldığında bir neden sunmalısınız.

Örneğin, aşağıda "değişken adı" belirtilmektedir ve içerik üreticinin çıkış:

<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ş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 nesnesi referansı

Şifreleme nesnesi, temel kriptografik karma oluşturma işlevlerini JavaScript'te gerçekleştirmenizi sağlar.

Şifreleme nesnesi global kapsama sahip. API proxy akışının içinde her yerde kullanılabilir. Şifreleme, şu karma nesneleriyle çalışmanıza olanak tanır:

  • SHA-1
  • SHA256
  • SHA512
  • MD5
ziyaret edin.

SHA-1 nesneleriyle çalışma

SHA-1 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ve 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

  • değer - (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ür

var _hashed_token = _sha1.digest64();

SHA-256 nesneleriyle çalışma

SHA-256 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ve 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

  • değer - (Dize) Herhangi bir dize değeri.

Örnek

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ürme

var _hashed_token = _sha256.digest64();

SHA-512 nesneleriyle çalışma

SHA-512 nesneleri oluşturabilir, bunları güncelleyebilir ve onaltılık ve 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

  • değer - (Dize) Herhangi bir dize değeri.

Örnek

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ür

var _hashed_token = _sha512.digest64();

MD5 nesneleriyle çalışma

MD5 nesneleri oluşturabilir, bunları güncelleyebilir ve 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

  • değer - (Dize) Herhangi bir dize değeri.

Örnek

Bir 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ı biçim: java.text.SimpleDateFormat. Örneğin: 'yyyy-AA-GG SS:dd:ss.SSS'
  • timezone - (Dize, isteğe bağlı) Bunun temel uygulaması parametresi java.util.TimeZone'dur. Bu parametre aynıDefault: UTC
  • time - (Sayı, isteğe bağlı) Biçimlendirilecek Unix zaman damgası değeri. Varsayılan: şu anki saat

Örnekler

Milisaniye cinsinden geçerli zamanı öğrenin:

var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');

Pasifik Saat Dilimi'nin geçerli saatini öğrenin:

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. Ayrıca java.text.SimpleDateFormat dokümanlarına 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");

Aşağıdakileri almak için getHash() işlevini kullanın: desteklenen karma nesnelerinden herhangi biri

Örnekler

var _hash1 = crypto.getHash('MD5');

var _hash2 = crypto.getHash('SHA-1');

var _hash3 = crypto.getHash('SHA-256');

var _hash4 = crypto.getHash('SHA-512');

Kriptolu ö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

Bir context nesnesi tarafından oluşturulan her istek/yanıt işlemi için API proxy'si. context nesnesi, değişkenleri alma, ayarlama ve kaldırma yöntemlerini gösterir her işlemle ilişkilidir.

Değişkenler bir işleme özel mülkleri tanımlar. Günün saati, istekte bulunan istemcinin kullanıcı aracısı ve hedef hizmetin URL'si, context içinde kullanılabilen tüm değişken örnekleri. Dolayısıyla, context, yürütülmesi için bu özelliklere dayanan mantık oluşturmak açısından faydalıdır sağlayabilir.

Akış değişkenleri referansı ve Değişkenleri Ayıklayın politikası hakkında daha fazla bilgi edinin.

bağlam nesne özeti

Bu tabloda bağlam nesnesi ve alt öğeleri kısaca açıklanmakta ve özellikler listelenmektedir her biri için geçerli.

Ad Açıklama Özellikler
context Mesaj işleme ardışık düzeni bağlamı ile istek ve yanıt için bir sarmalayıcı ProxyEndpoint ve TargetEndpoint tarafından yürütülen akışlar. akış, oturum
context.proxyRequest ProxyEndpoint'e gelen istek mesajını temsil eden bir nesne ( API proxy'sine uygulama isteğinde bulunanlar) başlıklar, sorgu parametreleri, yöntem, gövde, url
context.targetRequest TargetEndpoint (hedef uç noktası) kaynaklı giden istek mesajını temsil eden nesne arka uç hizmetine API proxy'si ekleyin). başlıklar, sorgu parametreleri, yöntem, gövde, url
context.targetResponse Gelen hedef yanıt mesajını temsil eden nesne (arka uç hizmetinden bağlama) başlıklar, içerik, durum
context.proxyResponse Giden proxy yanıt mesajını temsil eden bir nesne (API proxy'sinden istekte bulunan uygulama) başlıklar, içerik, durum
context.flow Geçerli akışın adı. Aşağıdaki context.flow'a bakın.
context.session İki farklı adım arasında nesne aktarmak için kullanabileceğiniz ad/değer çiftleri haritası aynı bağlamda yürütüldüğünden emin olmalısınız. Örnek: context.session['key'] = 123. Bu nesnenin ne zaman ve ne zaman kullanılacağıyla ilgili daha fazla bilgi için şuraya bakın: Apigee Topluluğu tartışması.

bağlam nesne yöntemleri

context.getVariable()

Önceden tanımlanmış veya özelleştirilebilen 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()

Özelleştirilebilen değişkenin veya yazılabilir önceden tanımlanmış değişkenlerin değerini ayarlar.

Söz dizimi

context.setVariable("variable-name", value);

Örnek

Değişken ayarlamak için yaygın bir senaryo, bir API proxy'sinin hedef URL'dir. Aşağıdaki JavaScript, USER.name adlı bir değişkenin değerini alır. bu değeri URL'ye bir sorgu parametresi olarak ekler http://mocktarget.apigee.net?user= ve ardından önceden tanımlanmış target.url ekleyebilirsiniz.

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, geçerli API proxy akışını tanımlayan bir dizedir. Bu özelliği, JavaScript'in eklendiği 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 Akış adı, ProxyEndpoints veya TargetEndpoints.

İsteğe bağlı bu özellik, ortak JavaScript'in birden fazla Akışta yürütüldüğü durumlarda yararlıdır. ancak yürütüldüğü Akışa bağlı olarak davranışı değişiklik gösterebilir. Akış özelliğini kullanma birden çok API proxy'sinde yeniden kullanılması amaçlanan JavaScript modülleri için mantığı yürütmeden önce mevcut Akışı kontrol etmek için gereklidir.

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

if (context.flow=="PROXY_RESP_FLOW") {
     context.proxyResponse.content='bar';
}

context.session

Yürütülen iki politika arasında nesne aktarmak için kullanılabilecek ad/değer çiftlerinin bir haritası ekleyebileceğiniz anlamına gelir.

Örnek

Oturumda bir değer belirleyin:

context.session['key']  = 123;

Oturumdan elde edilen değeri alın:

var value = context.session['key']; // 123
.

içerik nesnesi alt öğeleri

Aşağıda gösterildiği gibi, eksiksiz bir API proxy akışı her biri bağlam nesnesinin alt öğesi olan ilişkili bir mesaj nesnesi:

  • context.proxyRequest: İstekte bulunan gelen istek mesajı. gerekir.
  • context.targetRequest: Arka uca gönderilen giden istek mesajı geliştirmenizi sağlar.
  • context.proxyResponse: belirten bir e-posta alırsınız.
  • context.targetResponse: Arka uçtan alınan gelen istek mesajı geliştirmenizi sağlar.

Aşağıdaki bölümlerde bu nesnelerin yöntemleri ve özellikleri açıklanmaktadır:

bağlam.*Alt nesneleri isteyin.

API proxy'sinde yürütülen her bir HTTP işlemi için iki istek mesajı nesnesi oluşturuldu: bir gelen (istemciden gelen istek) ve bir giden ( API proxy'si ile arka uç hedefine gönderilir.)

context nesnesi, şu istek mesajlarını temsil eden alt nesneler içeriyor: context.proxyRequest ve context.targetRequest. Bu nesneler sayesinde JavaScript kodunuz olduğunda kapsam dahilindeki istek akışındaki mülklere yürütülür.

Not: Erişim için kısayol nesnesini request de kullanabilirsiniz. istek akışında bu özellikleri kullanabilirsiniz. request nesnesi, Bulunduğu yere bağlı olarak context.proxyRequest veya context.targetRequest JavaScript kodunuzun yürütüldüğü akış.

bağlam.*Alt nesne özelliklerini iste

Mülk adı Açıklama
url

url özelliği, şunları birleştiren bir okuma/yazma kolaylığı özelliğidir. targetRequest için şema, ana makine, bağlantı noktası, yol ve sorgu parametreleri kullanılır.

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

  • protokol: URL'nin protokolü (örneğin, HTTP, HTTPS)
  • bağlantı noktası: Bağlantı noktası (örneğin, :80, :443)
  • barındırıcı: URL'nin barındırıcısı (örneğin, www.example.com)
  • path: URI'nın yolu (örneğin, /v1/mocktarget)

url alınırken bir URL aşağıdaki biçimde 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şleme 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'];

şu değerleri döndürür:

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

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

Örnekler:

"?city=PaloAlto&city=NewYork"

şu şekillerde 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

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;

şu değeri döndürür:

POST
body

HTTP isteğinin ileti gövdesi (yük).

İsteğin 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 @ notasyonunu 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.*Alt nesneleri yanıtlayın

API proxy'sinde yürütülen her bir HTTP işlemi için iki yanıt mesajı nesnesi oluşturuldu: bir gelen (arka uç hizmetinden gelen yanıt) ve bir giden (yanıt) geri gönderilir.)

Bağlam nesnesinde, şu yanıt mesajlarını temsil eden alt nesneler var: context.proxyResponse ve context.targetResponse. Bu nesneler sayesinde JavaScript kodunuz şu anda kapsam dahilinde olan yanıt akışındaki yürütülür.

Not: Erişim için kısayol nesnesini response de kullanabilirsiniz. yanıt akışından alırsınız. response nesnesi, Bulunduğu yere bağlı olarak context.proxyResponse veya context.targetResponse JavaScript kodunuzun yürütüldüğü akış.

bağlam.*Yanıt nesnesi özellikleri

Mülk adı Açıklama
headers

String => List eşlemesi olarak yanıt mesajının 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ı 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 XML dokümanlarında gezinmek için pratik bir yöntem vardır. Bu bölümde, bu gösterimin nasıl kullanılacağı ve request.content ve context.proxyRequest.content.

Örneğin:

request.content.asXML

veya

context.proxyRequest.content.asXML

Bir dizede hem *.content hem de *.content.asXML formları kullanılabilir irdelemesine olanak tanır. JavaScript ise bunları dizeye dönüştürür. Önceki durumda (*.content) ayarlanırsa dize, tüm bildirimlerin yanı sıra XML yorumları da içerir. *.content.asXML durumunda ise sonucun dize değeri temizlenir. beyanlar ve yorumlar.

Ö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, XML hiyerarşisinden dolaşmak için .asXML formunu kullanabilirsiniz. Ayrıca öğelerin ve özelliklerin adlarını belirtip Hiyerarşiden geçiş yapılamaz diğer söz dizimini kullanabilirsiniz.

JavaScript ile hata ayıkla Print() ifadeleri

Özel JavaScript kodunu yürütmek için JavaScript politikasını kullanıyorsanız hata ayıklama bilgilerinin çıktısını İzleme aracına almak için Print() işlevini kullanın. Bu işlev doğrudan JavaScript nesne modeli aracılığıyla uygulanabilir. Ö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 ekranın alt kısmındaki Tüm işlemlerden çıkış'ı seçin İzleme penceresi. Çıkışı stepExecution-stdout adlı Trace mülkünde de bulabilirsiniz.

httpClient ile JavaScript çağrıları yapma

Herhangi bir URL'ye birden çok paralel, eşzamansız HTTP isteğinde bulunmak için httpClient kullanın API proxy akışında yürütülen özel JavaScript kodu içinden kullanılabilir. httpClient nesnesi, Apigee Edge JavaScript nesnesi tarafından açığa çıkarılıyor seçin.

httpClient Hakkında

httpClient nesnesi, Apigee Edge'de çalışan özel JavaScript koduna tabidir JavaScript nesne modeli aracılığıyla uygulanabilir. API proxy'sine özel JavaScript eklemek için JavaScript politikası. politika çalıştırıldığında özel JavaScript kodu yürütülür.

httpClient nesnesi, birleşik hizmetler geliştirmek veya emin olabilirsiniz. Örneğin, birden fazla arka uç çağrısını tek bir API yönteminde birleştirebilirsiniz. Bu nesne, ServiceÇağrı politikasına alternatif olarak yaygın olarak kullanılır.

Temel kullanım kalıbını aşağıda bulabilirsiniz. Bir İstek nesnesini örneklendirin, ona bir URL atayın (örneğin, çağırmak istediğiniz arka uç hizmetini) kullanıp httpClient.send yöntemini bu istekle birlikte çağırın. nesnesini tanımlayın.

var myRequest = new Request();
myRequest.url = "http://www.example.com";
var exchangeObj = httpClient.send(myRequest);

httpİstemci Referansı

HTTP İstemcisi iki yöntem sunar: get() ve send().

httpClient.get()

HTTP üstbilgileri 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 nesnenin özelliği yok ve aşağıdaki yöntemleri sunar:

  • isError(): (boole) httpClient, istemcinin başarısız olması durumunda true değerini döndürür sunucuya bağlanmalarını sağlar. 4xx ve 5xx HTTP durum kodları, isError() false (bağlantı tamamlandı ve geçerli bir yanıt) kodu döndürüldü. isError() true döndürürse bir çağrı yapılır getResponse(), undefined JavaScript'ini döndürür.
  • isSuccess(): (boole) Gönderme tamamlandıysa true değerini döndürür işidir.
  • isComplete(): (boole) İstek, true değerini döndürür belirir.
  • waitForComplete(): İstek tamamlanana kadar (başarılı olarak) ileti dizisini duraklatır veya hata).
  • getResponse(): (nesne) httpClient.send() tamamlandı ve başarılı oldu. Döndürülen nesnede content.proxyResponse nesnesiyle özdeş yöntemler ve özellikler kullanın. Bağlam nesnesi özeti konusuna bakın.
  • getError(): (dize) httpClient.send() çağrısıyla sonuçlandıysa hata mesajını dize olarak döndürür.

Örnek

HTTP özelliklerini içeren tam yapılandırılmış İstek nesnesi gönderir isteğinde bulunabilirsiniz. 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

Bu ilgili makaleleri Apigee'de bulabilirsiniz. Topluluk: