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

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

พร็อกซี 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>

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

มีอิทธิพล

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

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

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

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

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

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

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