นโยบายคําขอราคาเสนอบริการ

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

อะไร

นโยบาย Service Callout ช่วยให้คุณเรียกใช้บริการอื่นจากโฟลว์พร็อกซี API ได้ คุณ สามารถเรียกใช้บริการภายนอก (เช่น จุดสิ้นสุดของบริการ RESTful ภายนอก) หรือ บริการภายใน (เช่น พร็อกซี API ในองค์กรและสภาพแวดล้อมเดียวกัน)

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

นโยบายรองรับคำขอผ่าน HTTP และ HTTPS

ตัวอย่าง

การโทรในเครื่องไปยังพร็อกซีภายใน

<LocalTargetConnection>
    <APIProxy>data-manager</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

ตัวอย่างนี้สร้างการเรียกไปยังพร็อกซี API ในเครื่อง (ซึ่งอยู่ในองค์กรและสภาพแวดล้อมเดียวกัน) ที่ชื่อ data-manager โดยระบุปลายทางพร็อกซีที่มีชื่อ default

URL เป็นตัวแปร

<HTTPTargetConnection>
    <URL>http://example.com/{request.myResourcePath}</URL>
</HTTPTargetConnection>

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

คำขอการเข้ารหัสพิกัดภูมิศาสตร์ / คำขอคำจำกัดความของ Google

<ServiceCallout name="ServiceCallout-GeocodingRequest1">
    <DisplayName>Inline request message</DisplayName>
    <Request variable="authenticationRequest">
      <Set>
        <QueryParams>
          <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
          <QueryParam name="region">{request.queryparam.country}</QueryParam>
          <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
      </Set>
    </Request>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>
http://maps.googleapis.com/maps/api/geocode/json

คุณสามารถกำหนดออบเจ็กต์คำขอในนโยบายการเรียกใช้บริการได้โดยตรงแทนการใช้นโยบาย เช่น Assign Message เพื่อสร้างออบเจ็กต์คำขอ ในตัวอย่างนี้ นโยบายข้อความไฮไลต์ของบริการ จะกำหนดค่าของพารามิเตอร์การค้นหา 3 รายการที่ส่งไปยังบริการภายนอก คุณสร้างข้อความคำขอทั้งหมดในนโยบาย Service Callout ที่ระบุเพย์โหลด ประเภทการเข้ารหัส เช่น application/xml ส่วนหัว พารามิเตอร์แบบฟอร์ม ฯลฯ ได้

ต่อไปนี้เป็นอีกตัวอย่างหนึ่งที่สร้างคำขอก่อนที่จะไปถึงนโยบายข้อความกระตุ้นให้ดำเนินการเกี่ยวกับบริการ

<ServiceCallout name="ServiceCallout-GeocodingRequest2">
    <Request clearPayload="false" variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

ระบบจะดึงเนื้อหาของข้อความคำขอจากตัวแปรที่ชื่อ GeocodingRequest (ซึ่งอาจมีค่า เช่น จากนโยบาย AssignMessage) ระบบจะกําหนดข้อความตอบกลับให้กับตัวแปร ที่ชื่อ GeocodingResponse ซึ่งจะพร้อมให้วิเคราะห์โดยนโยบายตัวแปร Extract หรือโดยโค้ดที่กําหนดเองที่เขียนใน JavaScript หรือ Java นโยบายจะรอการตอบกลับจาก Google Geocoding API เป็นเวลา 30 วินาทีก่อนที่จะหมดเวลา

ดูพร็อกซี API ตัวอย่างที่สมบูรณ์ซึ่งใช้การเรียกใช้บริการตัวอย่างนี้ รวมถึงนโยบาย Assign Message และ Extract Variables ได้ที่การใช้การประกอบนโยบาย

เรียกเซิร์ฟเวอร์เป้าหมาย

<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout">
    <DisplayName>service-callout</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>myResponse</Response>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Algorithm>RoundRobin</Algorithm>
            <Server name="httpbin"/>
            <Server name="yahoo"/>
        </LoadBalancer>
        <Path>/get</Path>
    </HTTPTargetConnection>
</ServiceCallout>

นโยบายนี้ใช้แอตทริบิวต์ LoadBalancer เพื่อเรียกเซิร์ฟเวอร์เป้าหมายและทำการจัดสรรภาระงาน ในเซิร์ฟเวอร์เหล่านั้น ในตัวอย่างนี้ ระบบจะกระจายภาระงานไปยังเซิร์ฟเวอร์เป้าหมาย 2 เครื่องชื่อ "httpbin" และ "yahoo" ดูข้อมูลเกี่ยวกับการตั้งค่าเซิร์ฟเวอร์เป้าหมายสำหรับพร็อกซีและการกำหนดค่า การปรับสมดุลการรับส่ง ได้ที่การปรับสมดุลการรับส่งใน เซิร์ฟเวอร์แบ็กเอนด์


เกี่ยวกับนโยบายข้อความไฮไลต์บริการ

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

โดยปกติแล้ว Callout จะใช้ร่วมกับนโยบายอื่นๆ อีก 2 รายการ ได้แก่ กำหนดข้อความและดึงข้อมูลตัวแปร

  • คำขอ: Assign Message จะสร้างข้อความคำขอที่ส่งไปยังบริการระยะไกล
  • การตอบกลับ: ฟังก์ชัน Extract Variables จะแยกวิเคราะห์การตอบกลับและแยกเนื้อหาที่เฉพาะเจาะจง ออกมา

โดยปกติแล้ว องค์ประกอบของนโยบายข้อความไฮไลต์บริการมีดังนี้

  1. กำหนดนโยบาย ข้อความ: สร้างข้อความคำขอ ป้อนข้อมูลส่วนหัว HTTP พารามิเตอร์การค้นหา ตั้งค่ากริยา HTTP ฯลฯ
  2. นโยบาย Service Callout: อ้างอิงข้อความที่สร้างขึ้นโดยนโยบาย Assign Message กำหนด URL เป้าหมายสำหรับการเรียกภายนอก และกำหนดชื่อสำหรับออบเจ็กต์การตอบกลับ ที่บริการเป้าหมายส่งคืน

    นอกจากนี้ คุณยังแคชการตอบกลับของ Service Callout เพื่อปรับปรุงประสิทธิภาพได้ตามที่อธิบายไว้ใน กระทู้ชุมชน Apigee นี้: ฉันจะจัดเก็บผลลัพธ์ของนโยบาย ServiceCallout ไว้ในแคชและเรียกข้อมูลจากแคชในภายหลังได้อย่างไร
  3. Extract Variables policy: โดยทั่วไปจะกำหนดนิพจน์ JSONPath หรือ XPath ที่แยกวิเคราะห์ข้อความที่สร้างขึ้น โดย Service Callout จากนั้นนโยบายจะตั้งค่าตัวแปรที่มีค่าที่แยกวิเคราะห์จาก การตอบกลับของ Service Callout

ดูการใช้การ เขียนนโยบายเพื่อดูพร็อกซี API ตัวอย่างที่สมบูรณ์ซึ่งใช้นโยบาย Service Callout พร้อมกับ นโยบาย Assign Message และ Extract Variables

การจัดการข้อผิดพลาดที่กำหนดเอง

การอ้างอิงองค์ประกอบ

ต่อไปนี้คือองค์ประกอบและแอตทริบิวต์ที่คุณกำหนดค่าในนโยบายนี้ได้

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Remove>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
         </Remove>
         <Copy>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Copy>
        <Add>
            <Headers/>
            <QueryParams/>
            <FormParams/>
        </Add>
        <Set>
            <Headers/>
            <QueryParams/>
            <FormParams/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Set>
    </Request>
    <Response>calloutResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
        <URL>http://example.com</URL>
        <LoadBalancer/>
        <SSLInfo/>
        <Properties/>
    </HTTPTargetConnection>
    <LocalTargetConnection>
        <APIProxy/>
        <ProxyEndpoint/>
        <Path/>
    </LocalTargetConnection>
</ServiceCallout>

แอตทริบิวต์ <ServiceCallout>

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">

ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name สามารถ ประกอบด้วยตัวอักษร ตัวเลข การเว้นวรรค ขีดกลางสั้น ขีดล่าง และจุด ค่านี้ไม่สามารถ เกิน 255 อักขระ

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

องค์ประกอบ <Request>

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

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Remove>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Remove>
    <Copy>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Copy>
    <Add>
        <Headers/>
        <QueryParams/>
        <FormParams/>
    </Add>
    <Set>
        <Headers/>
        <QueryParams/>
        <FormParams/>
        <Payload/>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Set>
</Request>

ไวยากรณ์ของแท็ก <Remove>, <Copy>, <Add> และ <Set> จะเหมือนกับของ Assign Message policy

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

ในตัวอย่างที่ง่ายที่สุด คุณจะส่งตัวแปรที่มีข้อความคำขอที่สร้างขึ้น ก่อนหน้านี้ในโฟลว์ของพร็อกซี API

<Request clearPayload="true" variable="myRequest"/>

หรือจะป้อนข้อความคำขอที่ส่งไปยังบริการภายนอกในนโยบาย Service Callout เองก็ได้

<Request>
  <Set>
    <Headers>
      <Header name="Accept">application/json</Header>
    </Headers>
    <Verb>POST</Verb>
    <Payload contentType="application/json">{"message":"my test message"}</Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
ค่าเริ่มต้น หากคุณละเว้นองค์ประกอบ Request หรือแอตทริบิวต์ใดๆ ขององค์ประกอบนั้น Edge จะกำหนดค่าเริ่มต้นต่อไปนี้

<Request clearPayload="true" variable="servicecallout.request"/>

มาดูกันว่าค่าเริ่มต้นเหล่านี้หมายความว่าอย่างไร ก่อนอื่น clearPayload=true หมายความว่าระบบจะสร้างออบเจ็กต์คำขอใหม่ทุกครั้งที่นโยบาย ServiceCallout ทำงาน ซึ่งหมายความว่าระบบจะไม่นำคำขอและเส้นทาง URI ของคำขอกลับมาใช้ซ้ำ ประการที่ 2 ตัวแปรเริ่มต้น ชื่อ servicecallout.request เป็นชื่อที่สงวนไว้ซึ่งกำหนดให้กับคำขอ หากคุณไม่ได้ระบุชื่อ

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

servicecallout.request.header.Authorization

การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท ไม่มี

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ตัวแปร

ชื่อของตัวแปรที่จะมีข้อความคำขอ

servicecallout.request ไม่บังคับ
clearPayload

หากเป็น true ระบบจะล้างตัวแปรที่มีข้อความคำขอหลังจากส่งคำขอไปยังเป้าหมาย HTTP เพื่อเพิ่มพื้นที่ว่างในหน่วยความจำที่ใช้โดยข้อความคำขอ

ตั้งค่าตัวเลือก clearPayload เป็น false ก็ต่อเมื่อต้องใช้ข้อความคำขอหลังจากที่ ดำเนินการเรียกใช้บริการแล้ว

จริง ไม่บังคับ

องค์ประกอบ <Request>/<IgnoreUnresolvedVariables>

เมื่อตั้งค่าเป็น true นโยบาย จะไม่สนใจข้อผิดพลาดของตัวแปรที่ยังไม่ได้รับการแก้ไขในคำขอ

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
ค่าเริ่มต้น เท็จ
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท บูลีน

องค์ประกอบ <Response>

รวมองค์ประกอบนี้เมื่อตรรกะของพร็อกซี API ต้องการการตอบกลับจากการเรียกจากระยะไกลเพื่อ การประมวลผลเพิ่มเติม

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

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

 <Response>calloutResponse</Response>
ค่าเริ่มต้น NA
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท สตริง

องค์ประกอบ <Timeout>

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

<Timeout>30000</Timeout>
ค่าเริ่มต้น 55000 มิลลิวินาที (55 วินาที) ซึ่งเป็นการตั้งค่าการหมดเวลา HTTP เริ่มต้นสำหรับ Apigee Edge
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท จำนวนเต็ม

องค์ประกอบ <HTTPTargetConnection>

ระบุรายละเอียดการรับส่ง เช่น URL, TLS/SSL และพร็อพเพอร์ตี้ HTTP ดู <TargetEndpoint>ข้อมูลอ้างอิงการกำหนดค่า

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ต้องระบุ
ประเภท ไม่มี

องค์ประกอบ <HTTPTargetConnection>/<URL>

URL ของบริการที่กำลังเรียกใช้

<HTTPTargetConnection>
    <URL>http://example.com</URL>
</HTTPTargetConnection>

คุณระบุส่วนหนึ่งของ URL แบบไดนามิกได้โดยใช้ตัวแปร อย่างไรก็ตาม ส่วนโปรโตคอลของ URL, http:// ด้านล่างนี้ ระบุด้วยตัวแปรไม่ได้ ในตัวอย่างถัดไป คุณจะใช้ตัวแปรเพื่อระบุค่าของพารามิเตอร์การค้นหา

<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>

หรือตั้งค่าส่วนหนึ่งของเส้นทาง URL ด้วยตัวแปร

<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>

หากต้องการใช้ตัวแปรเพื่อระบุโดเมนและพอร์ตของ URL ให้ใช้ตัวแปรหนึ่ง สำหรับโดเมนและพอร์ตเท่านั้น และใช้ตัวแปรที่ 2 สำหรับส่วนอื่นๆ ของ URL

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ต้องระบุ
ประเภท สตริง

องค์ประกอบ <HTTPTargetConnection>/<SSLInfo>

การกำหนดค่า TLS/SSL สำหรับบริการแบ็กเอนด์ หากต้องการความช่วยเหลือเกี่ยวกับการกำหนดค่า TLS/SSL โปรดดู การกำหนดค่า TLS จาก Edge ไปยังแบ็กเอนด์ (Cloud และ Private Cloud) และ "การกำหนดค่า TargetEndpoint ของ TLS/SSL" ในข้อมูลอ้างอิงการกำหนดค่าพร็อกซี API

<HTTPTargetConnection>
    <URL>https://example.com</URL>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>ref://mykeystoreref</KeyStore>  ## Use of a reference is recommended
        <KeyAlias>myKey</KeyAlias>
        <TrustStore>myTruststore</TrustStore>
        <Ciphers/>
        <Protocols/>
    </SSLInfo>
</HTTPTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท ไม่มี

องค์ประกอบ <HTTPTargetConnection>/<Properties>

พร็อพเพอร์ตี้การรับส่งข้อมูล HTTP ไปยังบริการแบ็กเอนด์ ดูข้อมูลเพิ่มเติมได้ที่ ข้อมูลอ้างอิงเกี่ยวกับพร็อพเพอร์ตี้ของอุปกรณ์ปลายทาง

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <Properties>
        <Property name="allow.http10">true</Property>
        <Property name="request.retain.headers">
          User-Agent,Referer,Accept-Language
        </Property>
    </Properties>
</HTTPTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท ไม่มี

องค์ประกอบ <HTTPTargetConnection>/<LoadBalancer>

เรียกเซิร์ฟเวอร์เป้าหมายอย่างน้อย 1 เครื่องและทำการปรับสมดุลโหลดในเซิร์ฟเวอร์เหล่านั้น ดูตัวอย่างเรียกเซิร์ฟเวอร์ เป้าหมายในส่วนตัวอย่าง ดูการจัดสรรภาระงานในเซิร์ฟเวอร์แบ็กเอนด์ด้วย โปรดดูโพสต์ในชุมชนนี้ซึ่งอธิบายวิธีเรียกเซิร์ฟเวอร์เป้าหมายจากทั้งนโยบาย Service Callout และ การใช้กฎเส้นทางด้วย

<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท ไม่มี

องค์ประกอบ <LocalTargetConnection>

ระบุพร็อกซีภายใน ซึ่งก็คือพร็อกซีในองค์กรและสภาพแวดล้อมเดียวกัน เป็นเป้าหมายของ Callout ของบริการ

หากต้องการระบุเป้าหมายเพิ่มเติม ให้ใช้องค์ประกอบ <APIProxy> และ <ProxyEndpoint> หรือองค์ประกอบ <Path>

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
   <Path/>
</LocalTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ต้องระบุ
ประเภท ไม่มี

องค์ประกอบ <LocalTargetConnection>/<APIProxy>

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

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

นอกจากองค์ประกอบ <APIProxy> แล้ว ให้ใส่องค์ประกอบ <ProxyEndpoint> เพื่อระบุชื่อของปลายทางพร็อกซีที่ควร กำหนดเป้าหมายสำหรับการโทร

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ต้องระบุ
ประเภท สตริง

องค์ประกอบ <LocalTargetConnection>/<ProxyEndpoint>

ชื่อของปลายทางพร็อกซีที่ควรเป็นเป้าหมายของการเรียก นี่คือปลายทางพร็อกซีใน พร็อกซี API ที่ระบุด้วยองค์ประกอบ <APIProxy>

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท ไม่มี

องค์ประกอบ <LocalTargetConnection>/<Path>

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

ใช้ตัวแปรนี้แทนคู่ <APIProxy>/<ProxyEndpoint> เมื่อคุณไม่ทราบหรือไม่สามารถใช้ชื่อพร็อกซีได้ เส้นทางอาจเป็นเป้าหมายที่เชื่อถือได้

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคลในบ้าน ไม่บังคับ
ประเภท ไม่มี

สคีมา

ตัวแปรโฟลว์

ตัวแปรโฟลว์ช่วยให้เกิดลักษณะการทำงานแบบไดนามิกของนโยบายและโฟลว์ในขณะรันไทม์ โดยอิงตามส่วนหัว HTTP เนื้อหาข้อความ หรือบริบทโฟลว์ ตัวแปร Flow ที่กำหนดไว้ล่วงหน้าต่อไปนี้จะพร้อมใช้งาน หลังจากที่นโยบาย Service Callout ทำงาน ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรโฟลว์ได้ที่ข้อมูลอ้างอิงตัวแปร

การเรียกใช้บริการมีคำขอและการตอบกลับของตัวเอง และคุณสามารถเข้าถึงข้อมูลดังกล่าวผ่านตัวแปรได้ เนื่องจากข้อความหลักใช้คำนำหน้าตัวแปร request.* และ response.* ให้ใช้คำนำหน้า myrequest.* และ calloutResponse.* (ค่าเริ่มต้นในการกำหนดค่าข้อความไฮไลต์บริการ) เพื่อ รับข้อมูลข้อความที่เฉพาะเจาะจงสำหรับข้อความไฮไลต์บริการ ตัวอย่างแรกในตารางต่อไปนี้แสดงวิธีรับส่วนหัว HTTP ในการเรียกใช้บริการ

ตัวแปร คำอธิบาย

ต่อไปนี้เป็นตัวอย่างการรับส่วนหัวของคำขอและการตอบกลับของข้อความไฮไลต์บริการ ซึ่งคล้ายกับวิธีรับส่วนหัวจากคำขอและการตอบกลับหลัก

calloutResponse.header.HeaderName

myRequest.header.HeaderName

โดย calloutResponse คือชื่อตัวแปรสำหรับการตอบกลับใน Service Callout และ myRequest คือชื่อตัวแปรสำหรับคำขอ เช่น

calloutResponse.header.Content-Length

แสดงผลส่วนหัว Content-Length ของการตอบกลับการเรียกใช้บริการ

ขอบเขต: จากข้อความไฮไลต์ของบริการเป็นต้นไป
ประเภท: สตริง
สิทธิ์: อ่าน/เขียน

ส่วนหัวของข้อความในคำขอหรือการตอบกลับของข้อความไฮไลต์บริการ ตัวอย่างเช่น หากเป้าหมายพร็อกซี API คือ http://example.com และเป้าหมายการเรียกใช้บริการคือ http://mocktarget.apigee.net ตัวแปรเหล่านี้จะเป็นส่วนหัวสำหรับการเรียกไปยัง http://mocktarget.apigee.net

servicecallout.requesturi

ขอบเขต: จากคำขอข้อความไฮไลต์ของบริการเป็นต้นไป
ประเภท: สตริง
สิทธิ์: อ่าน/เขียน

URI ของ TargetEndpoint สำหรับนโยบาย ServiceCallout URI คือ URL ของ TargetEndpoint ที่ไม่มีการระบุโปรโตคอลและโดเมน

servicecallout.{policy-name}.target.url

ขอบเขต: จากคำขอข้อความไฮไลต์ของบริการเป็นต้นไป
ประเภท: สตริง
สิทธิ์: อ่าน/เขียน

URL เป้าหมายสำหรับข้อความไฮไลต์บริการ

calloutResponse.content

โดย calloutResponse คือ<Response>ชื่อตัวแปร ในการกำหนดค่าการเรียกใช้บริการ

ขอบเขต: จากการตอบกลับข้อความไฮไลต์ของบริการเป็นต้นไป
ประเภท: สตริง
สิทธิ์: อ่าน/เขียน

เนื้อหาการตอบกลับจาก Service Callout

servicecallout.{policy-name}.expectedcn

ขอบเขต: จากคำขอข้อความไฮไลต์ของบริการเป็นต้นไป
ประเภท: สตริง
สิทธิ์: อ่าน/เขียน

ชื่อสามัญที่คาดไว้ของ TargetEndpoint ตามที่อ้างอิงในนโยบาย ServiceCallout ซึ่งจะมีประโยชน์เฉพาะเมื่อ TargetEndpoint อ้างอิงถึงปลายทาง TLS/SSL เท่านั้น

servicecallout.{policy-name}.failed

ขอบเขต: จากการตอบกลับของข้อความแจ้งบริการเป็นต้นไป
ประเภท: บูลีน
สิทธิ์: อ่าน/เขียน

บูลีนที่ระบุว่านโยบายสำเร็จ (false) หรือไม่สำเร็จ (true)

ข้อผิดพลาด

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
steps.servicecallout.ExecutionFailed 500

ข้อผิดพลาดนี้อาจเกิดขึ้นในกรณีต่อไปนี้

  • ระบบจะขอให้นโยบายนี้จัดการอินพุตที่ผิดรูปแบบหรือไม่ถูกต้อง
  • บริการเป้าหมายแบ็กเอนด์จะแสดงสถานะข้อผิดพลาด (โดยค่าเริ่มต้นคือ 4xx หรือ 5xx)
steps.servicecallout.RequestVariableNotMessageType 500 ตัวแปรคำขอที่ระบุในนโยบายไม่ใช่ประเภท "ข้อความ" ตัวอย่างเช่น หาก เป็นสตริงหรือประเภทที่ไม่ใช่ข้อความ คุณจะเห็นข้อผิดพลาดนี้
steps.servicecallout.RequestVariableNotRequestMessageType 500 ตัวแปรคำขอที่ระบุในนโยบายไม่ใช่ประเภท "ข้อความคำขอ" สำหรับ เช่น ถ้าเป็นประเภทการตอบกลับ คุณจะเห็นข้อผิดพลาดนี้

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
URLMissing องค์ประกอบ <URL> ภายใน <HTTPTargetConnection> ไม่มีหรือว่างเปล่า
ConnectionInfoMissing ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายไม่มี <HTTPTargetConnection> หรือ <LocalTargetConnection>
InvalidTimeoutValue ข้อผิดพลาดนี้เกิดขึ้นหากค่า <Timeout> เป็นลบหรือ 0

ตัวแปรความผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name = "RequestVariableNotMessageType"
servicecallout.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด servicecallout.SC-GetUserData.failed = true

ตัวอย่างการตอบสนองข้อผิดพลาด

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: 
            request variable data_str value is not of type Message"
   }
}

ตัวอย่างกฎข้อผิดพลาด

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>

หัวข้อที่เกี่ยวข้อง