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

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

อะไร

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

  • ใน Use Case ภายนอก คุณสร้างไฮไลต์ไปยัง 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

แทนที่จะใช้นโยบาย เช่น มอบหมายข้อความ เพื่อสร้างออบเจ็กต์คำขอ คุณจะกำหนดในนโยบายคำขอราคาเสนอบริการได้โดยตรง ในตัวอย่างนี้ นโยบายคำขอราคาเสนอบริการตั้งค่าของพารามิเตอร์การค้นหา 3 รายการที่ส่งไปยังบริการภายนอก คุณสร้างข้อความคำขอทั้งหมดในนโยบายคำขอราคาเสนอบริการที่ระบุเพย์โหลด ประเภทการเข้ารหัส เช่น 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 ซึ่งพร้อมสำหรับการแยกวิเคราะห์โดยนโยบายการดึงข้อมูลตัวแปรหรือโดยโค้ดที่กำหนดเองซึ่งเขียนใน JavaScript หรือ Java นโยบายจะรอ 30 วินาทีเพื่อรับการตอบสนองจาก Google Geocoding API ก่อนที่จะหมดเวลา

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

การโทรไปยังเซิร์ฟเวอร์เป้าหมาย

<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" ดูข้อมูลเกี่ยวกับการตั้งค่าเซิร์ฟเวอร์เป้าหมายสำหรับพร็อกซีและการกำหนดค่าการจัดสรรภาระงานได้ที่การจัดสรรภาระงานในเซิร์ฟเวอร์แบ็กเอนด์


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

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

โดยทั่วไป ไฮไลต์จะใช้กับนโยบายอื่นอีก 2 นโยบาย คือ กำหนดข้อความและแยกตัวแปร

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

องค์ประกอบของนโยบายคำขอราคาเสนอบริการโดยทั่วไปประกอบด้วยส่วนต่างๆ ต่อไปนี้

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

    นอกจากนี้ คุณยังแคชการตอบกลับคำขอราคาเสนอบริการได้ตามที่อธิบายไว้ใน ชุดข้อความของชุมชน Apigee นี้เพื่อประสิทธิภาพที่ดีขึ้น https://community.apigee.com/questions/34110/how-can-i-store-the-results-of-the-servicecallout.html
  3. นโยบายดึงข้อมูลตัวแปร: โดยปกติแล้วจะกำหนดนิพจน์ JSONPath หรือ XPath ที่แยกวิเคราะห์ข้อความที่สร้างโดยการเรียกบริการ จากนั้นนโยบายจะตั้งค่าตัวแปรที่มีค่าที่แยกวิเคราะห์จากการตอบกลับคำขอราคาเสนอบริการ

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

การจัดการข้อผิดพลาดแบบกำหนดเอง

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

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

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

แอตทริบิวต์ <Service callout>

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

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

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

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

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

ไม่มีข้อมูล จำเป็น
continueOnError

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

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

false ไม่บังคับ
enabled

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

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

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

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

false เลิกใช้

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

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

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

ไม่มีข้อมูล

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

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

อีลิเมนต์ <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> จะเหมือนกับของนโยบายมอบหมายข้อความ

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

ตัวอย่างที่ง่ายที่สุดคือ ส่งผ่านตัวแปรที่มีข้อความคำขอซึ่งสร้างมาก่อนหน้านี้ในขั้นตอนของพร็อกซี API ดังนี้

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

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

<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>
ค่าเริ่มต้น หากไม่มีองค์ประกอบคำขอหรือแอตทริบิวต์ใดๆ ในองค์ประกอบดังกล่าว Edge จะกำหนดค่าเริ่มต้นดังต่อไปนี้

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

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

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

servicecallout.request.header.Authorization.

การปรากฏ ไม่บังคับ
ประเภท ไม่มีข้อมูล

Attributes

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

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

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

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

ตั้งค่าตัวเลือก clearPayload เป็น "เท็จ" เฉพาะในกรณีที่ต้องมีข้อความคำขอหลังจากที่เรียกใช้การเรียกบริการ

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

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

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

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

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

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

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

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

 <Response>calloutResponse</Response> 
ค่าเริ่มต้น ไม่มี
การปรากฏ ไม่บังคับ
ประเภท สตริง

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

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

<Timeout>30000</Timeout>
ค่าเริ่มต้น 55,000 มิลลิวินาที (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 ให้ใช้ตัวแปร 1 รายการสำหรับโดเมนและพอร์ตเท่านั้น และใช้ตัวแปรที่ 2 สำหรับส่วนอื่นๆ ของ URL ดังนี้

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

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

การกำหนดค่า TLS/SSL สำหรับบริการแบ็กเอนด์ หากต้องการความช่วยเหลือเกี่ยวกับการกำหนดค่า TLS/SSL โปรดดูการกำหนดค่า TLS จาก Edge ไปยังแบ็กเอนด์ (Cloud และ Private Cloud) และ "การกำหนดค่า TLS/SSL TargetEndpoint" ในข้อมูลอ้างอิงการกำหนดค่าพร็อกซี 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 เครื่องและสร้างการจัดสรรภาระงานในเซิร์ฟเวอร์ดังกล่าว ดูตัวอย่างเซิร์ฟเวอร์เป้าหมายการโทรในส่วนตัวอย่าง โปรดดูเพิ่มเติมที่การจัดสรรภาระงานในเซิร์ฟเวอร์แบ็กเอนด์ นอกจากนี้ โปรดดูโพสต์ชุมชนนี้ที่กล่าวถึงวิธีเรียกเซิร์ฟเวอร์เป้าหมายจากทั้งนโยบายคำขอราคาเสนอบริการและการใช้กฎเส้นทาง

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

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

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

หากต้องการระบุเป้าหมายเพิ่มเติม ให้ใช้องค์ประกอบ <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, เนื้อหาข้อความ หรือบริบทโฟลว์ ตัวแปรโฟลว์ที่กำหนดไว้ล่วงหน้าต่อไปนี้จะพร้อมใช้งานหลังจากนโยบายคำขอราคาเสนอบริการทำงาน ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรโฟลว์ได้ที่ข้อมูลอ้างอิงตัวแปร

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

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

ต่อไปนี้เป็นตัวอย่างการได้รับคําขอคำขอราคาเสนอบริการและส่วนหัวการตอบกลับที่คล้ายกับวิธีที่คุณจะได้รับส่วนหัวจากคําขอและการตอบกลับหลัก

calloutResponse.header.HeaderName

myRequest.header.HeaderName

โดยที่ calloutResponse เป็นชื่อตัวแปรสําหรับการตอบกลับในข้อความไฮไลต์บริการ และ myRequest เป็นชื่อตัวแปรสําหรับคําขอ เช่น

calloutResponse.header.Content-Length

จะแสดงส่วนหัวความยาวเนื้อหาของการตอบกลับคำขอราคาเสนอบริการ

ขอบเขต: จากการส่งต่อคำขอราคาเสนอบริการ
ประเภท: สตริง
สิทธิ์: อ่าน/เขียน

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

servicecallout.requesturi

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

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

servicecallout.{policy-name}.target.url

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

URL เป้าหมายสำหรับคำขอราคาเสนอบริการ

calloutResponse.content

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

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

เนื้อหาการตอบสนองจากคำขอราคาเสนอบริการ

servicecallout.{policy-name}.expectedcn

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

ชื่อทั่วไปที่คาดไว้ของ TargetEndpoint ตามที่ระบุไว้ในนโยบาย ServiceGCDS ซึ่งจะมีความหมายก็ต่อเมื่อ TargetEndpoint อ้างถึงปลายทาง TLS/SSL เท่านั้น

servicecallout.{policy-name}.failed

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

บูลีนที่ระบุว่านโยบายสำเร็จ เท็จ หรือล้มเหลว จริง

ข้อผิดพลาด

ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ 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>

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