JavaScript ile API proxy'lerini programlama

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

Bu konuda, bir web sitesine dinamik olarak HTTP üstbilgileri eklemek için yanıt mesajını ve bir JSON yanıtının nasıl ayrıştırılacağını ve özelliklerinin bir alt kümesini istekteki uygulama.

Örnek kodu indirip deneyin

Bu tarif defteri örneği hakkında

Bu tarif defteri örneğinde, API davranışını uyguladığınız bir API proxy kalıbı JavaScript'e dokunun. JavaScript örnekleri, basit değişkenlerle nasıl çalışacağınızı göstermek için tasarlanmıştır. hem de ileti içeriği. Bir örnek, değişkenleri nasıl alacağınızı ve ayarlayacağınızı gösterir. İkinci örnek, JSON'u nasıl ayrıştıracağınızı ve sonuçtan nasıl bir mesaj oluşturacağınızı gösterir.

API proxy'sinde iki JavaScript örneği bulunur:

  • setHeaders.js: Bu JavaScript, bir API proxy'si çağrıldığında ayarlanır. JavaScript bu değişkenleri yanıta ekler mesajı görürsünüz. Böylece, gönderdiğiniz her istek için bu değerlerin değerini görebilirsiniz.
  • minimize.js: Bu JavaScript, bir mesajla nasıl çalışacağınızı gösterir içerik. Bu örneğin arkasındaki fikir, bir hizmetin genellikle gerekir. Bu nedenle, JavaScript yanıt mesajını ayrıştırır ve birkaç ilginç ve bunları yanıt mesajının içeriğini oluşturmak için kullanır.

setHeader.js için kod:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

minimize.js için kod:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

JavaScript'teki akış değişkenlerine bağlam nesnesi aracılığıyla erişebilirsiniz. Bu nesne şuranın parçası: Edge JavaScript nesne modeli. Nesne modeliyle ilgili ayrıntılar için JavaScript nesne modeli konusuna bakın.

Başlamadan önce

Bu tarif defteri örneğini incelemeden önce, bu temel kavramlara aşina olmanız gerekir: kavramlar:

  • Politikaların ne olduğu ve proxy'lere nasıl ekleneceği. Politikaları iyi bir şekilde tanıtabilmek için Nedir? ne olur?
  • Akışları yapılandırma bölümünde açıklandığı gibi, bir proxy akışının yapısı. Akışlar politikaların bir API proxy'si tarafından yürütüldüğü sırayı belirtir. Bu örnekte politikalar oluşturulup bir API proxy akışına eklenir.
  • API proxy projesinin dosya sisteminizde nasıl organize edildiği aşağıda açıklanmıştır: API proxy'si yapılandırma referansı.
  • XML, JSON ve JavaScript çalışma bilgisi. Bu örnekte, API'yi derleyip proxy'sini ve politikalarını, dosya sisteminde bulunan XML dosyalarıyla birlikte gönderir.

Örnek kodu indirdiyseniz bu e-postada ele alınan tüm dosyaları javascript-cookbook örnek klasöründe bulabilirsiniz. Aşağıdaki bölümlerde ele alınan konular: ayrıntılı olarak inceleyeceğiz.

Proxy akışını anlama

JavaScript'in API proxy'sinde yürütülmesini sağlamak için JavaScript'i bir politika kullanarak akışa eklemeniz gerekir bir ek iliştirmeniz gerekir. JavaScript türündeki bir politika (notlarda büyük harf) yalnızca bir bir JavaScript dosyasının adına referans verir. Politikayı bir JavaScript dosyasına yönlendirmek için ResourceURL öğesi.

Örneğin, aşağıdaki politika, setHeader.js

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>
.

Bu politikayı, diğer tüm politika türlerinde olduğu gibi bir API proxy akışına ekleyebilirsiniz. Ölçüt politikayı API proxy akışına ekleyerek JavaScript'in nerede yürütülmesi gerektiğini belirtirsiniz. Bu, istek mesajları veya yanıt mesajıyla etkileşimde bulunan JavaScript'i yürütmenize olanak tanır ve bu akış sırasında izin veriliyor. Bu örnekte, her iki JavaScript de iki şey yaptığı için politikalar iki şey yapar: yanıt iletisine HTTP üstbilgileri eklemek ve "en aza indirmek" Apigee Edge'in istekte bulunan uygulamaya döndürdüğü yanıt mesajı.

Bu akış yapılandırmasını yönetim arayüzünde açarsanız akış yapılandırmasını bölümüne göz atın.

Proxy Uç Noktaları > varsayılan > PostFlow Gezinme bölmesini tıklayın.

"default" adlı ProxyEndpoint'e karşılık gelen XML yapılandırması gösteriliyor bölümüne göz atın.

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Akış öğelerinin bir özetini burada bulabilirsiniz.

  • &lt;Request&gt;: <İstek> öğe birkaç taneden oluşur &lt;Step&gt; öğeler. Her adımda oluşturduğunuz politikalardan biri, daha iyi olur. Bu politikalar, API proxy akışına bir JavaScript ekler ve JavaScript'in ne zaman yürütüleceğini belirler.
  • &lt;Response&gt; - <Yanıt> öğesi, aynı zamanda <Steps>. Bu adımlarda, nihai URL'nin işlenmesinden ve (bu örnekte Apigee'nin model hizmet hedefidir) - bu örnekte /apiproxy/targets/default.xml altındaki HTTPTargetConnection ayarının altında yer alır.)
  • &lt;HTTPProxyConnection&gt; - uygulamaların bu API'yi kullanmak için çağırdığı ağ adresini tanımlayın.
  • &lt;RouteRule&gt;: Bu öğe, hangi TargetEndpoint'i yapılandırması ProxyEndpoint tarafından çağrılır.

Proxy'ye JavaScript kodu ekleme

JavaScript (Python komut dosyaları, Java JAR dosyaları, XSLT dosyaları ve benzeri) kaynaklar. JavaScript ile çalışmaya yeni başladığınızda, en kolay yöntem, API proxy'sindeki JavaScript dosyaları. İlerledikçe, JavaScript'in genel ve yeniden kullanılabilir ve ardından ortam veya kuruluş düzeyinde depolanır. Böylece, aynı JavaScript dosyalarını birden çok API proxy'sinde saklamanız gerekmez. Böylece, zamanla yönetilemez hale gelebilir.

Kaynakları kuruluş ve ortam düzeyinde depolama hakkında bilgi edinmek için Kaynak dosyaları başlıklı makaleyi inceleyin.

Deneyin

Proxy'yi dağıtma ve çağırmayla ilgili talimatlar için bkz. JavaScript tarif defteri BENİOKU).

İçe aktarma ve dağıtma API proxy'si

Değişiklikleri yaptıktan sonra API proxy'sini API proxy'si oluşturucuda Kaydedebilirsiniz yönetim arayüzündeki aracı ziyaret edin.

Alternatif olarak, dizinde aşağıdaki komutu çalıştırabilirsiniz: /api-platform-samples/doc-samples/javascript-cookbook

$ sh deploy.sh

JavaScript'i test etme

Dizinde aşağıdaki komutu çalıştırın /api-platform-samples/doc-samples/javascript-cookbook

$ sh invoke.sh

-v curl işareti, yanıttaki HTTP üstbilgilerini görüntülemek için kabuk komut dosyasında kullanılır JavaScript tarafından değiştirilen mesajı.

Bir talebi aşağıdaki şekilde doğrudan gönderebilirsiniz:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

JavaScript düzgün bir şekilde çalışırsa, aşağıdaki gibi bir yanıt görürsünüz:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

Artık JavaScript'i değiştirerek yeni şeyler deneyebilir, API proxy'sini yeniden dağıtabilir ve daha fazla arama yapabilirsiniz. Şunu içeren API proxy'sini dağıttığınızdan emin olun: geçerli olması için JavaScript'inizi güncelleyin.

Komut dosyası hataları

JavaScript yazarken kaçınılmaz olarak hatalarla karşılaşacaksınız. JavaScript hatalarının biçimi, bir API proxy'si tarafından yayınlandığını görürsünüz.

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

JavaScript ne zaman kullanılır?

Apigee Edge'de belirli işlevleri uygulamanın genellikle birden fazla yolu vardır. Tekliflerinizi otomatikleştirmek ve optimize etmek için mümkünse kullanıma hazır politikaları kullanın ve tüm API proxy'nizi kodlama cazibesini önleyin mantığına geçelim. Apigee Edge, performansı iyileştirmek için derlenmiş JavaScript'ten performans gösterdiği için JavaScript'in Politikalar kadar iyi performans gösterme olasılığı düşüktür. JavaScript, sağlamak ve hata ayıklamak daha zordur. JavaScript'i yalnızca işletmenize özgü işlevler için ayırın gereksinimlerini karşılayın.

Özel işlevler için performansla ilgili bir endişeniz varsa mümkün olduğunca Java kullanın.

Özet

Bu tarif defteri konusunda, JavaScript'in API proxy'sine nasıl dahil edilebileceğini öğrendiniz. özel davranış uygulamak için kullanılan konfigürasyondur. Örnekler tarafından uygulanan özel davranış değişkenlerin nasıl alınacağını ve JSON'un nasıl ayrıştırılacağını ve özel yanıtın nasıl oluşturulduğunu gösterir mesaj.