Model objek JavaScript

Halaman ini berlaku untuk Apigee dan Apigee Hybrid.

Baca dokumentasi Apigee Edge.

Topik ini membahas Model Objek JavaScript Apigee. Penting untuk memahami model ini jika Anda ingin menggunakan kebijakan JavaScript untuk menambahkan JavaScript kustom ke proxy API.

Tentang model objek JavaScript

Model objek JavaScript menetapkan objek dengan properti terkait yang tersedia untuk kode JavaScript yang dieksekusi dalam alur proxy Apigee. Gunakan kebijakan JavaScript untuk melampirkan kode kustom ini ke alur proxy API.

Objek yang ditentukan oleh model ini memiliki cakupan dalam alur proxy API, yang berarti bahwa objek dan properti tertentu hanya tersedia pada titik tertentu dalam alur. Saat JavaScript dijalankan, cakupan akan dibuat untuk eksekusi tersebut. Dalam cakupan tersebut, referensi objek berikut akan dibuat:

  • context: Objek yang memberikan akses ke konteks pesan
  • request: Singkatan yang mengizinkan akses ke objek permintaan
  • response: Singkatan yang memungkinkan akses ke objek respons
  • crypto: Menyediakan berbagai fungsi hash
  • print: Fungsi untuk memunculkan output
  • properti: Mengizinkan akses baca ke properti konfigurasi pada kebijakan

Objek konteks

Objek context memiliki cakupan global. Protokol ini tersedia di mana saja dalam alur proxy API. Objek ini memiliki empat objek turunan: proxyRequest, proxyResponse, targetRequest, targetResponse. Objek turunan ini mencakup permintaan dan respons standby, baik permintaan dan respons proxy maupun permintaan dan respons target. Misalnya, jika kebijakan JavaScript dieksekusi di bagian endpoint proxy dari alur, objek context.proxyRequest dan context.proxyResponse akan berada dalam cakupan. Jika JavaScript berjalan di alur target, objek context.targetRequest dan context.targetResponse akan berada dalam cakupan.

Objek context juga memiliki properti dan metode yang dijelaskan secara mendetail dalam topik ini. Misalnya, contoh kode JavaScript berikut menggunakan properti context.flow dan memanggil metode get/setVariable() pada context.

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

Metode ini berinteraksi langsung dengan variabel flow. Nilai properti context.flow adalah cakupan flow saat ini. Dalam alur permintaan proxy, ini disetel ke konstanta PROXY_REQ_FLOW. Jika dalam alur respons target, parameter ini disetel ke TARGET_RESP_FLOW. Konstanta ini berguna untuk mengeksekusi kode khusus cakupan. Pengambil memungkinkan Anda mendapatkan variabel alur, sedangkan penyetel memungkinkan Anda menetapkan variabel alur. Variabel ini umumnya tersedia di alur proxy dan dapat digunakan oleh kebijakan lain.

Lihat referensi objek konteks untuk detail dan contoh selengkapnya.

Objek kripto

Objek kripto ini menambahkan dukungan kriptografi dasar berperforma tinggi ke Model Objek JavaScript. Lihat referensi objek kripto untuk mengetahui detail dan contoh selengkapnya.

Objek permintaan dan respons

Objek request dan response adalah singkatan yang merujuk ke permintaan dan respons standby, baik permintaan dan respons proxy maupun permintaan dan respons target. Objek yang dirujuk variabel ini bergantung pada konteks tempat kebijakan JavaScript dijalankan. Jika JavaScript berjalan di alur endpoint proxy, variabel permintaan dan respons akan merujuk ke context.proxyRequest dan context.proxyResponse. Jika JavaScript berjalan di alur target, variabelnya akan merujuk ke context.targetRequest dan context.targetResponse.

Model objek JavaScript menyertakan fungsi print() yang dapat Anda gunakan untuk menghasilkan output informasi debug ke alat Debug Apigee. Lihat Men-debug dengan pernyataan print() JavaScript.

Objek properti

Saat menggunakan elemen Properties dalam konfigurasi kebijakan, kode JavaScript dapat mengakses nilai properti tersebut menggunakan variabel properties.

Misalnya, jika konfigurasi JavaScript Anda berisi:

<Javascript name='JS-1' >
  <Properties>
    <Property name="number">8675309</Property>
    <Property name="firstname">Jenny</Property>
  </Properties>
  <ResourceURL>jsc://my-code.js</ResourceURL>
</Javascript>

Kemudian, di my-code.js, Anda dapat:

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

Lebih praktisnya, konfigurasi dapat memungkinkan kode berperilaku lain saat dijalankan di lingkungan yang berbeda, pada momen yang berbeda, atau karena alasan apa pun.

Misalnya, skrip berikut menentukan "nama variabel" dan gaya output yang harus diberi informasi oleh JavaScript:

<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>
Lalu di emit-results.js, kode tersebut dapat melakukan hal ini:
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));
}

Referensi objek kripto

Objek kripto memungkinkan Anda melakukan fungsi hashing kriptografi dasar dalam JavaScript.

Objek kripto memiliki cakupan global. Protokol ini tersedia di mana saja dalam alur proxy API. Dengan kriptografi, Anda dapat menggunakan objek hash ini:

  • SHA-1
  • SHA256
  • SHA512
  • MD5

Bekerja dengan objek SHA-1

Anda dapat membuat objek SHA-1, memperbaruinya, dan mengonversinya menjadi nilai hex dan base64.

Membuat objek SHA-1 baru

var _sha1 = crypto.getSHA1();

Memperbarui objek SHA-1

Sintaksis

_sha1.update(value);

Parameter

  • value - (String) Nilai string apa pun.

Contoh

Update objek SHA-1:

_sha1.update("salt_value");

_sha1.update("some text");

Menampilkan objek SHA-1 sebagai string heksadesimal

var _hashed_token = _sha1.digest();

Menampilkan objek SHA-1 sebagai string base64

var _hashed_token = _sha1.digest64();

Bekerja dengan objek SHA-256

Anda dapat membuat objek SHA-256, memperbaruinya, lalu mengonversinya menjadi nilai hex dan base64.

Membuat objek SHA-256 baru

var _sha256 = crypto.getSHA256();

Memperbarui objek SHA-256

Sintaksis

_sha256.update(value);

Parameter

  • value - (String) Nilai string apa pun.

Contoh

Update objek SHA-256:

_sha256.update("salt_value");

_sha256.update("some text");

Menampilkan objek SHA-256 sebagai string heksadesimal

var _hashed_token = _sha256.digest();

Menampilkan objek SHA-256 sebagai string base64

var _hashed_token = _sha256.digest64();

Bekerja dengan objek SHA-512

Anda dapat membuat objek SHA-512, memperbaruinya, dan mengonversinya menjadi nilai hex dan base64.

Membuat objek SHA-512 baru

var _sha512 = crypto.getSHA512();

Memperbarui objek SHA-512

Sintaksis

_sha512.update(value);

Parameter

  • value - (String) Nilai string apa pun.

Contoh

Update objek SHA-512:

_sha512.update("salt_value");

_sha512.update("some text");

Menampilkan objek SHA-512 sebagai string heksadesimal

var _hashed_token = _sha512.digest();

Menampilkan objek SHA-512 sebagai string base64

var _hashed_token = _sha512.digest64();

Bekerja dengan objek MD5

Anda dapat membuat objek MD5, memperbaruinya, lalu mengonversinya menjadi nilai hex dan base64.

Membuat objek MD5 baru

var _md5 = crypto.getMD5();

Memperbarui objek MD5

Sintaksis

_md5.update(value);

Parameter

  • value - (String) Nilai string apa pun.

Contoh

Update objek MD5:

_md5.update("salt_value");

_md5.update("some text");

Menampilkan objek MD5 sebagai string heksadesimal

var _hashed_token = _md5.digest();

Menampilkan objek MD5 sebagai string base64

var _hashed_token = _md5.digest64();

Dukungan tanggal/waktu kripto

Objek kripto mendukung pola pemformatan tanggal/waktu.

crypto.dateFormat()

Menampilkan tanggal dalam format string.

Sintaksis

crypto.dateFormat(format, [timezone], [time])

Parameter

  • format - (String) Implementasi yang mendasari untuk parameter ini adalah java.text.SimpleDateFormat. Misalnya: 'YYYY-MM-DD HH:mm:ss.SSS'
  • timezone - (String, opsional) Implementasi yang mendasari untuk parameter ini adalah java.util.TimeZone. Parameter ini samaDefaultnya: UTC
  • time - (Angka, opsional) Nilai stempel waktu Unix yang akan diformat. Default: waktu saat ini

Contoh

Dapatkan waktu saat ini, hingga milidetik:

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

Dapatkan waktu saat ini untuk Zona Waktu Pasifik:

var _pst = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST');

Dapatkan nilai sepuluh detik dari sekarang:

var _timeNow = Number(context.getVariable('system.timestamp'));
var tenSeconds = crypto.dateFormat('YYYY-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);

Contoh tambahan. Lihat juga dokumentasi java.text.SimpleDateFormat.

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

Gunakan getHash() untuk mendapatkan objek hash yang didukung

Contoh

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

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

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

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

Sampel dengan kripto

try {
    // get values to use with hash functions
    var salt = context.getVariable("salt") || 'SomeHardCodedSalt';
    var host = context.getVariable("request.header.Host");
    var unhashedToken = "";

    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(unhashedToken);

    // convert to base64
    var base64Token = sha512.digest64();

    // set headers
    context.setVariable("request.header.now", now);
    context.setVariable("request.header.token", base64Token);

} catch(e) {
    throw 'Error in Javascript';
}

referensi objek konteks

Objek context dibuat untuk setiap transaksi permintaan/respons yang dijalankan oleh proxy API. Objek context mengekspos metode untuk mendapatkan, menetapkan, dan menghapus variabel yang terkait dengan setiap transaksi.

Variabel menentukan properti khusus untuk suatu transaksi. Waktu, lokalitas klien yang meminta, agen pengguna klien yang meminta, dan URL layanan target adalah semua contoh variabel yang tersedia di context. Oleh karena itu, context berguna untuk mem-build logika yang mengandalkan properti ini untuk menjalankan perilaku kustom.

Lihat Referensi variabel flow dan kebijakan ExtractVariables.

ringkasan objek konteks

Tabel ini menjelaskan secara singkat objek konteks dan turunannya, serta mencantumkan properti yang terikat pada masing-masing objek tersebut.

Nama Deskripsi Properti
context Wrapper untuk konteks pipeline pemrosesan pesan serta Alur permintaan dan respons yang dijalankan oleh ProxyEndpoint dan TargetEndpoint. alur, sesi
context.proxyRequest Objek yang mewakili pesan permintaan masuk ke ProxyEndpoint (dari aplikasi yang meminta ke proxy API) header, parameter kueri, metode, isi, URL
context.targetRequest Objek yang mewakili pesan permintaan keluar dari TargetEndpoint (dari proxy API ke layanan backend). header, parameter kueri, metode, isi, URL
context.targetResponse Objek yang mewakili pesan respons target masuk (dari layanan backend ke proxy API) header, konten, status
context.proxyResponse Objek yang mewakili pesan respons proxy keluar (dari proxy API ke aplikasi yang meminta) header, konten, status
context.flow Nama alur saat ini. Lihat context.flow.
context.session Peta pasangan nama/nilai yang dapat Anda gunakan untuk meneruskan objek di antara dua langkah berbeda yang dijalankan dalam konteks yang sama. Misalnya: context.session['key'] = 123. Untuk informasi selengkapnya tentang kapan dan kapan objek ini tidak boleh digunakan, lihat Apa perbedaan antara context.session['hello'] = {} dan context.setVariable("hello", {}).

metode objek konteks

context.getVariable()

Mengambil nilai variabel kustom atau yang telah ditentukan sebelumnya.

Sintaksis

context.getVariable("variable-name");

Contoh

Untuk mendapatkan nilai untuk tahun ini:

var year = context.getVariable('system.time.year');

context.setVariable()

Menetapkan nilai untuk variabel kustom atau untuk variabel standar yang dapat ditulis.

Sintaksis

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

Contoh

Skenario umum untuk menetapkan variabel adalah saat proxy API harus menulis URL target secara dinamis. JavaScript berikut mendapatkan nilai variabel yang disebut USER.name, menambahkan nilai tersebut sebagai parameter kueri ke URL http://mocktarget.apigee.net?user=, lalu menetapkan target.url yang telah ditentukan ke nilai tersebut.

context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));

context.removeVariable()

Menghapus variabel dari konteks.

Sintaksis

context.removeVariable('variable-name');

properti objek konteks

context.flow

Properti flow adalah string yang mengidentifikasi alur proxy API saat ini. Properti ini digunakan untuk menunjukkan Flow tempat JavaScript dilampirkan. Nilai yang didukung adalah:

  • PROXY_REQ_FLOW
  • PROXY_RESP_FLOW
  • TARGET_REQ_FLOW
  • TARGET_RESP_FLOW

Setiap nama Alur mencakup PreFlow, PostFlow, dan Flow bersyarat apa pun yang ditentukan dalam ProxyEndpoint atau TargetEndpoint.

Properti opsional ini berguna ketika JavaScript umum dieksekusi di lebih dari satu Flow, tetapi dapat bervariasi perilakunya bergantung pada Flow tempatnya dieksekusi. Gunakan properti Flow untuk modul JavaScript yang dimaksudkan untuk digunakan kembali di beberapa proxy API, yang mengharuskan kode untuk memeriksa Flow saat ini sebelum mengeksekusi logika.

Contoh

Setel header HTTP hanya pada Alur targetRequest:

if (context.flow=="TARGET_REQ_FLOW") {
     context.targetRequest.headers['TARGET-HEADER-X']='foo';
}

Setel konten hanya di Alur proxyResponse:

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

context.session

Peta pasangan nama/nilai yang dapat digunakan untuk meneruskan objek di antara dua kebijakan yang dijalankan dalam konteks pesan yang sama.

Contoh

Tetapkan nilai dalam sesi:

context.session['key']  = 123;

Mendapatkan manfaat dari sesi ini:

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

turunan objek konteks

Seperti ditunjukkan di bawah ini, Flow proxy API lengkap mencakup empat fase berbeda, yang masing-masing memiliki objek pesan terkait yang merupakan turunan dari objek konteks:

  • context.proxyRequest: Pesan permintaan masuk yang diterima dari klien yang meminta.
  • context.targetRequest: Pesan permintaan keluar yang dikirim ke layanan backend.
  • context.proxyResponse: Pesan respons keluar yang ditampilkan ke klien yang meminta.
  • context.targetResponse: Pesan permintaan masuk yang diterima dari layanan backend.

Diagram permintaan dan respons yang melewati endpoint proxy dan endpoint target.

Bagian berikut menjelaskan metode dan properti objek ini:

Konteks .*Meminta objek turunan

Untuk setiap transaksi HTTP yang berjalan di proxy API, dua objek pesan permintaan akan dibuat: satu inbound (permintaan dari klien) dan satu inbound (permintaan yang dibuat oleh proxy API dan dikirim ke target backend.)

Objek context memiliki objek turunan yang mewakili pesan permintaan ini: context.proxyRequest dan context.targetRequest. Berbagai objek ini memungkinkan Anda mengakses properti dalam alur permintaan yang berada dalam cakupan saat kode JavaScript Anda dieksekusi.

konteks.*Minta properti objek turunan

Nama properti Deskripsi
url

Properti url adalah properti praktis baca/tulis yang menggabungkan skema, host, port, parameter jalur dan kueri untuk targetRequest.

URL lengkap permintaan terdiri dari properti berikut:

  • protocol: Protokol URL (misalnya, HTTP, HTTPS)
  • port: Port (misalnya, :80, :443)
  • host: Host URL (misalnya, www.example.com)
  • path: Jalur URI (misalnya, /v1/mocktarget)

Saat mendapatkan url, URL akan ditampilkan dalam format berikut:

protocol://host:port/path?queryParams

Contoh:

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

Header permintaan HTTP sebagai pemetaan String => List

Contoh:

Untuk permintaan HTTP ini:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
JavaScript berikut:
context.proxyRequest.headers['Content-Type'];
context.proxyRequest.headers['Authorization'];

akan menampilkan nilai berikut

application/json
Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z
queryParams

Parameter kueri pesan permintaan sebagai pemetaan String => List.

Contoh:

"?city=PaloAlto&city=NewYork"

dapat diakses sebagai:

context.proxyRequest.queryParams['city'];  // == 'PaloAlto'
context.proxyRequest.queryParams['city'][0]     // == 'PaloAlto'
context.proxyRequest.queryParams['city'][1];    // == 'NewYork'
context.proxyRequest.queryParams['city'].length(); // == 2
method

Kata kerja HTTP (GET, POST, PUT, DELETE. PATCH, dll.) yang terkait dengan permintaan

Contoh:

Untuk permintaan ini:

POST /v1/blogs HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z

JavaScript berikut:

context.proxyRequest.method;

akan menampilkan nilai berikut

POST
body

Isi pesan (payload) permintaan HTTP.

Isi permintaan memiliki anggota berikut:

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

Contoh:

Untuk isi XML:

<customer number='1'>
<name>Fred<name/>
<customer/>

Untuk mengakses elemen objek XML sebagai berikut:

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

Untuk mengakses atribut XML, gunakan notasi @.

var number = context.targetRequest.body.asXML.@number;

Untuk isi permintaan JSON:

{
"a":  1 ,
"b" : "2"
}
var a = context.proxyRequest.body.asJSON.a;    // == 1
var b = context.proxyRequest.body.asJSON.b;    // == 2

Untuk membaca parameter formulir:

"vehicle=Car&vehicle=Truck"
v0 = context.proxyRequest.body.asForm['vehicle'][0];
v1 = context.proxyRequest.body.asForm['vehicle'][1];

context.*Respons objek turunan

Untuk setiap transaksi HTTP yang dieksekusi di proxy API, dua objek pesan respons akan dibuat: satu inbound (respons dari layanan backend) dan satu inbound (respons dikirim kembali ke klien.)

Objek konteks memiliki objek turunan yang mewakili pesan respons ini: context.proxyResponse dan context.targetResponse. Objek ini memungkinkan Anda mengakses properti dalam alur respons yang berada dalam cakupan saat kode JavaScript Anda dieksekusi.

konteks.*Properti objek respons

Nama properti Deskripsi
headers

Header HTTP pesan respons sebagai pemetaan String => List.

Contoh:

var cookie = context.targetResponse.headers['Set-Cookie'];
status

Kode status dengan pesan status sebagai properti. Kode status dan pesan status tersedia sebagai properti.

Contoh:

var status = context.targetResponse.status.code;   // 200
var msg = context.targetResponse.status.message;   // "OK"
content

Isi HTTP (konten payload) pesan respons.

Konten respons memiliki anggota berikut:

context.targetResponse.content.asXML;
context.targetResponse.content.asJSON;

Menggunakan notasi .asXML

Ada cara praktis untuk melihat dokumen XML menggunakan notasi .asXML. Bagian ini menjelaskan cara menggunakan notasi ini, dan perbedaannya dengan request.content dan context.proxyRequest.content.

Contoh:

request.content.asXML

atau

context.proxyRequest.content.asXML

Baik formulir *.content maupun *.content.asXML dapat digunakan dalam konteks string, dan JavaScript akan memaksanya untuk menjadi string. Dalam kasus sebelumnya (*.content), string menyertakan semua deklarasi serta komentar XML. Dalam kasus terakhir (*.content.asXML), nilai string hasil akan dibersihkan dari deklarasi dan komentar.

Contoh

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>

Selain itu, Anda dapat menggunakan bentuk .asXML untuk menjelajahi hierarki XML, dengan menentukan nama elemen dan atribut. Anda tidak dapat melintasi hierarki menggunakan sintaksis lainnya.

Men-debug dengan pernyataan print() JavaScript

Jika menggunakan kebijakan JavaScript untuk mengeksekusi kode JavaScript kustom, perhatikan bahwa Anda dapat menggunakan fungsi print() untuk menghasilkan informasi debug ke alat Debug. Fungsi ini tersedia langsung melalui model objek JavaScript. Contoh:

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

Untuk melihat output, pilih Output from all transaction di bagian bawah jendela Debug. Anda juga dapat menemukan output di properti Debug yang disebut stepExecution-stdout.

Membuat info JavaScript dengan httpClient

Gunakan httpClient untuk membuat beberapa permintaan HTTP paralel, asinkron ke URL apa pun dari dalam kode JavaScript kustom yang dieksekusi di alur proxy API. Objek httpClient diekspos oleh model objek JavaScript Apigee.

Tentang httpClient

Objek httpClient diekspos ke kode JavaScript kustom yang berjalan di Apigee melalui model objek JavaScript. Untuk melampirkan JavaScript kustom ke proxy API, Anda menggunakan kebijakan JavaScript. Saat kebijakan berjalan, kode JavaScript kustom akan dieksekusi.

Objek httpClient berguna untuk mengembangkan layanan atau mashup gabungan. Misalnya, Anda dapat menggabungkan beberapa panggilan backend ke dalam satu metode API.

Berikut ini pola penggunaan dasar. Buat instance objek Permintaan, tetapkan URL ke objek tersebut (misalnya, ke layanan backend yang ingin Anda panggil), dan panggil httpClient.send dengan objek permintaan tersebut.

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

Referensi httpClient

Klien HTTP mengekspos dua metode: get() dan send().

httpClient.get()

Metode praktis untuk permintaan GET HTTP sederhana, tanpa dukungan untuk header HTTP.

Penggunaan

var exchangeObj = httpClient.get(url);

Pengembalian

Metode ini akan menampilkan objek exchange. Objek ini tidak memiliki properti, dan mengekspos metode berikut:

  • isError(): (Boolean) Menampilkan true jika httpClient tidak dapat terhubung ke server. Kode status HTTP 4xx dan 5xx menghasilkan isError() false, karena koneksi selesai dan kode respons yang valid ditampilkan. Jika isError() menampilkan true, panggilan ke getResponse() akan menampilkan undefined JavaScript.
  • isSuccess(): (Boolean) Menampilkan true jika pengiriman selesai dan berhasil.
  • isComplete(): (Boolean) Menampilkan true jika permintaan selesai.
  • waitForComplete(): Menjeda thread hingga permintaan selesai (dengan keberhasilan atau error).
  • getResponse(): (objek) Menampilkan objek respons jika httpClient.send() selesai dan berhasil. Objek yang ditampilkan memiliki metode dan properti yang identik dengan objek context.proxyResponse. Lihat ringkasan objek konteks.
  • getError(): (string) Jika panggilan ke httpClient.send() menghasilkan error, pesan error akan ditampilkan sebagai string.

Contoh

Mengirim objek Request yang dikonfigurasi sepenuhnya yang berisi properti permintaan HTTP. Gunakan callback yang tidak memblokir untuk memproses respons.

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

Menggunakan kebijakan JavaScript

Gunakan kebijakan JavaScript untuk melampirkan kode JavaScript kustom ke alur proxy. Lihat kebijakan JavaScript.

Topik terkait