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

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

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

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

หากต้องการฝังตัวแปรโฟลว์ 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: ตั้งค่า/รับตัวแปร

ตัวอย่างต่อไปนี้ใช้ Assign Message Policy 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 และการตอบกลับของ Callout มีส่วนหัวหลายรายการที่มีชื่อเดียวกัน (Set-Cookie) สมมติว่าตัวแปรการตอบกลับของ Service Callout เป็นค่าเริ่มต้น 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> ใน PreFlow ของคำขอ หากดูผลลัพธ์ในเครื่องมือ เช่น เครื่องมือติดตาม คำขอไปยัง "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 เป็น "false" (ค่าเริ่มต้น) จะทําให้ตัวอย่างนี้ไม่สร้างคําขอใหม่ การดำเนินการทั้งหมดในนโยบายนี้มีผลต่อคำขอเดิม

ตัวอย่างที่ 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

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

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

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

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

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

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

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

<Ref> (บุตรของ <AssignVariable>)

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

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

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

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

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 รายการ

ตัวอย่างที่ 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 เป็น Null อ่านไม่ได้ หรือมีรูปแบบไม่ถูกต้อง 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 ตัว กับสตริงตัวอักษร (ยัติภังค์) ระหว่างตัวแปรทั้ง 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 ระบบจะใช้ค่าข้อความ (ในกรณีนี้คือ {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>)

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

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

<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> เป็น "true" เพื่อให้ระบบล้างเพย์โหลดของคำขอ

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

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

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

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

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

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

steps.assignmessage.UnresolvedVariable 500

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

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

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

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

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

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