นโยบาย assignMessage

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

อะไร

นโยบาย 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 การดำเนินการของคุณใน Edge UI ดังนี้

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

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

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

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

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

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

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

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

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

<Copy> ไม่บังคับ คัดลอกข้อมูลจากข้อความที่ source ระบุ to ไปยังออบเจ็กต์ข้อความที่ระบุโดยองค์ประกอบ <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: ตั้งค่าเนื้อหาแบบไดนามิก

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

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

ตัวอย่างต่อไปนี้ฝังค่าของตัวแปรโฟลว์ส่วนหัว HTTP user-agent ในองค์ประกอบ 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: ตั้งค่า/รับตัวแปร

ตัวอย่างต่อไปนี้ใช้นโยบายมอบหมายข้อความสามข้อ

  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 ที่สอง ส่วนหัว

<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> เพื่อเพิ่มคำค้นหา 1 รายการ ด้วยค่าคงที่ในคำขอ

<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" กลายเป็น &quot;http://httpbin.org/get?myParam=42&quot;.

องค์ประกอบย่อยของ <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 ของคำขอเป็น &quot;application/x-www-form-urlencoded&quot; ก่อนส่งข้อความไปยังบริการเป้าหมาย

<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
  • ประเภทข้อความ: คำขอ

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

หากคุณกำหนดอาร์เรย์ที่ว่างเปล่าของพารามิเตอร์การค้นหาในนโยบาย (<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

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

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

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

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

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

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

ไม่บังคับ สตริง
type ระบุประเภทของข้อความใหม่เมื่อ createNew เป็น "จริง" ถูกต้อง ค่าคือ "request" หรือ "ตอบกลับ"

ค่าเริ่มต้นคือ "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> ค่า ระบบจะสร้างนโยบายดังกล่าวขึ้นมา 1 รายการโดยใช้ชื่อดังกล่าว

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ต้องระบุ
ประเภท สตริง
องค์ประกอบระดับบนสุด <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> เป็นผู้สร้าง

<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> ไม่มีอยู่ อ่านไม่ได้ หรือเป็นค่าว่าง แล้ว 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 กำหนดเป็น Null, อ่านไม่ได้ หรือมีรูปแบบไม่ถูกต้อง ค่า "ErrorOnCopy" ไปยังตัวแปรใหม่

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

กรณีการใช้งานทั่วไปสำหรับ <AssignVariable> คือการกำหนดค่าเริ่มต้นของการค้นหา พารามิเตอร์ ส่วนหัว หรือค่าอื่นๆ ที่ส่งไปกับคำขอได้ ตัวอย่างเช่น คุณสามารถสร้าง พร็อกซี Weather 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 แล้วกำหนดให้กับตัวเอง หากตัวแปรโฟลว์เป็นค่าว่าง หมายความว่าตัวแปร "w" พารามิเตอร์การค้นหาเดิมคือ ออกจากคำขอ ตัวอย่างนี้จะใช้ค่าเริ่มต้นจาก <Value> คุณจึงส่งคำขอไปยัง API นี้ได้ พร็อกซีที่ละเว้น "w" พารามิเตอร์การค้นหา:

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

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

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

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

<Template> (ย่อยของ <AssignVariable>)

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

ใช้แอตทริบิวต์ 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

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

<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

ตัวอย่างต่อไปนี้คัดลอกพารามิเตอร์ฟอร์มทั้งหมดไปยังคำขอที่กำหนดเอง &quot;MyCustomRequest&quot;:

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

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

ตัวอย่างต่อไปนี้คัดลอกพารามิเตอร์ฟอร์ม 3 รายการไปยังคำขอที่กำหนดเอง &quot;MyCustomRequest&quot;:

<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" และค่าที่สองของ "f3" หากเป็น "f3" มีเพียงรายการเดียว จะไม่มีการคัดลอก

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

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

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

<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" และค่าที่สองของ "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>)

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

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

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

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

<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> มีการตั้งค่าเป็น "จริง"

<Verb> (ย่อยของ <Copy>)

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

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

<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 จากคำขอแหล่งที่มาไปยัง ปลายทาง องค์ประกอบนี้ไม่มีผลต่อการตอบกลับ

หากเป็น "true" ให้คัดลอกเวอร์ชัน 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> เป็น "จริง" ในคำขอ ซึ่งคัดลอก เวอร์ชันจากออบเจ็กต์คำขอเริ่มต้นเป็นออบเจ็กต์คำขอใหม่แบบกำหนดเอง

<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 ของนโยบาย
ประเภท สตริง
องค์ประกอบระดับบนสุด &lt;PolicyElement&gt;
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <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" และค่าที่สองของ "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" และค่าที่สองของ "h3" ออก จากคำขอ หากเป็น "h3" มีเพียงค่าเดียว ระบบจึงไม่ได้นำออก

<Payload> (ย่อยของ <Remove>)

กำหนดว่า <Remove> จะลบเพย์โหลดในคำขอหรือการตอบกลับ ซึ่งก็คือ ที่ระบุโดยองค์ประกอบ <AssignTo> ตั้งค่าเป็น "จริง" ถึง ล้างเพย์โหลด มิฉะนั้นจะเป็น "เท็จ" ค่าเริ่มต้นคือ "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" และค่าที่สองของ "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 ของข้อความเป็น &quot;application/x-www-form-urlencoded&quot; ก่อนที่จะส่งไปยังปลายทางเป้าหมาย

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

<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

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

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

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

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

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

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

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

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

อีกตัวอย่างหนึ่งที่แสดงวิธีสร้างออบเจ็กต์คำขอที่กำหนดเองด้วยตัวเลือก Assign ข้อความ:

<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 Payload โดยใช้นโยบาย 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 นี้

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