Antipattern: เรียกใช้พร็อกซีภายในพร็อกซีโดยใช้โค้ดที่กำหนดเองหรือใช้เป็นเป้าหมาย

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

Edge ช่วยให้คุณเรียกใช้พร็อกซี API หนึ่งจากพร็อกซี API อื่นได้ ฟีเจอร์นี้มีประโยชน์อย่างยิ่งหากคุณมีพร็อกซี API ที่มีโค้ดที่นำกลับมาใช้ใหม่ได้ซึ่งพร็อกซี API อื่นๆ สามารถใช้ได้

รูปแบบที่ไม่แนะนำ

การเรียกใช้พร็อกซี API หนึ่งจากพร็อกซี API อื่นโดยใช้ HTTPTargetConnection ในปลายทางเป้าหมายหรือโค้ด JavaScript ที่กำหนดเองจะทำให้เกิดการข้ามเครือข่ายเพิ่มเติม

เรียกใช้พร็อกซี 2 จากพร็อกซี 1 โดยใช้ HTTPTargetConnection

ตัวอย่างโค้ดต่อไปนี้เรียกใช้พร็อกซี 2 จากพร็อกซี 1 โดยใช้ HTTPTargetConnection

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>http://myorg-test.apigee.net/proxy2</URL>
</HTTPTargetConnection>

เรียกใช้พร็อกซี 2 จากพร็อกซี 1 จากโค้ด JavaScript

ตัวอย่างโค้ดถัดไปเรียกใช้พร็อกซี 2 จากพร็อกซี 1 โดยใช้ JavaScript

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('http://myorg-test.apigee.net/proxy2);
response.waitForComplete();

โฟลว์ของรหัส

หากต้องการทำความเข้าใจว่าเหตุใดวิธีนี้จึงมีข้อเสียโดยธรรมชาติ เราต้องทำความเข้าใจเส้นทางที่คำขอใช้ตามที่แสดงในแผนภาพด้านล่าง

รูปที่ 1: โฟลว์ของรหัส

ตามที่แสดงในแผนภาพ คำขอจะข้ามผ่านคอมโพเนนต์แบบกระจายหลายรายการ ซึ่งรวมถึงเราเตอร์และ Message Processor

ในโค้ดตัวอย่างด้านบน การเรียกใช้พร็อกซี 2 จากพร็อกซี 1 หมายความว่าคำขอต้องกำหนดเส้นทางผ่านเส้นทางแบบเดิม (เช่น เราเตอร์ > MP) ในรันไทม์ ซึ่งจะคล้ายกับการเรียกใช้ API จากไคลเอ็นต์ ซึ่งทำให้เกิดการข้ามเครือข่ายหลายครั้งซึ่งเพิ่มเวลาในการตอบสนอง การข้ามเหล่านี้ไม่จำเป็นเนื่องจากคำขอพร็อกซี 1 "ไปถึง" MP แล้ว

ผลกระทบ

การเรียกใช้พร็อกซี API หนึ่งจากพร็อกซี API อื่นจะทำให้เกิดการข้ามเครือข่ายที่ไม่จำเป็น นั่นคือคำขอต้องส่งจาก Message Processor หนึ่งไปยัง Message Processor อื่น

แนวทางปฏิบัติแนะนำ

  • ใช้ฟีเจอร์การเชื่อมโยงพร็อกซี proxy chaining เพื่อเรียกใช้พร็อกซี API หนึ่งจากพร็อกซี API อื่น การเชื่อมโยงพร็อกซีมีประสิทธิภาพมากกว่าเนื่องจากใช้การเชื่อมต่อในเครื่องเพื่ออ้างอิงปลายทางเป้าหมาย (พร็อกซี API อื่น)

    ตัวอย่างโค้ดแสดงการเชื่อมโยงพร็อกซีโดยใช้ LocalTargetConnection ในคำจำกัดความของปลายทาง

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>

    พร็อกซี API ที่เรียกใช้จะทำงานภายใน Message Processor เดียวกัน ซึ่งจะหลีกเลี่ยงการข้ามเครือข่ายตามที่แสดงในรูปต่อไปนี้

    รูปที่ 2: โฟลว์ของรหัสที่มีการเชื่อมโยงพร็อกซี

อ่านเพิ่มเติม