คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
หัวข้อนี้จะกล่าวถึงโมเดลออบเจ็กต์ Apigee Edge JavaScript โปรดทำความเข้าใจ โมเดลนี้หากคุณต้องการใช้นโยบาย JavaScript เพื่อเพิ่ม JavaScript ที่กำหนดเองลงใน API พร็อกซี
เกี่ยวกับโมเดลออบเจ็กต์ Edge JavaScript
โมเดลออบเจ็กต์ Apigee Edge JavaScript จะกำหนดออบเจ็กต์ที่มีพร็อพเพอร์ตี้ที่เชื่อมโยงกัน พร้อมใช้งานสำหรับการเรียกใช้โค้ด 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 ช่วยให้คุณรับตัวแปรโฟลว์ได้ ขณะที่ตัวตั้งค่าให้คุณตั้งค่า
ของตัวแปรโฟลว์ โดยทั่วไปแล้ว ตัวแปรเหล่านี้จะพร้อมใช้งานในขั้นตอนพร็อกซีและใช้งานได้โดย
นโยบายอื่นๆ
ดูรายละเอียดเพิ่มเติมได้จากการอ้างอิงออบเจ็กต์บริบทด้านล่าง และ ตัวอย่าง
ออบเจ็กต์คริปโต
ออบเจ็กต์ Crypto เพิ่มการรองรับการเข้ารหัสพื้นฐานที่มีประสิทธิภาพสูงให้กับออบเจ็กต์ JavaScript โมเดล ดูรายละเอียดเพิ่มเติมและตัวอย่างได้ที่ crypto Object reference ด้านล่าง
คำขอและการตอบกลับ วัตถุ
ออบเจ็กต์ 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)); }
การอ้างอิงออบเจ็กต์คริปโต
ออบเจ็กต์การเข้ารหัสช่วยให้คุณใช้ฟังก์ชันการแฮชแบบเข้ารหัสพื้นฐานใน JavaScript ได้
ออบเจ็กต์ Crypto มีขอบเขตรวมทั้งหมด ซึ่งจะพร้อมใช้งานได้ทุกที่ภายในขั้นตอนของพร็อกซี API Crypto ให้คุณทำงานกับออบเจ็กต์แฮชต่อไปนี้
- SHA-1
- SHA256
- SHA512
- MD5
การทำงานกับออบเจ็กต์ SHA-1
คุณสร้างออบเจ็กต์ SHA-1, อัปเดต และแปลงเป็นค่าเลขฐาน 16 และ 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 เป็นสตริงฐาน 16
var _hashed_token = _sha1.digest();
แสดงผลออบเจ็กต์ SHA-1 เป็นสตริง base64
var _hashed_token = _sha1.digest64();
การทำงานกับออบเจ็กต์ SHA-256
คุณสร้างออบเจ็กต์ SHA-256, อัปเดต และแปลงเป็นค่าเลขฐาน 16 และ 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 เป็นสตริงเลขฐาน 16
var _hashed_token = _sha256.digest();
แสดงผลออบเจ็กต์ SHA-256 เป็นสตริง base64
var _hashed_token = _sha256.digest64();
การทำงานกับออบเจ็กต์ SHA-512
คุณสร้างออบเจ็กต์ SHA-512, อัปเดต และแปลงเป็นค่าเลขฐาน 16 และ Base64 ได้
สร้างออบเจ็กต์ SHA-512 ใหม่
var _sha512 = crypto.getSHA512();
อัปเดตออบเจ็กต์ SHA-512
ไวยากรณ์
_sha512.update(value);
พารามิเตอร์
- value - (สตริง) ค่าสตริงใดก็ได้
ตัวอย่าง
อัปเดตออบเจ็กต์ SHA-512 ดังนี้
_sha512.update("salt_value"); _sha512.update("some text");
แสดงผลออบเจ็กต์ SHA-512 เป็นสตริงเลขฐาน 16
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 เป็นสตริงเลขฐาน 16
var _hashed_token = _md5.digest();
แสดงผลออบเจ็กต์ MD5 เป็นสตริง base64
var _hashed_token = _md5.digest64();
การสนับสนุนวันที่/เวลาของคริปโต
ออบเจ็กต์ Crypto รองรับรูปแบบการจัดรูปแบบวันที่/เวลา
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
มีประโยชน์สำหรับการสร้างตรรกะที่อาศัยพร็อพเพอร์ตี้เหล่านี้ในการดำเนินการ
พฤติกรรมที่กำหนดเอง
ดูข้อมูลอ้างอิงตัวแปรโฟลว์ และ ตัวแปรการดึงข้อมูล นโยบาย
บริบท สรุปออบเจ็กต์
ตารางนี้จะอธิบายถึงออบเจ็กต์บริบทและออบเจ็กต์ย่อย พร้อมแสดงรายการพร็อพเพอร์ตี้ ที่เชื่อมโยงกับแต่ละองค์ประกอบ
ชื่อ | คำอธิบาย | พร็อพเพอร์ตี้ |
---|---|---|
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.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_FLOW
PROXY_RESP_FLOW
TARGET_REQ_FLOW
TARGET_RESP_FLOW
ชื่อ Flow แต่ละชื่อจะรวมถึง PreFlow, PostFlow, และ Flow แบบมีเงื่อนไขใดๆ ที่กำหนดไว้ในแท็ก ProxyEndpoints หรือ TargetEndpoints
พร็อพเพอร์ตี้ที่ไม่บังคับนี้จะเป็นประโยชน์เมื่อมีการเรียกใช้ JavaScript ทั่วไปในมากกว่า 1 ขั้นตอน แต่อาจมีลักษณะการทำงานที่แตกต่างกันโดยขึ้นอยู่กับโฟลว์ที่ดำเนินการ ใช้พร็อพเพอร์ตี้โฟลว์ สำหรับโมดูล JavaScript ที่จะนำไปใช้ซ้ำในพร็อกซี API หลายรายการ ซึ่งมีโค้ดที่ ที่จำเป็นต่อการตรวจสอบโฟลว์ปัจจุบันก่อนเรียกใช้ตรรกะ
ตัวอย่าง
ตั้งค่าส่วนหัว HTTP เฉพาะในโฟลว์ targetRequest เท่านั้น โดยทำดังนี้
if (context.flow=="TARGET_REQ_FLOW") { context.targetRequest.headers['TARGET-HEADER-X']='foo'; }
ตั้งค่าเนื้อหาเท่านั้นในโฟลว์พร็อกซีตอบกลับ:
if (context.flow=="PROXY_RESP_FLOW") { context.proxyResponse.content='bar'; }
แมปของคู่ชื่อ/ค่าที่สามารถใช้เพื่อส่งต่อออบเจ็กต์ระหว่างการดำเนินการของนโยบาย 2 รายการ ในบริบทของข้อความเดียวกัน
ตัวอย่าง
ตั้งค่าในเซสชันดังนี้
context.session['key'] = 123;
รับค่าจากเซสชัน:
var value = context.session['key']; // 123
ออบเจ็กต์บริบทย่อย
ดังที่แสดงด้านล่าง โฟลว์พร็อกซี API ที่สมบูรณ์นั้นประกอบด้วย 4 ระยะ ซึ่งแต่ละระยะ ออบเจ็กต์ข้อความที่เชื่อมโยงซึ่งเป็นรายการย่อยของออบเจ็กต์บริบท
context.proxyRequest
: ข้อความคำขอขาเข้าที่ได้รับจากคำขอ ของคุณcontext.targetRequest
: ข้อความคำขอขาออกที่ส่งไปยังแบ็กเอนด์ service.context.proxyResponse
: ข้อความตอบกลับขาออกแสดงผลไปยัง ที่ส่งคำขอไปยังไคลเอ็นต์context.targetResponse
: ข้อความคำขอขาเข้าที่ได้รับจากแบ็กเอนด์ service.
ส่วนต่อไปนี้จะอธิบายถึงวิธีการและคุณสมบัติของออบเจ็กต์เหล่านี้
Context.*ขอออบเจ็กต์ย่อย
สำหรับธุรกรรม HTTP แต่ละรายการที่ดำเนินการในพร็อกซี API ออบเจ็กต์ข้อความคำขอ 2 รายการคือ สร้างแล้ว: 1 รายการขาเข้า (คำขอจากไคลเอ็นต์) และขาออก 1 รายการ (คำขอที่สร้างขึ้นโดย พร็อกซี API และส่งไปยังเป้าหมายแบ็กเอนด์)
ออบเจ็กต์ context
มีออบเจ็กต์ย่อยที่แสดงถึงข้อความคำขอต่อไปนี้
context.proxyRequest
และ context.targetRequest
ออบเจ็กต์เหล่านี้ช่วยให้คุณ
เข้าถึงพร็อพเพอร์ตี้ภายในขั้นตอนคําขอที่อยู่ในขอบเขตเมื่อโค้ด JavaScript ของคุณ
ในการดำเนินการ
หมายเหตุ: คุณยังใช้ออบเจ็กต์ย่อ request
เพื่อเข้าถึงได้ด้วย
พร็อพเพอร์ตี้เหล่านี้ในขั้นตอนคำขอ ออบเจ็กต์ request
อ้างอิงถึง
context.proxyRequest
หรือ context.targetRequest
ขึ้นอยู่กับตำแหน่งใน
ดำเนินการตามขั้นตอนที่โค้ด JavaScript ของคุณเรียกใช้
Context.*ขอพร็อพเพอร์ตี้ออบเจ็กต์ย่อย
ชื่อพร็อพเพอร์ตี้ | คำอธิบาย |
---|---|
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 ylSkZIjbdWybfs4fUQe9BqP0LH5ZJavaScript ต่อไปนี้: วันที่ 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.*Response ออบเจ็กต์ย่อย
สำหรับธุรกรรม HTTP แต่ละรายการที่ประมวลผลในพร็อกซี API ออบเจ็กต์ข้อความตอบกลับ 2 รายการคือ สร้างแล้ว: รายการหนึ่งขาเข้า (การตอบสนองจากบริการแบ็กเอนด์) และอีกรายการหนึ่งขาออก (การตอบสนอง ส่งกลับไปยังลูกค้า)
ออบเจ็กต์บริบทมีออบเจ็กต์ลูกที่แสดงข้อความตอบกลับเหล่านี้
context.proxyResponse
และ context.targetResponse
ออบเจ็กต์เหล่านี้ช่วยให้คุณ
เข้าถึงพร็อพเพอร์ตี้ภายในขั้นตอนการตอบสนองที่อยู่ในขอบเขตเมื่อโค้ด JavaScript ของคุณ
ในการดำเนินการ
หมายเหตุ: คุณยังใช้ออบเจ็กต์ย่อ response
เพื่อเข้าถึงได้ด้วย
พร็อพเพอร์ตี้เหล่านี้
จากขั้นตอนการตอบสนอง ออบเจ็กต์ response
อ้างอิงถึง
context.proxyResponse
หรือ context.targetResponse
ขึ้นอยู่กับตำแหน่งใน
ดำเนินการตามขั้นตอนที่โค้ด JavaScript ของคุณเรียกใช้
บริบท*พร็อพเพอร์ตี้ออบเจ็กต์การตอบสนอง
ชื่อพร็อพเพอร์ตี้ | คำอธิบาย |
---|---|
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
มีวิธีที่สะดวกในการสำรวจเอกสาร XML โดยใช้รูปแบบ .asXML
ส่วนนี้จะอธิบายวิธีใช้เครื่องหมายนี้ และข้อแตกต่างจาก
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 คำสั่งพิมพ์()
ถ้าคุณกำลังใช้นโยบาย 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
เปิดเผยโดยออบเจ็กต์ Apigee Edge JavaScript
ของรุ่น
เกี่ยวกับ httpClient
ออบเจ็กต์ httpClient
แสดงต่อโค้ด JavaScript ที่กำหนดเองซึ่งทำงานใน Apigee Edge
ผ่านโมเดลออบเจ็กต์ JavaScript หากต้องการแนบ JavaScript ที่กำหนดเองกับพร็อกซี API ให้ใช้เมธอด
นโยบาย JavaScript เมื่อ
การเรียกใช้นโยบาย โค้ด JavaScript ที่กำหนดเองจะทำงาน
ออบเจ็กต์ httpClient
มีประโยชน์สำหรับการพัฒนาบริการแบบผสมหรือ
แมชอัป ตัวอย่างเช่น คุณสามารถรวมการเรียกแบ็กเอนด์หลายรายการเข้าด้วยกันเป็นเมธอด API เดียว
ออบเจ็กต์นี้มักใช้เป็นทางเลือกของนโยบาย Serviceข้อความเสริม
นี่คือรูปแบบการใช้งานพื้นฐาน สร้างอินสแตนซ์อ็อบเจกต์คำขอ กำหนด 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()
จะแสดงผล JavaScriptundefined
isSuccess()
: (บูลีน) แสดงผลtrue
หากการส่งเสร็จสมบูรณ์ และ สำเร็จisComplete()
: (บูลีน) แสดงผลtrue
หากคำขอคือ เสร็จสมบูรณ์waitForComplete()
: หยุดชุดข้อความชั่วคราวจนกว่าคำขอจะเสร็จสมบูรณ์ (โดยสำเร็จ หรือข้อผิดพลาด)getResponse()
: (object) แสดงผลออบเจ็กต์การตอบกลับหากhttpClient.send()
เสร็จสมบูรณ์และสำเร็จ ออบเจ็กต์ที่แสดงผลมีแอตทริบิวต์ Method และคุณสมบัติที่เหมือนกันเป็นออบเจ็กต์ Context.proxyResponse ดูสรุปออบเจ็กต์บริบทgetError()
: (สตริง) หากการเรียกไปยังhttpClient.send()
ทำให้เกิด "ข้อผิดพลาด" จะแสดงข้อความแสดงข้อผิดพลาดเป็นสตริง
ตัวอย่าง
ส่งออบเจ็กต์คำขอที่กำหนดค่าแบบสมบูรณ์ซึ่งมีคุณสมบัติของ HTTP อีกครั้ง ใช้ Callback แบบไม่บล็อกในการประมวลผลการตอบกลับ
// 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 โมเดล
- สำหรับตัวอย่างพื้นฐานและคำแนะนำ โปรดดู Programming API พร็อกซีด้วย JavaScript
- สำหรับตัวอย่างโค้ด JavaScript ที่ใช้งานได้ โปรดดูตัวอย่าง Apigee Edge ใน GitHub
บทความเกี่ยวกับชุมชน Apigee
คุณสามารถค้นหาบทความที่เกี่ยวข้องเหล่านี้ได้ใน Apigee ชุมชน: