Antipattern: ใช้นโยบายคำขอราคาเสนอของบริการเพื่อเรียกใช้บริการแบ็กเอนด์ในพร็อกซี No Target API

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

พร็อกซี API คือส่วนหน้าที่มีการจัดการสำหรับบริการแบ็กเอนด์ การกำหนดค่าพร็อกซี API พื้นฐานประกอบด้วย ProxyEndpoint (กำหนด URL ของพร็อกซี API) และ TargetEndpoint (กำหนด URL ของบริการแบ็กเอนด์)

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

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

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

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

คุณสามารถกำหนดเส้นทาง Null ในพร็อกซี API ได้ดังที่แสดงไว้ที่นี่

<RouteRule name="noroute"/>

พร็อกซีที่ใช้เส้นทาง Null คือพร็อกซี "ไม่มีเป้าหมาย" เนื่องจากไม่ได้เรียกใช้บริการแบ็กเอนด์เป้าหมาย

ในทางเทคนิคแล้ว คุณสามารถเพิ่มการเรียกใช้บริการไปยังพร็อกซีที่ไม่มีเป้าหมายเพื่อเรียกใช้บริการภายนอกได้ดังที่แสดงในตัวอย่างด้านล่าง

<!-- /antipatterns/examples/service-callout-no-target-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>ServiceCallout-InvokeBackend</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/no-target-proxy</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="noroute"/>
</ProxyEndpoint>

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

ผลกระทบ

  • ไม่มีข้อมูลวิเคราะห์เกี่ยวกับการโต้ตอบกับบริการภายนอก ( รหัสข้อผิดพลาด เวลาตอบสนอง ประสิทธิภาพเป้าหมาย ฯลฯ)
  • ตรรกะเฉพาะที่จำเป็นก่อนหรือหลังการเรียกใช้บริการจะรวมเป็นส่วนหนึ่งของตรรกะพร็อกซีโดยรวม ซึ่งทำให้เข้าใจและนำกลับมาใช้ใหม่ได้ยากขึ้น

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

หากพร็อกซี API โต้ตอบกับบริการภายนอกเพียงบริการเดียว พร็อกซีควรเป็นไปตามรูปแบบการออกแบบพื้นฐาน โดยกำหนดบริการแบ็กเอนด์เป็นปลายทางเป้าหมายของพร็อกซี API พร็อกซี ที่ไม่มีกฎการกำหนดเส้นทางไปยังปลายทางเป้าหมายไม่ควรเรียกใช้บริการแบ็กเอนด์โดยใช้นโยบาย ServiceCallout

การกำหนดค่าพร็อกซีต่อไปนี้จะใช้ลักษณะการทำงานเดียวกับตัวอย่างด้านบน แต่เป็นไปตามแนวทางปฏิบัติแนะนำ

<!-- /antipatterns/examples/service-callout-no-target-2.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/simple-proxy-with-route-to-backend</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

ใช้การเรียกใช้บริการเพื่อรองรับสถานการณ์การรวมบริการต่างๆ เข้าด้วยกัน ซึ่งคุณต้องการเรียกใช้บริการภายนอกก่อน หรือหลังการเรียกใช้ปลายทางเป้าหมาย การเรียกใช้บริการไม่ได้มีไว้เพื่อแทนที่การเรียกใช้ปลายทางเป้าหมาย

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