คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
หัวข้อนี้จะกล่าวถึงโมเดลออบเจ็กต์ JavaScript ของ Apigee Edge คุณควรทำความเข้าใจโมเดลนี้หากต้องการใช้นโยบาย JavaScript เพื่อเพิ่ม JavaScript ที่กำหนดเองลงในพร็อกซี API
เกี่ยวกับโมเดลออบเจ็กต์ JavaScript ของ Edge
โมเดลออบเจ็กต์ JavaScript ของ Apigee Edge จะกำหนดออบเจ็กต์ที่มีพร็อพเพอร์ตี้ที่เชื่อมโยงกัน ซึ่งพร้อมใช้งานกับโค้ด JavaScript ที่ดำเนินการภายในโฟลว์พร็อกซีของ Apigee Edge คุณใช้นโยบาย JavaScript เพื่อแนบโค้ดที่กำหนดเองนี้กับโฟลว์พร็อกซี API
ออบเจ็กต์ที่กำหนดโดยโมเดลนี้มีขอบเขตภายในโฟลว์พร็อกซี API ซึ่งหมายความว่า ออบเจ็กต์และพร็อพเพอร์ตี้บางรายการจะใช้ได้เฉพาะที่จุดที่เฉพาะเจาะจงในโฟลว์เท่านั้น เมื่อมีการเรียกใช้ JavaScript ระบบจะสร้างขอบเขตสำหรับการเรียกใช้ ในขอบเขตนั้น ระบบจะสร้างการอ้างอิงออบเจ็กต์ต่อไปนี้
- context: ออบเจ็กต์ที่ให้สิทธิ์เข้าถึงบริบทของข้อความ
- request: ตัวย่อที่อนุญาตให้เข้าถึงออบเจ็กต์คำขอ
- response: ตัวย่อที่อนุญาตให้เข้าถึงออบเจ็กต์คำขอ
- crypto: มีฟังก์ชันแฮชต่างๆ
- print: ฟังก์ชันที่ใช้แสดงเอาต์พุต
- พร็อพเพอร์ตี้: อนุญาตให้เข้าถึงพร็อพเพอร์ตี้การกำหนดค่าในนโยบายเพื่ออ่าน
ออบเจ็กต์บริบท
ออบเจ็กต์ context มีขอบเขตส่วนกลาง โดยพร้อมใช้งานทุกที่ภายในโฟลว์พร็อกซีของ API
โดยมีออบเจ็กต์ย่อย 4 รายการ ได้แก่ proxyRequest, proxyResponse,
targetRequest, targetResponse ออบเจ็กต์ย่อยเหล่านี้มีขอบเขตเป็น
คำขอและการตอบกลับโดยรอบ ไม่ว่าจะเป็นคำขอและการตอบกลับของพร็อกซี หรือคำขอและการตอบกลับของเป้าหมาย
เช่น หากนโยบาย JavaScript ทำงานในส่วนปลายทางพร็อกซีของโฟลว์
ออบเจ็กต์ context.proxyRequest และ context.proxyResponse จะอยู่ในขอบเขต หาก JavaScript ทำงานในโฟลว์เป้าหมาย ออบเจ็กต์ context.targetRequest และ context.targetResponse จะอยู่ในขอบเขต
ออบเจ็กต์ context ยังมีพร็อพเพอร์ตี้และเมธอด ซึ่งอธิบายไว้โดยละเอียด
ในหัวข้อนี้ ตัวอย่างเช่น โค้ด JavaScript ต่อไปนี้ใช้พร็อพเพอร์ตี้
context.flow และเรียกใช้เมธอด get/setVariable() ใน
context
if (context.flow=="PROXY_REQ_FLOW") { var username = context.getVariable("request.formparam.user"); context.setVariable("USER.name", username); }
วิธีการเหล่านี้จะโต้ตอบกับตัวแปรโฟลว์โดยตรง
ค่าพร็อพเพอร์ตี้ context.flow คือขอบเขตโฟลว์ปัจจุบัน ในพร็อกซี
โฟลว์คำขอ ระบบจะตั้งค่าเป็นค่าคงที่ PROXY_REQ_FLOW หากในโฟลว์การตอบกลับเป้าหมาย
มีการตั้งค่าเป็น TARGET_RESP_FLOW ค่าคงที่นี้มีประโยชน์สำหรับ
การเรียกใช้โค้ดที่เฉพาะเจาะจงขอบเขต Getter ช่วยให้คุณรับตัวแปรโฟลว์และ Setter ช่วยให้คุณตั้งค่าตัวแปรโฟลว์ได้
โดยทั่วไปแล้ว ตัวแปรเหล่านี้จะพร้อมใช้งานในโฟลว์พร็อกซีและนโยบายอื่นๆ สามารถใช้ตัวแปรเหล่านี้ได้
ดูรายละเอียดเพิ่มเติมและตัวอย่างได้ในข้อมูลอ้างอิงออบเจ็กต์บริบทด้านล่าง
ออบเจ็กต์ crypto
ออบเจ็กต์ crypto จะเพิ่มการรองรับการเข้ารหัสพื้นฐานที่มีประสิทธิภาพสูงลงในโมเดลออบเจ็กต์ JavaScript ดูรายละเอียดและตัวอย่างเพิ่มเติมได้ที่ข้อมูลอ้างอิงออบเจ็กต์ crypto ด้านล่าง
ออบเจ็กต์คำขอและการตอบกลับ
ออบเจ็กต์ request และ response เป็นการอ้างอิงรูปแบบย่อของคำขอและการตอบกลับโดยรอบ ไม่ว่าจะเป็นคำขอและการตอบกลับของพร็อกซี หรือคำขอและการตอบกลับของเป้าหมาย ออบเจ็กต์ที่ตัวแปรเหล่านี้อ้างอิงจะขึ้นอยู่กับบริบทที่นโยบาย JavaScript
ทํางาน หาก JavaScript ทำงานในโฟลว์ของพร็อกซีปลายทาง ตัวแปรคำขอและ
การตอบกลับจะอ้างอิงถึง context.proxyRequest และ
context.proxyResponse หาก JavaScript ทำงานในโฟลว์เป้าหมาย ตัวแปร
จะอ้างอิงถึง context.targetRequest และ context.targetResponse
ฟังก์ชัน print()
โมเดลออบเจ็กต์ JavaScript มีprint()ฟังก์ชันที่คุณใช้เพื่อแสดงผลข้อมูลการแก้ไขข้อบกพร่อง
ไปยังเครื่องมือ Edge Trace ได้ ดูแก้ไขข้อบกพร่องด้วยคำสั่ง JavaScript print()
ออบเจ็กต์พร็อพเพอร์ตี้
เมื่อใช้องค์ประกอบ properties
ตัวอย่างเช่น หากการกำหนดค่า JavaScript มี
<Javascript name='JS-1' > <Properties> <Property name="number">8675309</Property> <Property name="firstname">Jenny</Property> </Properties> <ResourceURL>jsc://my-code.js</ResourceURL> </Javascript>
จากนั้นคุณจะทำสิ่งต่อไปนี้ได้ใน my-code.js
print(properties.firstname); // prints Jenny print(properties.number); // 8675309
ในทางปฏิบัติ การกำหนดค่าช่วยให้โค้ดทำงานแตกต่างกันได้ เมื่อเรียกใช้ในสภาพแวดล้อมต่างๆ ในช่วงเวลาต่างๆ หรือด้วยเหตุผลใดก็ตาม
ตัวอย่างเช่น ข้อมูลต่อไปนี้จะระบุ "ชื่อตัวแปร" และรูปแบบของ เอาต์พุตที่ 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>
emit-results.js โค้ดจะทำสิ่งต่อไปนี้ได้
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)); }
การอ้างอิงออบเจ็กต์คริปโต
ออบเจ็กต์ crypto ช่วยให้คุณเรียกใช้ฟังก์ชันการแฮชแบบเข้ารหัสพื้นฐานใน JavaScript ได้
ออบเจ็กต์ crypto มีขอบเขตทั่วโลก โดยจะพร้อมใช้งานทุกที่ภายในโฟลว์พร็อกซี API Crypto ช่วยให้คุณทำงานกับออบเจ็กต์แฮชต่อไปนี้ได้
- SHA-1
- SHA256
- SHA512
- MD5
การทำงานกับออบเจ็กต์ SHA-1
คุณสามารถสร้าง อัปเดต และแปลงออบเจ็กต์ SHA-1 เป็นค่าเลขฐานสิบหกและ Base64 ได้
สร้างออบเจ็กต์ SHA-1 ใหม่
var _sha1 = crypto.getSHA1();
อัปเดตออบเจ็กต์ SHA-1
ไวยากรณ์
_sha1.update(value);
พารามิเตอร์
- value - (สตริง) ค่าสตริงใดก็ได้
ตัวอย่าง
อัปเดตออบเจ็กต์ SHA-1
_sha1.update("salt_value"); _sha1.update("some text");
แสดงผลออบเจ็กต์ SHA-1 เป็นสตริงเลขฐานสิบหก
var _hashed_token = _sha1.digest();
แสดงผลออบเจ็กต์ SHA-1 เป็นสตริง base64
var _hashed_token = _sha1.digest64();
การทำงานกับออบเจ็กต์ SHA-256
คุณสามารถสร้าง อัปเดต และแปลงออบเจ็กต์ SHA-256 เป็นค่าเลขฐานสิบหกและ base64 ได้
สร้างออบเจ็กต์ SHA-256 ใหม่
var _sha256 = crypto.getSHA256();
อัปเดตออบเจ็กต์ SHA-256
ไวยากรณ์
_sha256.update(value);
พารามิเตอร์
- value - (สตริง) ค่าสตริงใดก็ได้
ตัวอย่าง
อัปเดตออบเจ็กต์ SHA-256
_sha256.update("salt_value"); _sha256.update("some text");
แสดงผลออบเจ็กต์ SHA-256 เป็นสตริงเลขฐานสิบหก
var _hashed_token = _sha256.digest();
แสดงออบเจ็กต์ SHA-256 เป็นสตริง base64
var _hashed_token = _sha256.digest64();
การทำงานกับออบเจ็กต์ SHA-512
คุณสามารถสร้าง อัปเดต และแปลงออบเจ็กต์ SHA-512 เป็นค่าฐาน 64 และค่าเลขฐานสิบหกได้
สร้างออบเจ็กต์ SHA-512 ใหม่
var _sha512 = crypto.getSHA512();
อัปเดตออบเจ็กต์ SHA-512
ไวยากรณ์
_sha512.update(value);
พารามิเตอร์
- value - (สตริง) ค่าสตริงใดก็ได้
ตัวอย่าง
อัปเดตออบเจ็กต์ SHA-512
_sha512.update("salt_value"); _sha512.update("some text");
แสดงผลออบเจ็กต์ SHA-512 เป็นสตริงฐานสิบหก
var _hashed_token = _sha512.digest();
แสดงผลออบเจ็กต์ SHA-512 เป็นสตริง Base64
var _hashed_token = _sha512.digest64();
การทำงานกับออบเจ็กต์ MD5
คุณสามารถสร้าง อัปเดต และแปลงออบเจ็กต์ MD5 เป็นค่าฐาน 16 และ Base64 ได้
สร้างออบเจ็กต์ MD5 ใหม่
var _md5 = crypto.getMD5();
อัปเดตออบเจ็กต์ MD5
ไวยากรณ์
_md5.update(value);
พารามิเตอร์
- value - (สตริง) ค่าสตริงใดก็ได้
ตัวอย่าง
อัปเดตออบเจ็กต์ MD5
_md5.update("salt_value"); _md5.update("some text");
แสดงผลออบเจ็กต์ MD5 เป็นสตริงเลขฐานสิบหก
var _hashed_token = _md5.digest();
ส่งคืนออบเจ็กต์ MD5 เป็นสตริง Base64
var _hashed_token = _md5.digest64();
การรองรับวันที่/เวลาของคริปโต
ออบเจ็กต์คริปโตรองรับรูปแบบการจัดรูปแบบวันที่/เวลา
crypto.dateFormat()
แสดงผลวันที่ในรูปแบบสตริง
ไวยากรณ์
crypto.dateFormat(format, [timezone], [time])
พารามิเตอร์
- format - (สตริง) การใช้งานพื้นฐานสำหรับพารามิเตอร์นี้ คือ java.text.SimpleDateFormat เช่น "yyyy-MM-DD HH:mm:ss.SSS"
- timezone - (สตริง ไม่บังคับ) การใช้งานพื้นฐานสำหรับพารามิเตอร์นี้คือ java.util.TimeZone พารามิเตอร์นี้เหมือนกับค่าเริ่มต้น: UTC
- time - (ตัวเลข ไม่บังคับ) ค่าการประทับเวลา Unix ที่จะจัดรูปแบบ ค่าเริ่มต้น: เวลาปัจจุบัน
ตัวอย่าง
รับเวลาปัจจุบันในหน่วยมิลลิวินาที
var _now = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS');
ดูเวลาปัจจุบันสำหรับเขตเวลาแปซิฟิก
var _pst = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST');
รับค่าของอีก 10 วินาทีข้างหน้า
var _timeNow = Number(context.getVariable('system.timestamp')); var ten_seconds = crypto.dateFormat('yyyy-MM-DD HH:mm:ss.SSS','PST', _timeNow + 10 * 1000);
ตัวอย่างเพิ่มเติม ดูเอกสารประกอบของ 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");
ใช้ getHash() เพื่อรับ ออบเจ็กต์แฮชที่รองรับ
ตัวอย่าง
var _hash1 = crypto.getHash('MD5'); var _hash2 = crypto.getHash('SHA-1'); var _hash3 = crypto.getHash('SHA-256'); var _hash4 = crypto.getHash('SHA-512');
ตัวอย่างที่มีคริปโต
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'; }
ออบเจ็กต์บริบท การอ้างอิง
ระบบจะสร้างออบเจ็กต์ context สำหรับธุรกรรมคำขอ/คำตอบแต่ละรายการที่พร็อกซี API ดำเนินการ ออบเจ็กต์ context แสดงเมธอดในการรับ ตั้งค่า และนำตัวแปรที่เกี่ยวข้องกับธุรกรรมแต่ละรายการออก
ตัวแปรจะกำหนดพร็อพเพอร์ตี้ที่เฉพาะเจาะจงธุรกรรม เวลาของวัน ภาษาของ
ไคลเอ็นต์ที่ส่งคำขอ User-Agent ของไคลเอ็นต์ที่ส่งคำขอ และ URL ของบริการเป้าหมายเป็น
ตัวอย่างของตัวแปรที่มีอยู่ใน context ดังนั้น
context จึงมีประโยชน์ในการสร้างตรรกะที่อิงตามพร็อพเพอร์ตี้เหล่านี้เพื่อดำเนินการ
ลักษณะการทำงานที่กำหนดเอง
ดูข้อมูลอ้างอิงตัวแปรโฟลว์และ นโยบาย Extract Variables
บริบท สรุปออบเจ็กต์
ตารางนี้อธิบายโดยย่อเกี่ยวกับออบเจ็กต์บริบทและออบเจ็กต์ย่อย รวมถึงแสดงรายการพร็อพเพอร์ตี้ ที่เชื่อมโยงกับแต่ละออบเจ็กต์
| ชื่อ | คำอธิบาย | พร็อพเพอร์ตี้ |
|---|---|---|
context |
Wrapper สำหรับบริบทของไปป์ไลน์การประมวลผลข้อความและโฟลว์คำขอและการตอบกลับ ที่ดำเนินการโดย ProxyEndpoint และ TargetEndpoint | โฟลว์ เซสชัน |
context.proxyRequest |
ออบเจ็กต์ที่แสดงข้อความคำขอขาเข้าไปยัง ProxyEndpoint (จาก แอปที่ขอไปยังพร็อกซี API) | ส่วนหัว พารามิเตอร์การค้นหา เมธอด เนื้อหา URL |
context.targetRequest |
ออบเจ็กต์ที่แสดงข้อความคำขอขาออกจาก TargetEndpoint (จาก พร็อกซี API ไปยังบริการแบ็กเอนด์) | ส่วนหัว พารามิเตอร์การค้นหา เมธอด เนื้อหา URL |
context.targetResponse |
ออบเจ็กต์ที่แสดงข้อความตอบกลับเป้าหมายขาเข้า (จากบริการแบ็กเอนด์ ไปยังพร็อกซี API) | ส่วนหัว เนื้อหา สถานะ |
context.proxyResponse |
ออบเจ็กต์ที่แสดงข้อความตอบกลับพร็อกซีขาออก (จากพร็อกซี API ไปยัง แอปที่ขอ) | ส่วนหัว เนื้อหา สถานะ |
context.flow |
ชื่อของโฟลว์ปัจจุบัน | ดู context.flow ด้านล่าง |
context.session |
แผนที่ของคู่ชื่อ/ค่าที่คุณใช้เพื่อส่งออบเจ็กต์ระหว่าง 2 ขั้นตอนที่แตกต่างกัน
ซึ่งดำเนินการในบริบทเดียวกัน ตัวอย่างเช่น context.session['key'] = 123 |
ดูข้อมูลเพิ่มเติมเกี่ยวกับเวลาที่ควรและไม่ควรใช้ออบเจ็กต์นี้ได้ที่ การสนทนาในชุมชน Apigee นี้ |
context object methods
context.getVariable()
ดึงค่าของตัวแปรที่กำหนดไว้ล่วงหน้าหรือตัวแปรที่กำหนดเอง
ไวยากรณ์
context.getVariable("variable-name");
ตัวอย่าง
วิธีดูมูลค่าสำหรับปีปัจจุบัน
var year = context.getVariable('system.time.year');
context.setVariable()
ตั้งค่าสําหรับตัวแปรที่กําหนดเองหรือตัวแปรที่กําหนดไว้ล่วงหน้าที่เขียนได้
ไวยากรณ์
context.setVariable("variable-name", value);
ตัวอย่าง
สถานการณ์ทั่วไปในการตั้งค่าตัวแปรคือเมื่อพร็อกซี API ต้องเขียน URL เป้าหมายแบบไดนามิก JavaScript ต่อไปนี้จะรับค่าของตัวแปรที่ชื่อ USER.name
ผนวกค่าดังกล่าวเป็นพารามิเตอร์การค้นหาไปยัง URL
http://mocktarget.apigee.net?user= จากนั้นตั้งค่า target.url ที่กำหนดไว้ล่วงหน้า
เป็นค่าดังกล่าว
context.setVariable("target.url", "http://mocktarget.apigee.net/user?user="+context.getVariable("USER.name"));
context.removeVariable()
นำตัวแปรออกจากบริบท
ไวยากรณ์
context.removeVariable('variable-name');
พร็อพเพอร์ตี้ของออบเจ็กต์บริบท
พร็อพเพอร์ตี้ flow เป็นสตริงที่ระบุโฟลว์พร็อกซี API ปัจจุบัน พร็อพเพอร์ตี้นี้ใช้เพื่อระบุโฟลว์ที่แนบ JavaScript ค่าที่รองรับมีดังนี้
PROXY_REQ_FLOWPROXY_RESP_FLOWTARGET_REQ_FLOWTARGET_RESP_FLOW
ชื่อโฟลว์แต่ละชื่อครอบคลุม PreFlow, PostFlow และโฟลว์แบบมีเงื่อนไขที่กำหนดไว้ใน ProxyEndpoints หรือ TargetEndpoints
พร็อพเพอร์ตี้นี้เป็นพร็อพเพอร์ตี้ที่ไม่บังคับและมีประโยชน์เมื่อมีการเรียกใช้ JavaScript ทั่วไปในโฟลว์มากกว่า 1 รายการ แต่ลักษณะการทำงานอาจแตกต่างกันไปตามโฟลว์ที่เรียกใช้ ใช้พร็อพเพอร์ตี้ Flow สำหรับโมดูล JavaScript ที่ตั้งใจจะนำไปใช้ซ้ำในพร็อกซี API หลายรายการ ซึ่งต้องมีโค้ด เพื่อตรวจสอบ Flow ปัจจุบันก่อนที่จะเรียกใช้ตรรกะ
ตัวอย่าง
ตั้งค่าส่วนหัว HTTP เฉพาะในโฟลว์ targetRequest
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
ตั้งค่าเนื้อหาในโฟลว์ proxyResponse เท่านั้น
if (context.flow=="PROXY_RESP_FLOW") { context.proxyResponse.content='bar'; }
แผนที่ของคู่ชื่อ/ค่าที่ใช้ส่งออบเจ็กต์ระหว่างนโยบาย 2 รายการที่ดำเนินการ ภายในบริบทข้อความเดียวกัน
ตัวอย่าง
ตั้งค่าในเซสชัน
context.session['key'] = 123;
รับค่าจากเซสชัน
var value = context.session['key']; // 123
ออบเจ็กต์บริบทย่อย
ดังที่แสดงด้านล่างนี้ Flow ของพร็อกซี API ที่สมบูรณ์ประกอบด้วย 4 เฟสที่แตกต่างกัน โดยแต่ละเฟสจะมี ออบเจ็กต์ข้อความที่เชื่อมโยงซึ่งเป็นออบเจ็กต์ย่อยของออบเจ็กต์บริบท
context.proxyRequest: ข้อความคำขอขาเข้าที่ได้รับจากไคลเอ็นต์ที่ขอcontext.targetRequest: ข้อความคำขอขาออกที่ส่งไปยังบริการแบ็กเอนด์context.proxyResponse: ข้อความตอบกลับขาออกที่ส่งกลับไปยัง ไคลเอ็นต์ที่ขอcontext.targetResponse: ข้อความคำขอขาเข้าที่ได้รับจากบริการแบ็กเอนด์

ส่วนต่อไปนี้จะอธิบายเมธอดและพร็อพเพอร์ตี้ของออบเจ็กต์เหล่านี้
context.*Request child objects
สําหรับธุรกรรม HTTP แต่ละรายการที่ดําเนินการในพร็อกซี API ระบบจะสร้างออบเจ็กต์ข้อความคําขอ 2 รายการ ได้แก่ ออบเจ็กต์ขาเข้า (คําขอจากไคลเอ็นต์) และออบเจ็กต์ขาออก (คําขอที่สร้างโดย พร็อกซี API และส่งไปยังเป้าหมายแบ็กเอนด์)
ออบเจ็กต์ context มีออบเจ็กต์ย่อยที่แสดงข้อความคำขอต่อไปนี้
context.proxyRequest และ context.targetRequest ออบเจ็กต์เหล่านี้ช่วยให้คุณ
เข้าถึงพร็อพเพอร์ตี้ภายในโฟลว์คำขอที่อยู่ในขอบเขตเมื่อโค้ด JavaScript
ทํางาน
หมายเหตุ: คุณยังใช้ออบเจ็กต์รูปแบบย่อ request เพื่อเข้าถึงพร็อพเพอร์ตี้เหล่านี้ในโฟลว์คำขอได้ด้วย
ออบเจ็กต์ request จะอ้างอิงถึง context.proxyRequest หรือ context.targetRequest ขึ้นอยู่กับตำแหน่งที่โค้ด JavaScript ทำงานในโฟลว์
context.*Request child object properties
| ชื่อพร็อพเพอร์ตี้ | คำอธิบาย |
|---|---|
url |
พร็อพเพอร์ตี้ URL ที่สมบูรณ์ของคำขอประกอบด้วยพร็อพเพอร์ตี้ต่อไปนี้
เมื่อรับ
|
|
ตัวอย่าง context.targetRequest.url = 'http://www.example.com/path?q1=1' context.targetRequest.protocol ='https'; |
|
headers |
ส่วนหัวคำขอ HTTP เป็นการแมปของ |
|
ตัวอย่าง สำหรับคำขอ HTTP นี้ POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z context.proxyRequest.headers['Content-Type']; context.proxyRequest.headers['Authorization']; จะแสดงค่าต่อไปนี้ application/json Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z |
|
queryParams |
พารามิเตอร์การค้นหาของข้อความคำขอเป็นการแมปของ |
|
ตัวอย่าง "?city=PaloAlto&city=NewYork"สามารถเข้าถึงได้ดังนี้ 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 ( |
|
ตัวอย่าง สำหรับคำขอนี้ POST /v1/blogs HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z JavaScript ต่อไปนี้ context.proxyRequest.method; จะแสดงค่าต่อไปนี้ POST |
|
body |
เนื้อหาข้อความ (เพย์โหลด) ของคำขอ HTTP เนื้อหาของคำขอมีสมาชิกดังต่อไปนี้
|
|
ตัวอย่าง สำหรับเนื้อหา XML <customer number='1'> <name>Fred<name/> <customer/> วิธีเข้าถึงองค์ประกอบของออบเจ็กต์ XML มีดังนี้ var name = context.targetRequest.body.asXML.name; หากต้องการเข้าถึงแอตทริบิวต์ XML ให้ใช้สัญกรณ์ var number = context.targetRequest.body.asXML.@number; สำหรับเนื้อหาคำขอ JSON ให้ทำดังนี้ { "a": 1 , "b" : "2" } var a = context.proxyRequest.body.asJSON.a; // == 1 var b = context.proxyRequest.body.asJSON.b; // == 2 วิธีอ่านพารามิเตอร์ของแบบฟอร์ม "vehicle=Car&vehicle=Truck"v0 = context.proxyRequest.body.asForm['vehicle'][0]; v1 = context.proxyRequest.body.asForm['vehicle'][1]; |
context.*ออบเจ็กต์ย่อยของคำตอบ
สําหรับธุรกรรม HTTP แต่ละรายการที่ดําเนินการในพร็อกซี API ระบบจะสร้างออบเจ็กต์ข้อความตอบกลับ 2 รายการ ได้แก่ รายการขาเข้า (การตอบกลับจากบริการแบ็กเอนด์) และรายการขาออก (การตอบกลับที่ส่งกลับไปยังไคลเอ็นต์)
ออบเจ็กต์บริบทมีออบเจ็กต์ย่อยที่แสดงข้อความตอบกลับต่อไปนี้
context.proxyResponse และ context.targetResponse ออบเจ็กต์เหล่านี้ช่วยให้คุณ
เข้าถึงพร็อพเพอร์ตี้ภายในโฟลว์การตอบกลับที่อยู่ในขอบเขตเมื่อโค้ด JavaScript
ทํางาน
หมายเหตุ: คุณยังใช้ออบเจ็กต์รูปแบบย่อ response เพื่อเข้าถึง
พร็อพเพอร์ตี้เหล่านี้จากโฟลว์การตอบกลับได้ด้วย ออบเจ็กต์ response จะอ้างอิงถึง context.proxyResponse หรือ context.targetResponse ขึ้นอยู่กับตำแหน่งที่โค้ด JavaScript ทำงานในโฟลว์
context.*Response object properties
| ชื่อพร็อพเพอร์ตี้ | คำอธิบาย |
|---|---|
headers |
ส่วนหัว HTTP ของข้อความตอบกลับเป็นการแมปของ |
|
ตัวอย่าง var cookie = context.targetResponse.headers['Set-Cookie']; |
|
status |
รหัสสถานะที่มีข้อความสถานะเป็นพร็อพเพอร์ตี้ ทั้งรหัสสถานะและข้อความสถานะ พร้อมใช้งานเป็นพร็อพเพอร์ตี้ |
|
ตัวอย่าง var status = context.targetResponse.status.code; // 200 var msg = context.targetResponse.status.message; // "OK" |
|
content |
เนื้อหา HTTP (เนื้อหาเพย์โหลด) ของข้อความตอบกลับ เนื้อหาการตอบกลับมีสมาชิกต่อไปนี้ context.targetResponse.content.asXML; context.targetResponse.content.asJSON; |
การใช้รูปแบบ .asXML
คุณสามารถใช้สัญกรณ์ .asXML เพื่อดูเอกสาร XML ได้อย่างสะดวก
ส่วนนี้จะอธิบายวิธีใช้สัญกรณ์นี้ และความแตกต่างจาก request.content และ context.proxyRequest.content
เช่น
request.content.asXML
หรือ
context.proxyRequest.content.asXML
ทั้งรูปแบบ *.content และ *.content.asXML สามารถใช้ในบริบทของสตริง
และ JavaScript จะบังคับให้รูปแบบดังกล่าวกลายเป็นสตริง ในกรณีแรก
(*.content) สตริงจะมีทั้งการประกาศและความคิดเห็น XML ทั้งหมด ในกรณีหลัง (*.content.asXML) ระบบจะล้างค่าสตริงของผลลัพธ์จากการประกาศและความคิดเห็น
ตัวอย่าง
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>
นอกจากนี้ คุณยังใช้รูปแบบ .asXML เพื่อไปยังลำดับชั้น XML ได้โดย
ระบุชื่อขององค์ประกอบและแอตทริบิวต์ คุณจะข้ามลำดับชั้นโดยใช้ไวยากรณ์อื่นไม่ได้
แก้ไขข้อบกพร่องด้วย JavaScript คำสั่ง print()
หากใช้นโยบาย JavaScript เพื่อเรียกใช้โค้ด JavaScript ที่กำหนดเอง โปรดทราบว่าคุณสามารถใช้ฟังก์ชัน print() เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องในเครื่องมือติดตาม ฟังก์ชันนี้พร้อมใช้งานโดยตรง ผ่านโมเดลออบเจ็กต์ JavaScript เช่น
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")); }
หากต้องการดูเอาต์พุต ให้เลือกเอาต์พุตจากธุรกรรมทั้งหมดที่ด้านล่างของ
หน้าต่างการติดตาม นอกจากนี้ คุณยังดูเอาต์พุตได้ในพร็อพเพอร์ตี้การติดตามที่ชื่อ stepExecution-stdout
การสร้างข้อความแจ้ง JavaScript ด้วย httpClient
ใช้ httpClient เพื่อส่งคำขอ HTTP แบบไม่พร้อมกันหลายรายการแบบขนานไปยัง URL ใดก็ได้
จากภายในโค้ด JavaScript ที่กำหนดเองซึ่งดำเนินการในโฟลว์พร็อกซี API
httpClient ออบเจ็กต์จะแสดงโดยโมเดลออบเจ็กต์ JavaScript ของ Apigee Edge
เกี่ยวกับ httpClient
ออบเจ็กต์ httpClient จะแสดงต่อโค้ด JavaScript ที่กำหนดเองซึ่งทำงานใน Apigee Edge
ผ่านโมเดลออบเจ็กต์ JavaScript หากต้องการแนบ JavaScript ที่กำหนดเองกับพร็อกซี API คุณต้องใช้นโยบาย JavaScript เมื่อนโยบายทํางาน โค้ด JavaScript ที่กําหนดเองจะทํางาน
ออบเจ็กต์ httpClient มีประโยชน์สำหรับการพัฒนาบริการแบบคอมโพสิตหรือ
แมชอัป เช่น คุณสามารถรวมการเรียกแบ็กเอนด์หลายรายการไว้ในเมธอด API เดียวได้
โดยทั่วไปแล้วออบเจ็กต์นี้จะใช้เป็นทางเลือกแทนนโยบาย ServiceCallout
รูปแบบการใช้งานพื้นฐานมีดังนี้ สร้างออบเจ็กต์ Request กำหนด URL ให้กับออบเจ็กต์ (เช่น URL ของ
บริการแบ็กเอนด์ที่คุณต้องการเรียกใช้) แล้วเรียกใช้ httpClient.send ด้วยออบเจ็กต์คำขอนั้น
var myRequest = new Request(); myRequest.url = "http://www.example.com"; var exchangeObj = httpClient.send(myRequest);
การอ้างอิง httpClient
ไคลเอ็นต์ HTTP แสดงเมธอด 2 รายการ ได้แก่ get() และ send()
httpClient.get()
เมธอดที่สะดวกสำหรับคำขอ HTTP GET อย่างง่าย โดยไม่รองรับส่วนหัวของ HTTP
การใช้งาน
var exchangeObj = httpClient.get(url);
การคืนสินค้า
เมธอดจะแสดงผลออบเจ็กต์ exchange ออบเจ็กต์นี้ไม่มีพร็อพเพอร์ตี้ และแสดงเมธอดต่อไปนี้
isError(): (บูลีน) แสดงผลtrueหาก httpClient เชื่อมต่อกับเซิร์ฟเวอร์ไม่ได้ รหัสสถานะ HTTP4xxและ5xxส่งผลให้เกิดisError()falseเนื่องจากระบบเชื่อมต่อเสร็จสมบูรณ์และแสดงรหัสการตอบกลับที่ถูกต้อง หากisError()แสดงผลtrueการเรียกใช้getResponse()จะแสดงผล JavaScriptundefinedisSuccess(): (บูลีน) แสดงผลtrueหากการส่งเสร็จสมบูรณ์และ สำเร็จisComplete(): (บูลีน) แสดงผลtrueหากคำขอเสร็จสมบูรณ์ แล้วwaitForComplete(): หยุดการทำงานของเธรดชั่วคราวจนกว่าคำขอจะเสร็จสมบูรณ์ (สำเร็จ หรือเกิดข้อผิดพลาด)getResponse(): (ออบเจ็กต์) แสดงผลออบเจ็กต์การตอบกลับหากhttpClient.send()เสร็จสมบูรณ์และสำเร็จ ออบเจ็กต์ที่แสดงมีเมธอดและพร็อพเพอร์ตี้เหมือนกับออบเจ็กต์ context.proxyResponse ดูสรุปออบเจ็กต์บริบทgetError(): (สตริง) หากการเรียกhttpClient.send()ทำให้เกิดข้อผิดพลาด ระบบจะแสดงข้อความแสดงข้อผิดพลาดเป็นสตริง
ตัวอย่าง
ส่งออบเจ็กต์คำขอที่กำหนดค่าอย่างสมบูรณ์ซึ่งมีพร็อพเพอร์ตี้ของคำขอ HTTP ใช้การเรียกกลับแบบไม่บล็อกเพื่อประมวลผลการตอบกลับ
// 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
ใช้นโยบาย JavaScript เพื่อแนบโค้ด JavaScript ที่กำหนดเองกับโฟลว์พร็อกซี ดูนโยบาย JavaScript
หัวข้อที่เกี่ยวข้อง
- นโยบาย JavaScript
- โมเดล ออบเจ็กต์ JavaScript
- ดูตัวอย่างและวิธีการพื้นฐานได้ที่การเขียนโปรแกรมพร็อกซี API ด้วย JavaScript
- ดูตัวอย่างโค้ด JavaScript ที่ใช้งานได้ที่ตัวอย่าง Apigee Edge ใน GitHub
บทความในชุมชน Apigee
คุณดูบทความที่เกี่ยวข้องเหล่านี้ได้ในชุมชน Apigee