Proxy API pemrograman dengan JavaScript

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Dalam topik ini Anda akan mempelajari cara menggunakan JavaScript untuk menambahkan header HTTP secara dinamis ke dan cara mengurai respons JSON dan mengembalikan subset propertinya ke aplikasi yang meminta.

Download dan coba kode contoh

Tentang contoh buku resep ini

Contoh buku resep ini menggambarkan pola proxy API tempat Anda menerapkan perilaku API di pada JavaScript. Contoh JavaScript dirancang untuk menunjukkan cara bekerja dengan variabel sederhana dan isi pesan. Satu contoh menunjukkan cara mendapatkan dan menetapkan variabel. Yang kedua menunjukkan cara mengurai JSON dan membuat pesan dari hasilnya.

Dua contoh JavaScript ada di proxy API:

  • setHeaders.js: JavaScript ini mendapatkan nilai dari beberapa variabel yang disetel saat proxy API dipanggil. JavaScript menambahkan variabel tersebut ke respons agar Anda dapat melihat nilainya untuk setiap permintaan yang Anda buat.
  • minimize.js: JavaScript ini menunjukkan cara menggunakan pesan saat ini. Ide di balik sampel ini adalah bahwa layanan sering kali mengembalikan data lebih banyak daripada diperlukan. Jadi, JavaScript mengurai pesan respons, mengekstrak beberapa dan kemudian menggunakannya untuk membuat isi pesan respons.

Kode untuk setHeader.js:

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"));

Kode untuk minimize.js:

// 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);

Anda dapat mengakses variabel alur di JavaScript melalui objek konteks. Objek ini merupakan bagian dari model objek Edge JavaScript. Untuk mengetahui detail tentang model objek, lihat model objek JavaScript.

Sebelum memulai

Sebelum mengeksplorasi contoh buku resep ini, Anda juga harus memahami dasar-dasar konsep:

  • Apa yang dimaksud dengan kebijakan dan cara melampirkannya ke proxy. Sebagai pengantar yang baik tentang kebijakan, lihat Apa yang kebijakan?.
  • Struktur alur proxy, seperti yang dijelaskan dalam Mengonfigurasi alur. Flow memungkinkan Anda menentukan urutan kebijakan yang dijalankan oleh proxy API. Dalam contoh ini, beberapa kebijakan dibuat dan ditambahkan ke alur proxy API.
  • Cara project proxy API diatur pada sistem file Anda, seperti yang dijelaskan di Referensi konfigurasi proxy API.
  • Pengetahuan praktis tentang XML, JSON, dan JavaScript. Dalam contoh ini, Anda membangun API {i>proxy<i} dan kebijakannya dengan file XML yang ada pada sistem file.

Jika telah mengunduh kode contoh, Anda dapat menemukan semua file yang dibahas dalam topik dalam folder contoh javascript-cookbook. Bagian berikut membahas kode contoh secara detail.

Memahami alur proxy

Agar JavaScript dieksekusi di proxy API, Anda harus melampirkannya ke flow menggunakan kebijakan lampiran yang disebut 'Langkah'. Kebijakan jenis JavaScript (kapitalisasi catatan) hanya berisi referensi ke nama file JavaScript. Anda mengarahkan kebijakan ke file JavaScript menggunakan Elemen ResourceURL.

Misalnya, kebijakan berikut merujuk ke file JavaScript yang disebut setHeader.js.

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

Anda dapat melampirkan kebijakan ini ke alur proxy API seperti yang Anda lakukan pada jenis kebijakan lainnya. Menurut melampirkan kebijakan ke alur proxy API, berarti Anda menunjukkan tempat JavaScript harus dijalankan. Hal ini memungkinkan Anda untuk menjalankan JavaScript yang berinteraksi dengan pesan permintaan atau pesan respons seperti pesan 'flow' melalui proxy API. Dalam contoh ini, kedua JavaScript dieksekusi di alur respons, karena kebijakan melakukan dua hal: menetapkan {i>header <i}HTTP pada pesan respon dan 'minimalkan' pesan respons yang ditampilkan Apigee Edge ke aplikasi yang meminta.

Jika membuka konfigurasi alur ini di UI pengelolaan, Anda akan melihat konfigurasi alur di bawah ini.

Pilih Proxy Endpoints > default > PostFlow di Navigator panel web.

Konfigurasi XML terkait untuk ProxyEndpoint bernama 'default' ditampilkan di bawah ini.

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

Berikut adalah ringkasan elemen flow.

  • &lt;Request&gt; - <Request> terdiri dari beberapa &lt;Step&gt; yang kurang penting. Setiap langkah memanggil salah satu kebijakan yang Anda buat hingga topik ini. Kebijakan ini melampirkan JavaScript ke alur proxy API, dan lokasi lampiran kebijakan menentukan waktu eksekusi JavaScript.
  • &lt;Response&gt; - <Respons> juga menyertakan <Langkah>. Langkah-langkah ini juga memanggil kebijakan yang bertanggung jawab untuk memproses respons dari target (dalam contoh ini adalah target layanan tiruan Apigee--perhatikan Setelan HTTPTargetConnection di bagian /apiproxy/targets/default.xml.)
  • &lt;HTTPProxyConnection&gt; - Menentukan host dan jalur URI yang menentukan alamat jaringan yang dipanggil aplikasi untuk menggunakan API ini.
  • &lt;RouteRule&gt; - Elemen ini menentukan TargetEndpoint mana dipanggil oleh ProxyEndpoint.

Menambahkan kode JavaScript ke proxy

JavaScript (seperti skrip Python, file JAR Java, file XSLT, dan sebagainya) disimpan sebagai resource. Ketika Anda baru mulai bekerja dengan JavaScript, cara termudah untuk menyimpan File JavaScript di proxy API. Seperti yang Anda pelajari di awal, JavaScript harus dibuat sebagai generik dan dapat digunakan kembali, lalu disimpan di tingkat lingkungan atau organisasi. Dengan demikian, Anda tidak perlu menyimpan file JavaScript yang sama di beberapa proxy API, yang bisa dengan cepat menjadi tidak dapat dikelola.

Untuk mempelajari cara menyimpan resource di tingkat organisasi dan lingkungan, lihat File resource.

Cobalah

Untuk petunjuk tentang cara menerapkan dan memanggil proxy, lihat README di Cookbook JavaScript.

Mengimpor dan men-deploy proxy API

Setelah melakukan perubahan, Anda dapat Menyimpan proxy API di pembuat proxy API di UI pengelolaan.

Atau, Anda dapat menjalankan perintah berikut di direktori /api-platform-samples/doc-samples/javascript-cookbook.

$ sh deploy.sh

Menguji JavaScript

Jalankan perintah berikut di direktori /api-platform-samples/doc-samples/javascript-cookbook.

$ sh invoke.sh

Flag curl -v digunakan dalam skrip shell untuk melihat header HTTP pada respons pesan ini dimodifikasi oleh JavaScript.

Anda dapat langsung mengirimkan permintaan sebagai berikut:

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

Jika JavaScript dieksekusi dengan benar, Anda akan melihat respons seperti berikut:

< 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"}

Sekarang Anda dapat mengubah JavaScript untuk mencoba hal baru, men-deploy ulang proxy API, dan memverifikasi hasil dengan mengirimkan permintaan yang sama. Selalu pastikan Anda men-deploy proxy API yang berisi JavaScript untuk menerapkan perubahan.

Error skrip

Anda pasti akan melihat error saat menulis JavaScript. Format error JavaScript yang Anda akan melihat dikeluarkan oleh proxy API ditunjukkan di bawah ini.

{  
   "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"
      }
   }
}

Kapan menggunakan JavaScript

Di Apigee Edge, biasanya ada lebih dari satu cara untuk mengimplementasikan fungsi tertentu. Gunakan kebijakan siap pakai jika memungkinkan, dan hindari godaan untuk membuat kode semua proxy API Anda logika dalam JavaScript. Meskipun Apigee Edge memanfaatkan JavaScript yang dikompilasi untuk meningkatkan performa JavaScript, kemungkinan JavaScript tidak akan berfungsi sebaik Kebijakan. JavaScript mungkin lebih sulit dikelola dan di-debug. Cadangkan JavaScript untuk fungsi yang unik bagi lainnya.

Jika performa menjadi perhatian untuk fungsi kustom, gunakan Java jika memungkinkan.

Ringkasan

Dalam topik buku resep ini, Anda telah mempelajari cara menyertakan JavaScript dalam proxy API untuk menerapkan perilaku kustom. Perilaku kustom yang diterapkan oleh contoh mendemonstrasikan cara mendapatkan variabel, dan cara mengurai JSON dan membuat respons kustom membuat pesan teks.