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

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

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

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

ลาย Antipattern

การใช้คำขอราคาเสนอบริการเพื่อเรียกใช้บริการแบ็กเอนด์ในพร็อกซี 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 พร็อกซี ที่ไม่มีกฎการกำหนดเส้นทางไปยังปลายทางเป้าหมายไม่ควรเรียกใช้บริการแบ็กเอนด์โดยใช้นโยบาย Serviceข้อความไฮไลต์

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

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

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

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