นโยบาย assignMessage

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

อะไร

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

  • เพิ่มพารามิเตอร์แบบฟอร์ม ส่วนหัว หรือพารามิเตอร์การค้นหาใหม่ลงในข้อความ
  • คัดลอกพร็อพเพอร์ตี้ที่มีอยู่จากข้อความหนึ่งไปยังอีกข้อความหนึ่ง
  • นําส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์แบบฟอร์ม และ/หรือเพย์โหลดข้อความออกจากข้อความ
  • ตั้งค่าค่าของพร็อพเพอร์ตี้ที่มีอยู่ในข้อความ

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

นโยบาย AssignMessage สร้างหรือเปลี่ยนแปลงตัวแปรของโฟลว์ได้ด้วยองค์ประกอบย่อยต่อไปนี้

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

กำหนดนโยบาย AssignMessage

ค่าเริ่มต้น ดูแท็บนโยบายเริ่มต้นด้านล่าง
ต้องระบุหรือไม่ ต้องระบุ
ประเภท วัตถุที่ซับซ้อน
องค์ประกอบหลัก ไม่มี
องค์ประกอบย่อย <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

องค์ประกอบ <AssignMessage> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

องค์ประกอบ <AssignMessage> ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

นโยบายเริ่มต้น

ตัวอย่างต่อไปนี้แสดงการตั้งค่าเริ่มต้นเมื่อคุณเพิ่มนโยบาย AssignMessage ลงในโฟลว์ใน UI ของ Edge

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

เมื่อคุณแทรกนโยบาย AssignMessage ใหม่ใน UI ของ Edge เทมเพลตจะมีสแต็บสําหรับการดำเนินการที่เป็นไปได้ทั้งหมด โดยปกติแล้ว คุณจะต้องเลือกการดำเนินการที่ต้องการทำกับนโยบายนี้ และนำองค์ประกอบย่อยที่เหลือออก เช่น หากต้องการดำเนินการคัดลอก ให้ใช้องค์ประกอบ <Copy> และนำ <Add>, <Remove> และองค์ประกอบย่อยอื่นๆ ออกจากนโยบายเพื่อให้อ่านได้ง่ายขึ้น

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

แอตทริบิวต์ ค่าเริ่มต้น จําเป็นไหม คำอธิบาย
name ไม่มีข้อมูล จำเป็น

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

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

continueOnError เท็จ ไม่บังคับ ตั้งค่าเป็น "false" เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทํางานที่คาดหวังตามนโยบายส่วนใหญ่ ตั้งค่าเป็น "จริง" เพื่อดําเนินการโฟลว์ข้อมูลต่อไป แม้ว่านโยบายจะล้มเหลวก็ตาม
enabled จริง ไม่บังคับ ตั้งค่าเป็น "true" เพื่อบังคับใช้นโยบาย ตั้งค่าเป็น "false" เพื่อ "ปิด" นโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังคงแนบไปกับโฟลว์
async   เท็จ เลิกใช้ แอตทริบิวต์นี้เลิกใช้งานแล้ว

ตารางต่อไปนี้แสดงคำอธิบายระดับสูงขององค์ประกอบย่อยของ <AssignMessage>

องค์ประกอบย่อย จำเป็นหรือไม่ คำอธิบาย
การดำเนินการทั่วไป
<Add> ไม่บังคับ เพิ่มข้อมูลลงในออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ <AssignTo>

<Add> เพิ่มส่วนหัวหรือพารามิเตอร์ลงในข้อความที่ไม่มีอยู่ในข้อความต้นฉบับ หากต้องการเขียนทับส่วนหัวหรือพารามิเตอร์ที่มีอยู่ ให้ใช้องค์ประกอบ <Set>

<Copy> ไม่บังคับ คัดลอกข้อมูลจากข้อความที่ระบุโดยแอตทริบิวต์ source ไปยังออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ <AssignTo>
<Remove> ไม่บังคับ ลบองค์ประกอบที่ระบุออกจากตัวแปรข้อความที่ระบุไว้ในองค์ประกอบ <AssignTo>
<Set> ไม่บังคับ แทนที่ค่าของพร็อพเพอร์ตี้ที่มีอยู่ในคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>

<Set> จะเขียนทับส่วนหัวหรือพารามิเตอร์ที่มีอยู่แล้วในข้อความต้นฉบับ หากต้องการเพิ่มส่วนหัวหรือพารามิเตอร์ใหม่ ให้ใช้องค์ประกอบ <Add>

องค์ประกอบย่อยอื่นๆ
<AssignTo> ไม่บังคับ ระบุข้อความที่นโยบาย AssignMessage ทำงานด้วย ซึ่งอาจเป็นคำขอหรือคำตอบมาตรฐาน หรือจะเป็นข้อความใหม่ที่กำหนดเองก็ได้
<AssignVariable> ไม่บังคับ กําหนดค่าให้กับตัวแปรการไหล หากไม่มีตัวแปร <AssignVariable> จะสร้างตัวแปรนั้น
<IgnoreUnresolvedVariables> ไม่บังคับ กำหนดว่าระบบจะหยุดการประมวลผลเมื่อพบตัวแปรที่ยังไม่ได้รับการแก้ไขหรือไม่

เราได้อธิบายองค์ประกอบย่อยเหล่านี้แต่ละรายการไว้ในส่วนถัดไป

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีใช้นโยบาย AssignMessage บางส่วน

1: เพิ่มส่วนหัว

ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัวลงในคําขอด้วยองค์ประกอบ <Add>

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: นำเพย์โหลดออก

ตัวอย่างต่อไปนี้จะลบเพย์โหลดจากการตอบกลับด้วยองค์ประกอบ <Remove>

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3: แก้ไขคำตอบ

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

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

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

เนื่องจากตัวอย่างนี้ไม่ได้ระบุชื่อตัวแปรในองค์ประกอบ <AssignTo> และระบุ type เป็น "response" นโยบายนี้จะแก้ไขออบเจ็กต์การตอบกลับที่เซิร์ฟเวอร์เป้าหมายแสดง

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

4: ตั้งค่าเนื้อหาแบบไดนามิก

คุณสามารถใช้ Assign Message เพื่อฝังเนื้อหาแบบไดนามิกในเพย์โหลดของข้อความตอบกลับและข้อความขอ

หากต้องการฝังตัวแปรของ Edge Flow ในเพย์โหลด XML ให้ใช้วงเล็บปีกกาครอบตัวแปรที่กําหนด ดังนี้ {prefix.name}

ตัวอย่างต่อไปนี้ฝังค่าของuser-agentตัวแปรโฟลว์ส่วนหัว HTTP ในองค์ประกอบ XML ชื่อ User-agent

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

สําหรับเพย์โหลด JSON คุณสามารถแทรกตัวแปรได้โดยใช้แอตทริบิวต์ variablePrefix และ variableSuffix ที่มีอักขระตัวคั่น ดังที่แสดงในตัวอย่างต่อไปนี้

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

ดูรายการตัวแปรของโฟลว์ทั้งหมดได้ที่ข้อมูลอ้างอิงเกี่ยวกับตัวแปรของโฟลว์

คุณสามารถใส่ตัวแปรโดยใช้วงเล็บปีกกาได้เช่นกันในรุ่น 16.08.17 ของเวอร์ชันระบบคลาวด์

5: นําพารามิเตอร์การค้นหาออก

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์การค้นหา apikey ออกจากคําขอ

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

6: ตั้งค่า/รับตัวแปร

ตัวอย่างต่อไปนี้ใช้นโยบาย Assign Message 3 รายการ

  1. สร้างตัวแปรการไหล 3 รายการในคําขอซึ่งมีค่าคงที่
  2. รับตัวแปรของขั้นตอนแบบไดนามิกในนโยบายที่ 2 ในขั้นตอนการส่งคำขอ
  3. ตั้งค่าในเพย์โหลดของการตอบกลับ
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ในนโยบายแรก องค์ประกอบ <AssignVariable> จะสร้างและตั้งค่าตัวแปร 3 รายการในคําขอ องค์ประกอบ <Name> แต่ละรายการจะระบุชื่อตัวแปร และ <Value> จะระบุค่า

นโยบายที่ 2 ใช้องค์ประกอบ <AssignVariable> เพื่ออ่านค่าและสร้างตัวแปรใหม่ 3 รายการ ดังนี้

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

ในนโยบายที่ 2 องค์ประกอบ <Ref> จะอ้างอิงตัวแปรต้นทาง และองค์ประกอบ <Name> จะระบุชื่อของตัวแปรใหม่ หากเข้าถึงตัวแปรที่อ้างอิงโดยองค์ประกอบ <Ref> ไม่ได้ คุณจะใช้ค่าที่ระบุโดยองค์ประกอบ <Value> ได้

วิธีลองใช้ชุดนโยบายนี้

  1. เพิ่มนโยบาย #1 และ #2 ลงในขั้นตอนการขอ อย่าลืมใส่นโยบาย #1 ก่อนนโยบาย #2
  2. เพิ่มนโยบายที่ 3 ในขั้นตอนการตอบกลับ
  3. นโยบายที่ 3 ใช้องค์ประกอบ <Set> เพื่อเพิ่มตัวแปรลงในคำตอบ ตัวอย่างต่อไปนี้สร้างเพย์โหลด XML ในการตอบกลับที่ Edge ส่งกลับไปยังไคลเอ็นต์
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>

    โปรดทราบว่าไวยากรณ์ในการเข้าถึงตัวแปรการไหลใน <Set> คือการห่อตัวแปรเหล่านั้นในวงเล็บปีกกา

    อย่าลืมตั้งค่าแอตทริบิวต์ contentType ขององค์ประกอบ <Payload> เป็น "application/xml"

  4. ส่งคําขอไปยังพร็อกซี API เช่น
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    คุณอาจส่งผลลัพธ์ผ่านยูทิลิตี เช่น xmllint เพื่อให้ XML แสดงในรูปแบบที่มีการจัดรูปแบบอย่างดี ดังนี้

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    เนื้อความของการตอบกลับควรมีลักษณะดังต่อไปนี้

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7: รับส่วนหัวการตอบกลับของข้อความไฮไลต์บริการ

ในตัวอย่างต่อไปนี้ สมมติว่านโยบาย ServiceCallout อยู่ในคําขอพร็อกซี API และคำตอบของข้อความไฮไลต์มีส่วนหัวหลายรายการที่มีชื่อเดียวกัน (Set-Cookie) สมมติว่าตัวแปรคำตอบของข้อความไฮไลต์คือcalloutResponseเริ่มต้น นโยบายต่อไปนี้จะได้รับค่าส่วนหัว Set-Cookie ที่ 2

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

หากต้องการแสดงค่าส่วนหัวทั้งหมด ให้ใช้ตัวแปรต่อไปนี้แทน

{calloutResponse.header.Set-Cookie.values}

องค์ประกอบย่อยแต่ละรายการในข้อมูลอ้างอิงนี้มีตัวอย่างเพิ่มเติม ดูตัวอย่างเพิ่มเติมได้ในส่วนตัวอย่าง AssignMessage ใน GitHub

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

ส่วนนี้จะอธิบายองค์ประกอบย่อยของ <AssignMessage>

<Add>

เพิ่มข้อมูลลงในคําขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>

องค์ประกอบ <Add> จะเพิ่มพร็อพเพอร์ตี้ใหม่ในข้อความที่ไม่มีอยู่ในข้อความต้นฉบับ หากต้องการเปลี่ยนค่าของพร็อพเพอร์ตี้ที่มีอยู่ ให้ใช้องค์ประกอบ <Set>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท ประเภทคอมเพล็กซ์
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย <FormParams>
<Headers>
<QueryParams>

องค์ประกอบ <Add> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <FormParams> เพื่อรับค่าของพารามิเตอร์สตริงการค้นหา 3 รายการจากคำขอเริ่มต้น และตั้งค่าเป็นพารามิเตอร์แบบฟอร์มในคำขอปลายทางเป้าหมาย

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <Headers> เพื่อเพิ่มส่วนหัว User-Agent ลงในคําขอปลายทางเป้าหมาย

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <QueryParams> เพื่อเพิ่มพารามิเตอร์การค้นหารายการเดียวที่มีค่าแบบคงที่ลงในคําขอ

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างนี้ใช้ <Add> ในขั้นตอนการส่งคำขอล่วงหน้า หากคุณดูผลลัพธ์ในเครื่องมือ เช่น เครื่องมือติดตาม คำขอ "http://httpbin.org/get" จะเปลี่ยนเป็น "http://httpbin.org/get?myParam=42"

องค์ประกอบย่อยของ <Add> รองรับการแทนที่สตริงแบบไดนามิกหรือที่เรียกว่าเทมเพลตข้อความ

<FormParams> (รายการย่อยของ <Add>)

เพิ่มพารามิเตอร์แบบฟอร์มใหม่ลงในข้อความคําขอ องค์ประกอบนี้ไม่มีผลต่อข้อความตอบกลับ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <FormParam>
องค์ประกอบหลัก <Add>
องค์ประกอบย่อย <FormParam>

องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์แบบฟอร์มรายการเดียว ("answer") และค่าคงที่ ("42") ลงในคําขอ

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

ตัวอย่างที่ 2

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

โปรดทราบว่าตัวอย่างนี้ไม่ได้ระบุเป้าหมายด้วย <AssignTo> นโยบายนี้จะเพิ่มพารามิเตอร์ลงในคําขอเท่านั้น

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์แบบฟอร์มหลายรายการลงในคําขอ

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

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

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

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

คุณจะใช้ <FormParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: POST
  • ประเภทข้อความ: คำขอ
  • รายการใดรายการหนึ่ง (หรือทั้ง 2 รายการ) ต่อไปนี้
    • ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่งหรือ "" (สตริงว่างเปล่า) เช่น หากใช้ curl ให้เพิ่ม -d "" ลงในคำขอ
    • ส่วนหัว Content-Length: ตั้งค่าเป็น 0 (หากคำขอต้นฉบับไม่มีข้อมูล มิเช่นนั้นจะเป็นความยาวปัจจุบันเป็นไบต์) ตัวอย่างเช่น หากใช้ curl ให้เพิ่ม -H "Content-Length: 0" ลงในคำขอ

เช่น

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

เมื่อคุณเพิ่ม <FormParams> แล้ว Edge จะตั้งค่าส่วนหัว Content-Type ของคำขอเป็น "application/x-www-form-urlencoded" ก่อนส่งข้อความไปยังบริการเป้าหมาย

<Headers> (รายการย่อยของ <Add>)

เพิ่มส่วนหัวใหม่ในคำขอหรือคำตอบที่ระบุ ซึ่งระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <Header>
องค์ประกอบหลัก <Add>
องค์ประกอบย่อย <Header>

องค์ประกอบ <Headers> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัว user-agent ลงในข้อความคําขอ และกำหนดค่าของตัวแปรโฟลว์ request.user.agent ให้กับส่วนหัวนั้น

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (รายการย่อยของ <Add>)

เพิ่มพารามิเตอร์การค้นหาใหม่ลงในคําขอ องค์ประกอบนี้ไม่มีผลต่อคำตอบ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <QueryParam>
องค์ประกอบหลัก <Add>
องค์ประกอบย่อย <QueryParam>

องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะเพิ่มพารามิเตอร์การค้นหา "myParam" ลงในคําขอและกําหนดค่า "42" ให้กับพารามิเตอร์ดังกล่าว

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: GET
  • ประเภทข้อความ: คำขอ

นอกจากนี้ คุณตั้งค่าพารามิเตอร์การค้นหาได้ก็ต่อเมื่อแอตทริบิวต์ type ขององค์ประกอบ <AssignTo> เป็นข้อความคำขอเท่านั้น การตั้งค่าในคำตอบจะไม่มีผล

หากคุณกําหนดอาร์เรย์พารามิเตอร์การค้นหาว่างเปล่าในนโยบาย (<Add><QueryParams/></Add>) นโยบายจะไม่เพิ่มพารามิเตอร์การค้นหาใดๆ ซึ่งจะเหมือนกับการละเว้น <QueryParams>

<AssignTo>

กำหนดออบเจ็กต์ที่นโยบาย AssignMessage จะทำงานด้วย ตัวเลือกมีดังนี้

  • ข้อความคําขอ: request ที่พร็อกซี API ได้รับ
  • ข้อความตอบกลับ: response ที่แสดงผลจากเซิร์ฟเวอร์เป้าหมาย
  • ข้อความที่กําหนดเอง: คําขอหรือออบเจ็กต์การตอบกลับที่กําหนดเอง

โปรดทราบว่าในบางกรณี คุณจะเปลี่ยนออบเจ็กต์ที่นโยบาย AssignMessage มีผลไม่ได้ เช่น คุณไม่สามารถใช้ <Add> หรือ <Set> เพื่อเพิ่มหรือเปลี่ยนพารามิเตอร์การค้นหา (<QueryParams>) หรือพารามิเตอร์แบบฟอร์ม (<FormParams>) ในคำตอบ คุณทำได้เพียงจัดการพารามิเตอร์การค้นหาและพารามิเตอร์แบบฟอร์มในคําขอ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย ไม่มี

หากคุณไม่ได้ระบุ <AssignTo> นโยบายจะดำเนินการกับคำขอหรือคำตอบเริ่มต้น ซึ่งขึ้นอยู่กับตำแหน่งที่นโยบายทำงาน หากนโยบายทำงานในขั้นตอนการส่งคำขอ ก็จะส่งผลต่อข้อความคำขอ หากมีการเรียกใช้ในขั้นตอนการตอบกลับ นโยบายจะมีผลกับการตอบกลับโดยค่าเริ่มต้น

องค์ประกอบ <AssignTo> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

ตัวอย่างที่ 1

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

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

การตั้งค่า createNew เป็น "เท็จ" (ค่าเริ่มต้น) จะทำให้ตัวอย่างนี้ไม่สร้างคำขอใหม่ การดำเนินการทั้งหมดในนโยบายนี้จะส่งผลต่อคำขอเดิม

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอใหม่

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

เมื่อคุณสร้างออบเจ็กต์คำขอหรือคำตอบใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>, <Set> และ <Set>) จะดำเนินการกับออบเจ็กต์คำขอใหม่นั้น

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

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอใหม่ชื่อ "MyRequestObject"

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

เมื่อคุณสร้างออบเจ็กต์คำขอหรือคำตอบใหม่ องค์ประกอบอื่นๆ ของนโยบาย AssignMessage (เช่น <Add>, <Set> และ <Set>) จะดำเนินการกับออบเจ็กต์คำขอใหม่นั้น

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

ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <AssignTo>

แอตทริบิวต์ คำอธิบาย จำเป็นหรือไม่ ประเภท
createNew

กำหนดว่านโยบายนี้จะสร้างข้อความใหม่เมื่อกําหนดค่าหรือไม่

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

หากเป็น "เท็จ" นโยบายจะตอบสนองด้วยวิธีใดวิธีหนึ่งต่อไปนี้

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

หากไม่ได้ระบุ createNew นโยบายจะตอบสนองด้วยวิธีใดวิธีหนึ่งต่อไปนี้

  • หาก <AssignTo> แสดงผลเป็นข้อความ ระบบจะประมวลผลต่อไปยังขั้นตอนถัดไป
  • หากไม่สามารถแก้ไข <AssignTo> หรือแก้ไขเป็นประเภทที่ไม่ใช่ข้อความ ระบบจะสร้างตัวแปรใหม่ตามประเภทที่ระบุใน type
ไม่บังคับ บูลีน
transport

ระบุประเภทการรับส่งสำหรับประเภทข้อความคำขอหรือคำตอบ

ค่าเริ่มต้นคือ "http" (ค่าที่รองรับเพียงค่าเดียว)

ไม่บังคับ สตริง
type ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "true" ค่าที่ใช้ได้มีดังนี้ "request" หรือ "response"

ค่าเริ่มต้นคือ "request" หากคุณละเว้นแอตทริบิวต์นี้ Edge จะสร้างคำขอหรือคำตอบ โดยขึ้นอยู่กับว่านโยบายนี้จะทำงานที่ใดในขั้นตอน

ไม่บังคับ สตริง

<AssignVariable>

กําหนดค่าให้กับตัวแปรโฟลว์ปลายทาง (เช่น ตัวแปรที่มีค่ากําหนดโดยนโยบาย AssignMessage) หากไม่มีตัวแปรโฟลว์ <AssignVariable> จะสร้างตัวแปรนั้น

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท ประเภทคอมเพล็กซ์
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย <Name> (ต้องระบุ)
<Ref>
<Template>
<Value>

ค่าที่คุณกําหนดให้กับตัวแปรการไหลปลายทางอาจเป็นค่าใดค่าหนึ่งต่อไปนี้

  • สตริงตามตัวอักษร: ใช้องค์ประกอบย่อย <Value> เพื่อระบุค่าสตริงตามตัวอักษรสําหรับตัวแปรการไหลปลายทาง
  • ตัวแปรการไหล: ใช้องค์ประกอบย่อย <Ref> เพื่อระบุค่าของตัวแปรการไหลที่มีอยู่สําหรับตัวแปรการไหลปลายทาง ดูรายการตัวแปรของโฟลว์ทั้งหมดที่สามารถใช้เป็นแหล่งที่มาได้ที่ข้อมูลอ้างอิงตัวแปรของโฟลว์
  • เทมเพลตข้อความ: ใช้องค์ประกอบย่อย <Template> เพื่อระบุเทมเพลตข้อความสําหรับตัวแปรขั้นตอนปลายทาง

องค์ประกอบ <AssignVariable> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

ใช้องค์ประกอบ <Ref> เพื่อระบุตัวแปรแหล่งที่มา หากเข้าถึงตัวแปรที่ <Ref> อ้างอิงไม่ได้ Edge จะใช้ค่าที่ระบุโดยองค์ประกอบ <Value> หากคุณกําหนด <Template> องค์ประกอบดังกล่าวจะมีลําดับความสําคัญเหนือกว่าองค์ประกอบย่อยอื่นๆ

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าของตัวแปรใหม่ myvar เป็นค่า "42"

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้กําหนดค่าของตัวแปรการไหล request.header.user-agent ให้กับตัวแปรการไหลปลายทาง myvar และค่าของพารามิเตอร์การค้นหา country ให้กับตัวแปรการไหลปลายทาง Country

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

หากการกําหนดค่าใดค่าหนึ่งไม่สําเร็จ Edge จะกําหนดค่า "ErrorOnCopy" ให้กับตัวแปรโฟลว์ปลายทางแทน

หากไม่มีตัวแปรการไหล myvar หรือ Country <AssignVariable> จะสร้างตัวแปรเหล่านั้น

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้ใช้องค์ประกอบย่อย <Template> เพื่อต่อตัวแปรบริบท 2 รายการเข้าด้วยกันโดยมีสตริงตัวอักษร (ขีดกลาง) คั่นไว้

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

การใช้งานทั่วไปของ <AssignVariable> คือการตั้งค่าเริ่มต้นสําหรับพารามิเตอร์การค้นหา ส่วนหัว หรือค่าอื่นๆ ที่ส่งไปพร้อมกับคําขอได้ ซึ่งทำได้โดยใช้ทั้งองค์ประกอบย่อย <Ref> และ <Value> ร่วมกัน ดูข้อมูลเพิ่มเติมได้จากตัวอย่างของ <Ref>

<Name> (รายการย่อยของ <AssignVariable>)

ระบุชื่อตัวแปรของโฟลว์ปลายทาง (เช่น ตัวแปรที่มีค่ากำหนดโดยนโยบาย AssignMessage) หากไม่มีตัวแปรที่มีชื่อใน <AssignVariable> นโยบายจะสร้างตัวแปรที่มีชื่อดังกล่าว

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ต้องระบุ
ประเภท สตริง
องค์ประกอบหลัก <AssignVariable>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Name> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ระบุตัวแปรปลายทางเป็น myvar และตั้งค่าเป็นค่า "42"

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

หาก myvar ไม่มีอยู่ <AssignVariable> จะสร้าง myvar

<Ref> (รายการย่อยของ <AssignVariable>)

ระบุแหล่งที่มาของการมอบหมายเป็นตัวแปรโฟลว์ ตัวแปรการไหลอาจเป็นตัวแปรการไหลที่กําหนดไว้ล่วงหน้า (ตามที่ระบุไว้ในข้อมูลอ้างอิงตัวแปรการไหล) หรือตัวแปรการไหลที่กําหนดเองซึ่งคุณสร้างขึ้น

ระบบจะตีความค่าของ <Ref> เป็นตัวแปรการไหลเสมอ คุณไม่สามารถระบุสตริงที่เป็นตัวอักษรล้วนเป็นค่าได้ หากต้องการกําหนดค่าสตริงตามตัวอักษร ให้ใช้องค์ประกอบ <Value> แทน

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <AssignVariable>
องค์ประกอบย่อย ไม่มี

เมื่อคุณระบุตัวแปรการไหลด้วย <Ref> ให้ละเว้นวงเล็บ "{}" ที่ปกติจะใช้อ้างอิงตัวแปรการไหล ตัวอย่างเช่น หากต้องการตั้งค่าของตัวแปรใหม่เป็นค่าของตัวแปร client.host ขั้นตอนมีดังนี้

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

หากต้องการกําหนดค่าเริ่มต้นสําหรับตัวแปรของขั้นตอนปลายทาง ให้ใช้ <Value> ร่วมกับ <Ref> หากตัวแปรการไหลที่ระบุโดย <Ref> ไม่มีอยู่ ไม่สามารถอ่านได้ หรือเป็นค่า Null Edge จะกําหนดค่า <Value> ให้กับตัวแปรการไหลปลายทางแทน

องค์ประกอบ <Ref> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้กําหนดค่าของตัวแปรขั้นตอน request.header.user-agent ให้กับตัวแปรขั้นตอนปลายทาง myvar และค่าของพารามิเตอร์การค้นหา country ให้กับตัวแปร Country

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

ในตัวอย่างนี้ Edge ไม่ได้ระบุค่าเริ่มต้น (หรือค่าสำรอง) สำหรับตัวแปรใดตัวแปรหนึ่ง

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้กําหนดค่าของตัวแปรการไหล request.header.user-agent ให้ตัวแปรการไหลปลายทาง myvar และค่าของพารามิเตอร์การค้นหา country ให้ตัวแปร Country

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

ในตัวอย่างนี้ หากค่าของตัวแปรโฟลว์ request.header.user-agent หรือพารามิเตอร์การค้นหา Country เป็นค่าว่าง ไม่สามารถอ่านได้ หรือมีรูปแบบไม่ถูกต้อง Edge จะกําหนดค่า "ErrorOnCopy" ให้กับตัวแปรใหม่

ตัวอย่างที่ 3

กรณีการใช้งานทั่วไปของ <AssignVariable> คือการตั้งค่าเริ่มต้นของพารามิเตอร์การค้นหา ส่วนหัว หรือค่าอื่นๆ ที่ส่งพร้อมกับคําขอได้ ตัวอย่างเช่น คุณสร้างพร็อกซีของ API สภาพอากาศที่คำขอใช้พารามิเตอร์การค้นหารายการเดียวชื่อ "w" พารามิเตอร์นี้มีรหัสของเมืองที่คุณต้องการทราบสภาพอากาศ URL คำขอมีรูปแบบดังนี้

http://myCO.com/v1/weather/forecastrss?w=city_ID

หากต้องการกําหนดค่าเริ่มต้นสําหรับ "w" ให้สร้างนโยบาย AssignMessage ดังนี้

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

ในตัวอย่างนี้ <AssignVariable> จะรับค่าของ request.queryparam.w และกำหนดค่านั้นให้กับตัวเอง หากตัวแปรการไหลเป็นค่า Null ซึ่งหมายความว่ามีการละเว้นพารามิเตอร์การค้นหา "w" จากคําขอ ตัวอย่างนี้จะใช้ค่าเริ่มต้นจากองค์ประกอบ <Value> คุณจึงส่งคําขอไปยังพร็อกซี API นี้ซึ่งไม่ใส่พารามิเตอร์การค้นหา "w" ได้

http://myCO.com/v1/weather/forecastrss

...และยังคงให้พร็อกซี API แสดงผลลัพธ์ที่ถูกต้อง

ค่าของ <Ref> ต้องเป็นตัวแปรการไหล เช่น พร็อพเพอร์ตี้ของออบเจ็กต์ request, response หรือ target ซึ่งแตกต่างจากเมื่อใช้ <Value> ค่าอาจเป็นตัวแปรการไหลที่กำหนดเองที่คุณสร้างขึ้นได้เช่นกัน

หากคุณระบุตัวแปรการไหลที่ไม่มีอยู่สำหรับค่าของ <Ref> และค่าของ <IgnoreUnresolvedVariables> คือ "จริง" Edge จะแสดงข้อผิดพลาด

<Template> (รายการย่อยของ <AssignVariable>)

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

ใช้แอตทริบิวต์ ref เพื่อระบุตัวแปรการไหลซึ่งค่าของตัวแปรคือเทมเพลตข้อความ ตัวอย่างเช่น คุณสามารถจัดเก็บเทมเพลตข้อความเป็นแอตทริบิวต์ที่กำหนดเองในแอปของนักพัฒนาแอป เมื่อ Edge ระบุแอปของนักพัฒนาแอปหลังจากยืนยันคีย์ API หรือโทเค็นความปลอดภัย (ผ่านนโยบายเพิ่มเติม) องค์ประกอบ <AssignVariable> จะใช้เทมเพลตข้อความจากแอตทริบิวต์ที่กำหนดเองของแอปได้ ซึ่งพร้อมใช้งานเป็นตัวแปรโฟลว์จากนโยบายความปลอดภัย ตัวอย่างต่อไปนี้จะถือว่าเทมเพลตข้อความมีอยู่ในแอตทริบิวต์ลูกค้าชื่อ message_template ในแอปของนักพัฒนาแอปที่เรียกใช้ API ซึ่งใช้นโยบาย VerifyAPIKey เพื่อยืนยันคีย์ API ของแอป

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <AssignVariable>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Template> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ใช้ไวยากรณ์เทมเพลตข้อความเพื่อต่อตัวแปรบริบท 2 รายการเข้าด้วยกันโดยมีสตริงตามตัวอักษร (ขีดกลาง) คั่นไว้

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 2

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

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้จะระบุตัวแปรการไหลและค่าข้อความ ในกรณีนี้ หากตัวแปรที่อ้างอิงไม่ใช่ค่า Null ระบบจะใช้ค่านั้นเป็นแทมเพลต หากค่าที่อ้างอิงเป็นค่า Null ระบบจะใช้ค่าข้อความ (ในกรณีนี้คือ {system.uuid}-{messageid}) เป็นเทมเพลต รูปแบบนี้มีประโยชน์ในการระบุค่า "ลบล้าง" ซึ่งในบางกรณีคุณต้องการลบล้างเทมเพลตเริ่มต้น (ส่วนข้อความ) ด้วยค่าที่ตั้งค่าแบบไดนามิก ตัวอย่างเช่น คำสั่งแบบมีเงื่อนไขอาจดึงค่าจากแผนที่คีย์-ค่าและตั้งค่าตัวแปรที่อ้างอิงเป็นค่านั้น

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (รายการย่อยของ <AssignVariable>)

กําหนดค่าของตัวแปรการไหลปลายทางที่ตั้งค่าด้วย <AssignVariable> ระบบจะตีความค่าเป็นสตริงตามตัวอักษรเสมอ คุณไม่สามารถใช้ตัวแปรการไหลเป็นค่าได้ แม้ว่าจะใส่ค่าไว้ในวงเล็บ ("{}") ก็ตาม หากต้องการใช้ตัวแปรการไหล ให้ใช้ <Ref> แทน

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <AssignVariable>
องค์ประกอบย่อย ไม่มี

เมื่อใช้ร่วมกับองค์ประกอบ <Ref> <Value> จะทำหน้าที่เป็นค่าเริ่มต้น (หรือค่าสำรอง) หากไม่ได้ระบุ <Ref> หรือไม่แก้ไขได้ หรือเป็นค่าว่าง ระบบจะใช้ค่าของ <Value>

องค์ประกอบ <Value> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าตัวแปรของขั้นตอนปลายทาง myvar เป็นค่า "42"

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้กําหนดค่าของตัวแปรการไหล request.header.user-agent ให้กับตัวแปรการไหล myvar และค่าของพารามิเตอร์การค้นหา country ให้กับตัวแปร Country

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

หากการกําหนดค่าใดไม่สําเร็จ <AssignVariable> จะกําหนดค่า "ErrorOnCopy" ให้กับตัวแปรการไหลปลายทางแทน

<Copy>

คัดลอกค่าจากข้อความที่ระบุโดยแอตทริบิวต์ source ไปยังข้อความที่ระบุโดยองค์ประกอบ <AssignTo> หากคุณไม่ได้ระบุเป้าหมายด้วย <AssignTo> นโยบายนี้จะคัดลอกค่าไปยังคำขอหรือคำตอบ ทั้งนี้ขึ้นอยู่กับตำแหน่งในขั้นตอนที่นโยบายนี้ทำงาน

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

องค์ประกอบ <Copy> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะคัดลอกส่วนหัว พารามิเตอร์แบบฟอร์ม 3 รายการ เส้นทาง และแอตทริบิวต์การค้นหาทั้งหมดจากคําขอไปยังคําขอใหม่ที่กำหนดเอง

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

องค์ประกอบ <Copy> มีแอตทริบิวต์ต่อไปนี้

แอตทริบิวต์ คำอธิบาย จำเป็นหรือไม่ ประเภท
source

ระบุออบเจ็กต์ต้นทางของสำเนา

  • หากไม่ได้ระบุ source ระบบจะถือว่าข้อความเป็นข้อความธรรมดา ตัวอย่างเช่น หากนโยบายอยู่ในขั้นตอนการส่งคําขอ แหล่งที่มาจะเป็นออบเจ็กต์ request โดยค่าเริ่มต้น หากนโยบายอยู่ในขั้นตอนการตอบกลับ ระบบจะตั้งค่าเริ่มต้นเป็นออบเจ็กต์ response หากละเว้น source คุณจะใช้การอ้างอิงแบบสัมบูรณ์ไปยังตัวแปรการไหลเป็นแหล่งที่มาของข้อความได้ เช่น ระบุค่าเป็น {request.header.user-agent}
  • หากไม่สามารถแก้ไขตัวแปรต้นทางหรือแก้ไขเป็นประเภทที่ไม่ใช่ข้อความ <Copy> จะตอบกลับไม่ได้
ไม่บังคับ สตริง

<FormParams> (รายการย่อยของ <Copy>)

คัดลอกพารามิเตอร์แบบฟอร์มจากคําขอที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังคําขอที่ระบุโดยองค์ประกอบ <AssignTo> องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <FormParam> หรืออาร์เรย์ว่าง
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย <FormParam>

องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์แบบฟอร์มรายการเดียวจากคําขอไปยังคําขอที่กําหนดเอง "MyCustomRequest"

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์แบบฟอร์มทั้งหมดไปยังคําขอที่กําหนดเอง "MyCustomRequest"

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์แบบฟอร์ม 3 รายการไปยังคําขอที่กําหนดเอง "MyCustomRequest"

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่าง 4

หากมีพารามิเตอร์แบบฟอร์มหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างนี้จะคัดลอก "f1", "f2" และค่าที่ 2 ของ "f3" หาก "f3" มีเพียงค่าเดียว ระบบจะไม่คัดลอกค่านั้น

คุณจะใช้ <FormParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: POST
  • ประเภทข้อความ: การตอบกลับ
  • รายการใดรายการหนึ่ง (หรือทั้ง 2 รายการ) ต่อไปนี้
    • ข้อมูลแบบฟอร์ม: ตั้งค่าเป็นค่าใดค่าหนึ่งหรือ "" (สตริงว่างเปล่า) เช่น หากใช้ curl ให้เพิ่ม -d "" ลงในคำขอ
    • ส่วนหัว Content-Length: ตั้งค่าเป็น 0 (หากคำขอต้นฉบับไม่มีข้อมูล) หรือเป็นความยาวปัจจุบัน ตัวอย่างเช่น หากใช้ curl ให้เพิ่ม -H "Content-Length: 0" ลงในคำขอ

เมื่อคุณคัดลอก <FormParams> <Copy> จะตั้งค่า Content-Type ของข้อความเป็น "application/x-www-form-urlencoded" ก่อนส่งข้อความไปยังบริการเป้าหมาย

<Headers> (รายการย่อยของ <Copy>)

คัดลอกส่วนหัว HTTP จากข้อความคําขอหรือข้อความตอบกลับที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความคําขอหรือข้อความตอบกลับที่ระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <Header> หรืออาร์เรย์ว่าง
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย <Header>

องค์ประกอบ <Headers> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะคัดลอกส่วนหัว user-agent จากคําขอไปยังออบเจ็กต์คําขอใหม่ที่กำหนดเอง

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างที่ 2

หากต้องการคัดลอกส่วนหัวทั้งหมด ให้ใช้องค์ประกอบ <Headers> ที่ว่างเปล่า ดังตัวอย่างต่อไปนี้

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างที่ 3

หากมีส่วนหัวหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างนี้จะคัดลอก "h1", "h2" และค่าที่ 2 ของ "h3" หาก "h3" มีเพียงค่าเดียว ระบบจะไม่คัดลอก

<Path> (รายการย่อยของ <Copy>)

กำหนดว่าควรคัดลอกเส้นทางจากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคำตอบ

หากเป็น "จริง" นโยบายนี้จะคัดลอกเส้นทางจากข้อความคําขอที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความคําขอที่ระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Path> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

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

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

คุณจะใช้ <Path> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: คำขอ

<Payload> (รายการย่อยของ <Copy>)

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

หากเป็น "จริง" นโยบายนี้จะคัดลอกเพย์โหลดจากข้อความที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความที่ระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Payload> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ตั้งค่า <Payload> เป็น "true" เพื่อให้ระบบคัดลอกเพย์โหลดคำขอจากคำขอไปยังคำตอบ

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (รายการย่อยของ <Copy>)

คัดลอกพารามิเตอร์สตริงคําค้นหาจากคําขอที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังคําขอที่ระบุโดยองค์ประกอบ <AssignTo> องค์ประกอบนี้ไม่มีผลต่อคำตอบ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <QueryParam> หรืออาร์เรย์ว่าง
องค์ประกอบหลัก <QueryParam>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์การค้นหา "my_param" จากคำขอไปยังออบเจ็กต์คำขอที่กำหนดเองใหม่

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะคัดลอกพารามิเตอร์การค้นหาทั้งหมดจากคําขอไปยังออบเจ็กต์คําขอใหม่ที่กําหนดเอง

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างที่ 3

หากมีพารามิเตอร์การค้นหาหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

ตัวอย่างนี้จะคัดลอก "qp1", "qp2" และค่าที่ 2 ของ "qp3" หาก "qp3" มีเพียงค่าเดียว ระบบจะไม่คัดลอกค่าดังกล่าว

คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: GET
  • ประเภทข้อความ: คำขอ

<ReasonPhrase> (รายการย่อยของ <Copy>)

กำหนดว่าควรคัดลอกวลีเหตุผลจากคำตอบต้นทางไปยังคำตอบปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคําขอ

หากเป็น "จริง" นโยบายนี้จะคัดลอก ReasonPhrase จากคำตอบที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังคำตอบที่ระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <ReasonPhrase> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ตั้งค่า <ReasonPhrase> เป็น "true" ซึ่งทําให้ <Copy> koppy วลีเหตุผลจากการตอบกลับเริ่มต้นไปยังออบเจ็กต์การตอบกลับที่กําหนดเอง

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

คุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: การตอบกลับ

<StatusCode> (รายการย่อยของ <Copy>)

กำหนดว่าจะคัดลอกรหัสสถานะจากการตอบกลับของต้นทางไปยังการตอบกลับของปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคําขอ

หากเป็น "จริง" นโยบายนี้จะคัดลอกรหัสสถานะจากข้อความตอบกลับที่ระบุโดยแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังข้อความตอบกลับที่ระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <StatusCode> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ตั้งค่า <StatusCode> เป็น "true" ซึ่งจะคัดลอกรหัสสถานะจากออบเจ็กต์คำตอบเริ่มต้นไปยังออบเจ็กต์คำตอบใหม่ที่กําหนดเอง

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

คุณจะใช้ <StatusCode> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: การตอบกลับ

การใช้งานทั่วไปของ <StatusCode> คือการตรวจสอบว่าการตอบกลับของพร็อกซีมีสถานะเหมือนกับการตอบกลับที่ได้รับจากเป้าหมายเมื่อตั้งค่าแอตทริบิวต์ createNew ของ <AssignTo> เป็น "true"

<Verb> (รายการย่อยของ <Copy>)

กำหนดว่าจะคัดลอกคำกริยา HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคำตอบ

หากเป็น "true" ระบบจะคัดลอกคำกริยาที่พบในแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังคำขอที่ระบุไว้ในองค์ประกอบ <AssignTo>

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Verb> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ตั้งค่า <Verb> เป็น "true" ซึ่งจะคัดลอกคํากริยาจากคําขอเริ่มต้นไปยังคําขอใหม่ที่กําหนดเอง

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

คุณจะใช้ <Verb> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: คำขอ

<Version> (รายการย่อยของ <Copy>)

กำหนดว่าจะคัดลอกเวอร์ชัน HTTP จากคำขอต้นทางไปยังคำขอปลายทางหรือไม่ องค์ประกอบนี้ไม่มีผลต่อคำตอบ

หากเป็น "จริง" ระบบจะคัดลอกเวอร์ชัน HTTP ที่พบในแอตทริบิวต์ source ขององค์ประกอบ <Copy> ไปยังออบเจ็กต์ที่ระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Copy>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Version> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ตั้งค่า <Version> เป็น "true" ในคําขอ ซึ่งจะคัดลอกเวอร์ชันจากออบเจ็กต์คําขอเริ่มต้นไปยังออบเจ็กต์คําขอใหม่ที่กําหนดเอง

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

คุณจะใช้ <Version> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: คำขอ

<DisplayName>

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

องค์ประกอบ <DisplayName> ใช้ได้กับทุกนโยบาย

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ หากคุณละเว้น <DisplayName> ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย
ประเภท สตริง
องค์ประกอบหลัก <PolicyElement>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <DisplayName> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

ตัวอย่าง

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

องค์ประกอบ <DisplayName> ไม่มีแอตทริบิวต์หรือองค์ประกอบย่อย

<IgnoreUnresolvedVariables>

กำหนดว่าให้หยุดการประมวลผลเมื่อพบตัวแปรที่ยังไม่ได้รับการแก้ไขหรือไม่

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย ไม่มี

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

การตั้งค่า <IgnoreUnresolvedVariables> เป็น true แตกต่างจากการตั้งค่า continueOnError ของ <AssignMessage> เป็น true ตรงที่การตั้งค่านี้ใช้เฉพาะกับการตั้งค่าและรับค่าของตัวแปร หากคุณตั้งค่า continueOnError เป็น true ไว้ Edge จะละเว้นข้อผิดพลาดทั้งหมด ไม่ใช่แค่ข้อผิดพลาดที่เกิดขึ้นเมื่อใช้ตัวแปร

องค์ประกอบ <IgnoreUnresolvedVariables> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่า <IgnoreUnresolvedVariables> เป็น "จริง"

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

นำส่วนหัว พารามิเตอร์การค้นหา พารามิเตอร์แบบฟอร์ม และ/หรือเพย์โหลดข้อความออกจากข้อความ ข้อความอาจเป็นคําขอหรือการตอบกลับก็ได้ คุณระบุข้อความที่ <Remove> จะดำเนินการด้วยโดยใช้องค์ประกอบ <AssignTo>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท ประเภทคอมเพล็กซ์
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย <FormParams>
<Headers>
<Payload>
<QueryParams>

กรณีการใช้งานที่พบบ่อยของ <Remove> คือลบพารามิเตอร์การค้นหาที่มีข้อมูลที่ละเอียดอ่อนออกจากออบเจ็กต์คําขอขาเข้า เพื่อหลีกเลี่ยงการส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์

องค์ประกอบ <Remove> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้นําเนื้อหาของข้อความออกจากการตอบกลับ

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

ในขั้นตอนการตอบกลับ นโยบายนี้จะนําเนื้อหาของคำตอบออก โดยจะแสดงเฉพาะส่วนหัว HTTP แก่ไคลเอ็นต์

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์แบบฟอร์มทั้งหมดและพารามิเตอร์การค้นหาออกจากคําขอขาเข้า

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (รายการย่อยของ <Remove>)

นําพารามิเตอร์แบบฟอร์มที่ระบุออกจากคําขอ องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <FormParam> หรืออาร์เรย์ว่าง
องค์ประกอบหลัก <Remove>
องค์ประกอบย่อย <FormParam>

องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์แบบฟอร์ม 3 รายการออกจากคําขอ

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์แบบฟอร์มทั้งหมดออกจากคําขอ

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

ตัวอย่างที่ 3

หากมีพารามิเตอร์แบบฟอร์มหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

ตัวอย่างนี้จะนํา "f1", "f2" และค่าที่ 2 ของ "f3" ออก หาก "f3" มีเพียงค่าเดียว ระบบจะไม่นำออก

คุณจะใช้ <FormParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: คำขอ
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (รายการย่อยของ <Remove>)

นำส่วนหัว HTTP ที่ระบุออกจากคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <Header> หรืออาร์เรย์ว่าง
องค์ประกอบหลัก <Remove>
องค์ประกอบย่อย <Header>

องค์ประกอบ <Headers> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะนําส่วนหัว user-agent ออกจากคําขอ

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะนําส่วนหัวทั้งหมดออกจากคําขอ

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 3

หากมีส่วนหัวหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างนี้จะนํา "h1", "h2" และค่าที่ 2 ของ "h3" ออกจากคําขอ หาก "h3" มีเพียงค่าเดียว ระบบจะไม่นำออก

<Payload> (รายการย่อยของ <Remove>)

กำหนดว่า <Remove> จะลบเพย์โหลดในคำขอหรือคำตอบหรือไม่ ซึ่งระบุโดยองค์ประกอบ <AssignTo> ตั้งค่าเป็น "true" เพื่อล้างเพย์โหลด หรือ "false" ค่าเริ่มต้นคือ "false"

ค่าเริ่มต้น เท็จ
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบหลัก <Remove>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Payload> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ตั้งค่า <Payload> เป็น "จริง" เพื่อให้ระบบล้างข้อมูลเพย์โหลดคำขอ

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (รายการย่อยของ <Remove>)

นําพารามิเตอร์การค้นหาที่ระบุออกจากคําขอ องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <QueryParam> หรืออาร์เรย์ว่าง
องค์ประกอบหลัก <Remove>
องค์ประกอบย่อย <QueryParam>

องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์การค้นหารายการเดียวออกจากคําขอ

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์การค้นหาทั้งหมดออกจากคําขอ

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 3

หากมีพารามิเตอร์การค้นหาหลายรายการที่มีชื่อเดียวกัน ให้ใช้ไวยากรณ์ต่อไปนี้

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างนี้จะนํา "qp1", "qp2" และค่าที่ 2 ของ "qp3" ออกจากคําขอ หาก "qp3" มีเพียงค่าเดียว ระบบจะไม่นำออก

ตัวอย่าง 4

ตัวอย่างต่อไปนี้จะนําพารามิเตอร์การค้นหา apikey ออกจากคําขอ

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: GET
  • ประเภทข้อความ: คำขอ

<Set>

ตั้งค่าข้อมูลในข้อความคำขอหรือคำตอบ ซึ่งระบุโดยองค์ประกอบ <AssignTo> <Set> จะเขียนทับส่วนหัวหรือพารามิเตอร์ที่มีอยู่ในข้อความต้นฉบับ หากต้องการสร้างส่วนหัวหรือพารามิเตอร์ใหม่ ให้ใช้องค์ประกอบ <Add> แทน

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท ประเภทคอมเพล็กซ์
องค์ประกอบหลัก <AssignMessage>
องค์ประกอบย่อย <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

องค์ประกอบ <Set> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้แสดงองค์ประกอบ <Set>

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (รายการย่อยของ <Set>)

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

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <FormParam>
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย <FormParam>

องค์ประกอบ <FormParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าพารามิเตอร์แบบฟอร์มชื่อ "myparam" เป็นค่าของตัวแปร request.header.myparam ในคําขอใหม่ที่กำหนดเอง

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

คุณจะใช้ <FormParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: POST
  • ประเภทข้อความ: คำขอ

หากคุณกำหนดพารามิเตอร์แบบฟอร์มว่างในนโยบาย (<Add><FormParams/></Add>) นโยบายจะไม่เพิ่มพารามิเตอร์แบบฟอร์มใดๆ ซึ่งจะเหมือนกับการละเว้น <FormParams>

<Set> เปลี่ยน Content-Type ของข้อความเป็น "application/x-www-form-urlencoded" ก่อนส่งไปยังปลายทางเป้าหมาย

<Headers> (รายการย่อยของ <Set>)

เขียนทับส่วนหัว HTTP ที่มีอยู่ในคำขอหรือคำตอบ ซึ่งระบุโดยองค์ประกอบ <AssignTo>

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <Header>
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย <Header>

องค์ประกอบ <Headers> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าส่วนหัว user-agent เป็นค่าของตัวแปร request.header.user-agent

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

หากคุณกําหนดส่วนหัวว่างในนโยบาย (<Add><Headers/></Add>) นโยบายจะไม่เพิ่มส่วนหัวใดๆ ซึ่งจะเหมือนกับการละเว้น <Headers>

<Path> (รายการย่อยของ <Set>)

<Payload> (รายการย่อยของ <Set>)

กำหนดเนื้อหาข้อความสำหรับคำขอหรือการตอบกลับ ซึ่งระบุโดยองค์ประกอบ <AssignTo> เพย์โหลดอาจเป็นประเภทเนื้อหาใดก็ได้ที่ถูกต้อง เช่น ข้อความธรรมดา, JSON หรือ XML

ค่าเริ่มต้น สตริงว่าง
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Payload> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าเพย์โหลดแบบข้อความธรรมดา

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้จะตั้งค่าเพย์โหลด JSON

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้แทรกค่าตัวแปรลงในเพย์โหลดโดยการใช้วงเล็บปีกกาครอบชื่อตัวแปร

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

ใน Apigee Edge เวอร์ชันเก่า เช่น ก่อนรุ่น 16.08.17 ของเวอร์ชันระบบคลาวด์ คุณจะใช้วงเล็บปีกกาเพื่อระบุการอ้างอิงตัวแปรภายในเพย์โหลด JSON ไม่ได้ ในรุ่นเหล่านั้น คุณต้องใช้แอตทริบิวต์ variablePrefix และ variableSuffix เพื่อระบุอักขระตัวคั่น และใช้อักขระเหล่านั้นเพื่อตัดชื่อตัวแปร เช่น

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

ไวยากรณ์เก่านี้ยังคงใช้งานได้

ตัวอย่าง 4

ระบบจะถือว่าเนื้อหาของ <Payload> เป็นเทมเพลตข้อความ ซึ่งหมายความว่านโยบาย AssignMessage จะแทนที่ตัวแปรที่ฝังอยู่ในวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิง ณ รันไทม์

ตัวอย่างต่อไปนี้ใช้ไวยากรณ์วงเล็บปีกกาเพื่อตั้งค่าส่วนหนึ่งของเพย์โหลดเป็นค่าตัวแปร

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <Payload>

แอตทริบิวต์ คำอธิบาย การมีบุคคลอยู่ ประเภท
contentType

หากระบุ ค่าของ contentType จะได้รับมอบหมายให้กับส่วนหัว HTTP Content-Type

ไม่บังคับ สตริง
variablePrefix (ไม่บังคับ) ระบุตัวคั่นนำหน้าในตัวแปรการไหล ค่าเริ่มต้นคือ "{" ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรของโฟลว์ ไม่บังคับ Char
variableSuffix (ไม่บังคับ) ระบุตัวคั่นต่อท้ายในตัวแปรการไหล ค่าเริ่มต้นคือ "}" ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรของโฟลว์ ไม่บังคับ Char

<QueryParams> (รายการย่อยของ <Set>)

เขียนทับพารามิเตอร์การค้นหาที่มีอยู่ในคําขอด้วยค่าใหม่ องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท อาร์เรย์ขององค์ประกอบ <QueryParam>
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย <QueryParam>

องค์ประกอบ <QueryParams> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าพารามิเตอร์การค้นหา "address" เป็นค่าของตัวแปร request.header.address

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

คุณจะใช้ <QueryParams> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • คํากริยา HTTP: GET
  • ประเภทข้อความ: คำขอ

หากคุณกําหนดพารามิเตอร์การค้นหาที่ว่างเปล่าในนโยบาย (<Set><QueryParams/></Set>) นโยบายจะไม่ตั้งค่าพารามิเตอร์การค้นหาใดๆ ซึ่งจะเหมือนกับการละเว้น <QueryParams>

<ReasonPhrase> (รายการย่อยของ <Set>)

ตั้งค่าวลีเหตุผลในการตอบกลับ ซึ่งปกติแล้วจะใช้สำหรับการแก้ไขข้อบกพร่องร่วมกับ <StatusCode> องค์ประกอบนี้ไม่มีผลต่อคําขอ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <ReasonPhrase> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะกำหนดวลีเหตุผลแบบง่าย

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

ตัวอย่างที่ 2

ระบบจะถือว่าเนื้อหาของ <ReasonPhrase> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่ฝังอยู่ในวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิง ณ รันไทม์ ดังตัวอย่างต่อไปนี้

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

คุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: การตอบกลับ

<StatusCode> (รายการย่อยของ <Set>)

ตั้งค่ารหัสสถานะในการตอบกลับ องค์ประกอบนี้ไม่มีผลต่อคําขอ

ค่าเริ่มต้น '200' (เมื่อตั้งค่าแอตทริบิวต์ createNew ของ <AssignTo> เป็น "true")
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริงหรือ variable
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <StatusCode> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่ารหัสสถานะแบบง่าย

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

ตัวอย่างที่ 2

ระบบจะถือว่าเนื้อหาของ <StatusCode> เป็นเทมเพลตข้อความ ซึ่งหมายความว่าระบบจะแทนที่ชื่อตัวแปรที่ฝังอยู่ในวงเล็บปีกกาด้วยค่าของตัวแปรที่อ้างอิง ณ รันไทม์ ดังตัวอย่างต่อไปนี้

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

คุณจะใช้ <StatusCode> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: การตอบกลับ

<Verb> (รายการย่อยของ <Set>)

ตั้งค่าคํากริยา HTTP ในคําขอ องค์ประกอบนี้ไม่มีผลต่อคำตอบ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริงหรือ variable
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Verb> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าคํากริยาแบบง่ายในคําขอ

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 2

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

ตัวอย่างต่อไปนี้ใช้ตัวแปรเพื่อป้อนข้อมูลคํากริยา

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

คุณจะใช้ <Verb> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: คำขอ

<Version> (รายการย่อยของ <Set>)

ตั้งค่าเวอร์ชัน HTTP ในคําขอ องค์ประกอบนี้ไม่มีผลต่อคำตอบ

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริงหรือ variable
องค์ประกอบหลัก <Set>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <Version> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จะตั้งค่าหมายเลขเวอร์ชันเป็น "1.1"

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้ใช้ตัวแปรในวงเล็บปีกกาเพื่อตั้งค่าหมายเลขเวอร์ชัน

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

คุณจะใช้ <Version> ได้ก็ต่อเมื่อมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้เท่านั้น

  • ประเภทข้อความ: คำขอ

สร้างข้อความคำขอที่กำหนดเอง

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

  • เข้าถึงตัวแปรในนโยบายอื่นๆ
  • ส่งไปยังบริการภายนอก

หากต้องการสร้างข้อความคำขอที่กำหนดเอง ให้ใช้องค์ประกอบ <AssignTo> ในนโยบาย AssignMessage policy ตั้งค่า createNew เป็น "true" และระบุชื่อข้อความใหม่ในส่วนเนื้อหาขององค์ประกอบ ดังตัวอย่างต่อไปนี้

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

ตัวอย่างต่อไปนี้สร้างข้อความคำขอที่กำหนดเอง

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้สร้างออบเจ็กต์คำขอที่กำหนดเองด้วย Assign Message

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

ตัวอย่างนี้

  • สร้างออบเจ็กต์ข้อความคําขอใหม่ชื่อ "MyCustomRequest"
  • ใน MyCustomRequest นโยบายนี้มีลักษณะดังนี้
    • คัดลอกค่าของส่วนหัว user-agent HTTP จากคําขอขาเข้าไปยังข้อความใหม่ เนื่องจาก <Copy> ใช้การอ้างอิงแบบสัมบูรณ์กับตัวแปรโฟลว์ user-agent จึงไม่จำเป็นต้องระบุแอตทริบิวต์ source ให้กับ <Copy>
    • ตั้งค่าพารามิเตอร์การค้นหา address ในข้อความที่กําหนดเองเป็นค่าของพารามิเตอร์การค้นหา addy ของคําขอขาเข้า
    • ตั้งค่าคํากริยา HTTP เป็น GET
  • ตั้งค่า <IgnoreUnresolvedVariables> เป็น "เท็จ" เมื่อ <IgnoreUnresolvedVariables> เป็น "เท็จ" หากตัวแปรใดตัวแปรหนึ่งที่นโยบายพยายามเพิ่มไม่อยู่ Edge จะหยุดประมวลผลในขั้นตอน API

ตัวอย่างที่ 2

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

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

ตัวอย่างนี้จะสร้างคําขอใหม่ที่กำหนดเองชื่อ "partner.request" จากนั้นจะตั้งค่า <Verb> และ <Payload> ในคำขอใหม่

คุณสามารถเข้าถึงข้อความคำขอที่กำหนดเองในนโยบาย AssignMessage อื่นซึ่งเกิดขึ้นในภายหลังในขั้นตอน ตัวอย่างต่อไปนี้จะรับค่าของส่วนหัว user-agent ของข้อความคำขอที่กำหนดเอง

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

วิดีโอ

ดูวิดีโอต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย AssignMessage

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

รหัสข้อผิดพลาด

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

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

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

รหัสข้อบกพร่อง สถานะ HTTP สาเหตุ แก้ไข
steps.assignmessage.SetVariableFailed 500 นโยบายไม่สามารถตั้งค่าตัวแปร ดูชื่อตัวแปรที่ยังไม่ได้รับการแก้ไขในสตริงข้อบกพร่อง
steps.assignmessage.VariableOfNonMsgType 500

ข้อผิดพลาดนี้เกิดขึ้นหากตั้งค่าแอตทริบิวต์ source ในองค์ประกอบ <Copy> เป็นตัวแปรซึ่งไม่ใช่ประเภท message

ตัวแปรประเภทข้อความแสดงคําขอและคําตอบ HTTP ทั้งหมด ตัวแปรการไหลของ Edge ในตัว request, response และ message เป็นประเภทข้อความ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรข้อความได้ที่ข้อมูลอ้างอิงตัวแปร

steps.assignmessage.UnresolvedVariable 500

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

  • อยู่นอกขอบเขต (ไม่พร้อมใช้งานในขั้นตอนที่นโยบายกำลังทำงาน)
  • หรือ
  • ไม่สามารถแก้ไขได้ (ไม่ได้กําหนด)

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

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

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidIndex หากดัชนีที่ระบุในองค์ประกอบ <Copy> และ/หรือ <Remove> ของนโยบายการกําหนดข้อความเป็น 0 หรือเป็นตัวเลขติดลบ การติดตั้งใช้งาน API Proxy จะดำเนินการไม่สำเร็จ
InvalidVariableName หากองค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุในองค์ประกอบ <AssignVariable> การทำให้พร็อกซี API ใช้งานได้จะล้มเหลวเนื่องจากไม่มีชื่อตัวแปรที่ถูกต้องที่จะกำหนดค่า ต้องระบุชื่อตัวแปรที่ถูกต้อง
InvalidPayload เพย์โหลดที่ระบุในนโยบายไม่ถูกต้อง

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

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

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

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

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

ตัวอย่างกฎข้อบกพร่อง

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

สคีมา

นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd) สคีมานโยบายมีให้ใช้งานเป็นข้อมูลอ้างอิงใน GitHub

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

ตัวอย่างนโยบาย AssignMessage ที่ใช้งานได้มีอยู่ในตัวอย่างแพลตฟอร์ม API

ดูตัวอย่างขั้นสูงเพิ่มเติมเกี่ยวกับวิธีลบล้าง target.url จาก ProxyEndpoint ได้ที่บทความนี้ในชุมชน Apigee

หากต้องการดู "เส้นทางที่กำหนด" ที่กำลังทำงานในนโยบาย ServiceCallout โปรดดูเรียนรู้จากตัวอย่างนี้ในตัวอย่าง GitHub ของ Apigee เพียงโคลนที่เก็บและทําตามวิธีการในหัวข้อนั้น ตัวอย่างนี้ใช้นโยบาย AssignMessage เพื่อตั้งค่าเส้นทางคำขอ จากนั้นใช้นโยบายข้อความไฮไลต์ของบริการเพื่อส่งคำขอไปยังบริการภายนอก