การเขียนโปรแกรมพร็อกซี API ด้วย JavaScript

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

ในหัวข้อนี้ คุณจะได้เรียนรู้วิธีใช้ JavaScript เพื่อเพิ่มส่วนหัว HTTP แบบไดนามิกไปยัง ข้อความตอบกลับและวิธีแยกวิเคราะห์การตอบกลับ JSON และแสดงผลชุดย่อยของพร็อพเพอร์ตี้ไปยัง ซึ่งเป็นแอปที่ส่งคำขอ

ดาวน์โหลดและลองใช้โค้ดตัวอย่าง

เกี่ยวกับตัวอย่างตำราอาหารนี้

ตัวอย่างตำราอาหารนี้แสดงรูปแบบพร็อกซี API ที่คุณใช้ลักษณะการทำงานของ API ใน JavaScript ตัวอย่าง JavaScript ออกแบบมาเพื่อแสดงวิธีการทำงานกับตัวแปรง่ายๆ และเนื้อหาของข้อความ ตัวอย่าง 1 รายการแสดงวิธีรับและตั้งค่าตัวแปร องค์ประกอบที่ 2 ตัวอย่างที่แสดงวิธีแยกวิเคราะห์ JSON และสร้างข้อความจากผลลัพธ์

ตัวอย่าง JavaScript 2 รายการอยู่ในพร็อกซี API ดังนี้

  • setHeaders.js: JavaScript นี้รับค่าของตัวแปร 2-3 ตัวที่ ได้รับการตั้งค่าเมื่อมีการเรียกใช้พร็อกซี API JavaScript จะเพิ่มตัวแปรเหล่านั้นในการตอบกลับ เพื่อให้คุณเห็นค่าของคำขอแต่ละรายการ
  • minimize.js: JavaScript นี้แสดงวิธีดำเนินการกับข้อความ เนื้อหา แนวคิดที่อยู่เบื้องหลังตัวอย่างนี้คือบริการมักจะส่งคืนข้อมูลมากกว่า ตามความจำเป็น ดังนั้น JavaScript จะแยกวิเคราะห์ข้อความตอบกลับ และดึงข้อมูลที่น่าสนใจบางส่วน จากนั้นใช้พร็อพเพอร์ตี้เพื่อสร้างเนื้อหาของข้อความตอบกลับ

รหัสสำหรับ 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"));

รหัสสำหรับ 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);

คุณเข้าถึงตัวแปรโฟลว์ใน JavaScript ผ่านออบเจ็กต์บริบทได้ ออบเจ็กต์นี้เป็นส่วนหนึ่งของ โมเดลออบเจ็กต์ Edge JavaScript โปรดดูรายละเอียดเกี่ยวกับโมเดลออบเจ็กต์ที่หัวข้อโมเดลออบเจ็กต์ JavaScript

ก่อนเริ่มต้น

ก่อนจะดูตัวอย่างตำราอาหารนี้ คุณควรทำความคุ้นเคยกับพื้นฐานเหล่านี้ด้วย แนวคิด

  • นโยบายคืออะไรและวิธีแนบนโยบายกับพร็อกซี สำหรับการแนะนำนโยบายที่ดี ดู คืออะไร
  • โครงสร้างของโฟลว์พร็อกซีตามที่อธิบายไว้ในการกำหนดค่าโฟลว์ โฟลว์ช่วยให้คุณ ระบุลำดับที่พร็อกซี API จะบังคับใช้นโยบาย ในตัวอย่างนี้ ระบบจะสร้างนโยบายและเพิ่มลงในขั้นตอนของพร็อกซี API
  • วิธีจัดระเบียบโปรเจ็กต์พร็อกซี API ในระบบไฟล์ของคุณตามที่อธิบายไว้ใน ข้อมูลอ้างอิงการกำหนดค่าพร็อกซี API
  • ความรู้ในการใช้งาน XML, JSON และ JavaScript ในตัวอย่างนี้ คุณสร้าง API พร็อกซีและนโยบายกับไฟล์ XML ที่อยู่ในระบบไฟล์

หากคุณดาวน์โหลดโค้ดตัวอย่างแล้ว คุณสามารถค้นหาไฟล์ทั้งหมดที่กล่าวถึงใน ในโฟลเดอร์ตัวอย่าง javascript-cookbook ส่วนต่อไปนี้จะกล่าวถึง โค้ดตัวอย่างโดยละเอียด

การทำความเข้าใจโฟลว์พร็อกซี

หากต้องการให้ JavaScript ทำงานในพร็อกซี API คุณต้องแนบ JavaScript กับโฟลว์โดยใช้นโยบาย ไฟล์แนบที่เรียกว่า "ขั้นตอน" นโยบายของประเภท JavaScript (การใช้อักษรตัวพิมพ์ใหญ่ของหมายเหตุ) จะมีเฉพาะ การอ้างอิงถึงชื่อไฟล์ JavaScript คุณชี้นโยบายไปยังไฟล์ JavaScript โดยใช้ องค์ประกอบ ResourceURL

ตัวอย่างเช่น นโยบายต่อไปนี้อ้างอิงไฟล์ JavaScript ชื่อ setHeader.js

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

คุณแนบนโยบายนี้กับขั้นตอนพร็อกซี API ได้เช่นเดียวกับนโยบายประเภทอื่นๆ โดย การแนบนโยบายลงในโฟลว์พร็อกซี API จะเป็นการระบุว่าควรเรียกใช้ JavaScript ที่ใด การดำเนินการนี้จะทำให้คุณเรียกใช้ JavaScript ที่โต้ตอบกับข้อความคำขอหรือข้อความตอบกลับได้ ขณะที่ข้อความเหล่านั้น 'flow' ผ่านพร็อกซี API ในตัวอย่างนี้ JavaScript ทั้งสองจะทำงานใน การตอบกลับเนื่องจากนโยบายทำ 2 อย่าง ได้แก่ ตั้งค่าส่วนหัว HTTP ในข้อความตอบกลับ และ "ย่อเล็กสุด" ข้อความตอบกลับที่ Apigee Edge ส่งไปยังแอปที่ส่งคำขอ

ถ้าเปิดการกำหนดค่าโฟลว์นี้ใน UI การจัดการ คุณจะเห็นการกำหนดค่าโฟลว์ ที่ด้านล่าง

เลือก ปลายทางของพร็อกซี > ค่าเริ่มต้น > PostFlow ใน Navigator

การกำหนดค่า XML ที่เกี่ยวข้องสำหรับ ProxyEndpoint ที่ชื่อ "default" แสดงอยู่ ที่ด้านล่าง

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

นี่คือสรุปองค์ประกอบของขั้นตอน

  • &lt;Request&gt; - <Request> องค์ประกอบประกอบด้วย &lt;Step&gt; จากองค์ประกอบเหล่านี้ แต่ละขั้นตอนจะเรียกหนึ่งในนโยบายที่คุณสร้างขึ้นผ่านส่วนที่เหลือของ หัวข้อนี้ นโยบายเหล่านี้แนบ JavaScript ไปกับโฟลว์พร็อกซี API และตำแหน่งของ ไฟล์แนบของนโยบายจะระบุว่า JavaScript จะทำงานเมื่อใด
  • &lt;Response&gt; - <การตอบกลับ> องค์ประกอบยังมี <Steps> ขั้นตอนเหล่านี้ยังเรียกใช้นโยบายที่รับผิดชอบในการประมวลผลขั้นสุดท้าย การตอบสนองจากเป้าหมาย (ซึ่งในตัวอย่างนี้คือเป้าหมายบริการจำลองของ Apigee การตั้งค่า HTTPTargetConnection ในภายใต้ /apiproxy/targets/default.xml)
  • &lt;HTTPProxyConnection&gt; - ระบุโฮสต์และเส้นทาง URI ที่ กำหนดที่อยู่เครือข่ายที่แอปเรียกใช้เพื่อใช้ API นี้
  • &lt;RouteRule&gt; - องค์ประกอบนี้ระบุ TargetEndpoint ProxyEndpoint จะเรียกใช้การกำหนดค่า

การเพิ่มโค้ด JavaScript ลงในพร็อกซี

JavaScript (เช่น สคริปต์ Python, ไฟล์ Java JAR, ไฟล์ ePub เป็นต้น) ถูกเก็บไว้เป็น แหล่งข้อมูล เมื่อคุณเพิ่งเริ่มใช้ JavaScript การบันทึก ไฟล์ JavaScript ในพร็อกซี API เมื่อคุณพัฒนาไป JavaScript ควรจะเป็นแบบทั่วไป นำมาใช้ใหม่ได้เท่าที่จะเป็นไปได้ แล้วจัดเก็บไว้ที่ระดับสภาพแวดล้อมหรือองค์กร วิธีนี้จะช่วยให้คุณไม่ต้องจัดเก็บไฟล์ JavaScript เดียวกันในพร็อกซี API หลายรายการ ก็อาจกลายเป็นเรื่องจัดการไม่ได้อย่างรวดเร็ว

หากต้องการเรียนรู้เกี่ยวกับการจัดเก็บทรัพยากรในระดับองค์กรและสภาพแวดล้อม โปรดดูหัวข้อไฟล์ทรัพยากร

ลองเลย

สำหรับคำแนะนำในการทำให้และการเรียกใช้พร็อกซีใช้งานได้ โปรดดูที่ ตำราอาหาร JavaScript README

การนำเข้าและทำให้ใช้งานได้ พร็อกซี API

หลังจากทำการเปลี่ยนแปลง คุณจะบันทึกพร็อกซี API ในเครื่องมือสร้างพร็อกซี API ได้ ใน UI การจัดการ

หรือคุณสามารถเรียกใช้คำสั่งต่อไปนี้ในไดเรกทอรีได้ /api-platform-samples/doc-samples/javascript-cookbook

$ sh deploy.sh

การทดสอบ JavaScript

เรียกใช้คำสั่งต่อไปนี้ในไดเรกทอรี /api-platform-samples/doc-samples/javascript-cookbook

$ sh invoke.sh

มีการใช้แฟล็ก Curl -v ในสคริปต์ Shell เพื่อดูส่วนหัว HTTP ในการตอบสนอง ข้อความที่แก้ไขโดย JavaScript

คุณสามารถส่งคำขอได้โดยตรงโดยทำดังนี้

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

หาก JavaScript ทำงานอย่างถูกต้อง คุณจะเห็นการตอบสนองดังนี้:

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

ตอนนี้คุณสามารถแก้ไข JavaScript เพื่อลองสิ่งใหม่ๆ ทำให้พร็อกซี API ใช้งานได้อีกครั้ง และยืนยัน ด้วยการส่งคำขอเดียวกัน ตรวจสอบให้แน่ใจว่าคุณทำให้พร็อกซี API ที่มี JavaScript เพื่อให้การเปลี่ยนแปลงของคุณมีผล

ข้อผิดพลาดของสคริปต์

คุณอาจพบข้อผิดพลาดอย่างหลีกเลี่ยงไม่ได้เมื่อเขียน JavaScript รูปแบบของข้อผิดพลาด JavaScript ที่ คุณจะเห็นว่าพร็อกซี API ออกให้ดังที่แสดงด้านล่าง

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

ใน Apigee Edge ปกติแล้วคุณจะใช้ฟังก์ชันการทำงานที่เฉพาะเจาะจงได้มากกว่า 1 วิธี ใช้ นโยบายที่พร้อมใช้งานทันทีหากเป็นไปได้ และหลีกเลี่ยงไม่ให้ต้องเขียนโค้ดสำหรับพร็อกซี API ทั้งหมด ใน JavaScript แม้ว่า Apigee Edge จะใช้ JavaScript ที่คอมไพล์เพื่อปรับปรุง ก็ไม่น่าเป็นไปได้ที่ JavaScript จะทำงานได้เต็มประสิทธิภาพเช่นเดียวกับนโยบาย JavaScript อาจเป็น จะดูแลรักษาและแก้ไขข้อบกพร่องได้ยากขึ้น จอง JavaScript สำหรับฟังก์ชันการทำงานที่เฉพาะเจาะจงสำหรับ

หากกังวลเกี่ยวกับประสิทธิภาพการทำงานที่กำหนดเอง ให้ใช้ Java เมื่อเป็นไปได้

สรุป

ในหัวข้อตำราอาหาร คุณได้เรียนรู้วิธีรวม JavaScript ในพร็อกซี API การกำหนดค่าเพื่อใช้ลักษณะการทำงานที่กำหนดเอง ลักษณะการทำงานที่กำหนดเองซึ่งกลุ่มตัวอย่างนำไปใช้ สาธิตวิธีการรับและตัวแปร รวมถึงวิธีแยกวิเคราะห์ JSON และสร้างการตอบสนองที่กำหนดเอง ข้อความ