นโยบาย assignMessage

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

อะไร

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

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

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

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

องค์ประกอบ <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 name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

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

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

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

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

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

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

<AssignMessage name="AM-set-dynamic-content">
  <AssignTo>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="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

  1. สร้างตัวแปรโฟลว์ 3 รายการในคำขอที่มีค่าคงที่
  2. รับตัวแปรโฟลว์แบบไดนามิกในนโยบายที่ 2 ในโฟลว์คำขอ
  3. ตั้งค่าในเพย์โหลดของการตอบกลับ
<!-- Policy #1: Set variables in the request -->

<AssignMessage name="AM-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>
</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 name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

{calloutResponse.header.Set-Cookie.values}

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

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

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

<Add>

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

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

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

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

ไวยากรณ์s1

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

ตัวอย่าง 1s2

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

ตัวอย่าง 3s4

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

ตัวอย่างนี้ใช้ <Add> ใน PreFlow ของคำขอ หากดูผลลัพธ์ในเครื่องมือ เช่น เครื่องมือติดตาม คำขอไปยัง https://example-target.com/get จะกลายเป็น https://example-target.com/get?myParam=42

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

<FormParams> (บุตรของ <Add>)

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

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

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

ไวยากรณ์s5

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

ตัวอย่าง 1s6

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

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

ตัวอย่าง 2s7

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

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

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

ตัวอย่าง 3s8

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

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

username=nick&zip_code=90210&default_language=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> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์s9

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

ตัวอย่าง 1s10

ตัวอย่างต่อไปนี้จะเพิ่มส่วนหัว partner-id ลงในข้อความคำขอ และ กำหนดค่าของตัวแปรโฟลว์ verifyapikey.VAK-1.developer.app.partner-id ให้กับส่วนหัวนั้น

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (บุตรของ <Add>)

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

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

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

ไวยากรณ์s11

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

ตัวอย่าง 1s12

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

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

<AssignTo>

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

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

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

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

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

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

ไวยากรณ์s13

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

ตัวอย่าง 1s14

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

<AssignMessage name="assignto-1">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ตัวอย่าง 2s15

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

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

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

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

ตัวอย่าง 3s16

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

<AssignMessage name="assign>to-<2"
  AssignTo createNew="true" transport=&&quot;http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo
/AssignMessage

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<AssignVariable>

กำหนดค่าให้กับตัวแปรโฟลว์ หากไม่มีตัวแปรโฟลว์ <AssignVariable> จะสร้างตัวแปรดังกล่าว

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

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

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

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

ไวยากรณ์s17

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame
 <   Refso>urce_variable/Re<f
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate
    Value>v<ariable_value/>Value
  /AssignVariable
/AssignMessage

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

ตัวอย่าง 1s18

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

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

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

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

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

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

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

ตัวอย่าง 3s20

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

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

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

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

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

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

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

ไวยากรณ์s21

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble<
    Namevariab>l<e_name/Name
  >/AssignVariable
/AssignMessage

ตัวอย่าง 1s22

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

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

หากไม่มี 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]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame<
    Refsource_>v<ariable/Ref
  >/AssignVariable
/AssignMessage

ตัวอย่าง 1s23

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

<AssignMessage name="assignvariab>le-<4"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-ag<ent/Ref
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>oun<try/Ref
  /Assi>g<nVariable
/Ass>ignMessage

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

ตัวอย่าง 2s23

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

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

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

ตัวอย่าง 3s24

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

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

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

<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3"
  AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/
>  I<gnoreUnresolve>dVari<able>strue
  /IgnoreUnres<olved>Varia<ble>s
  AssignVariable
 <   N>amere<quest>.querypa<ram.w/>Nam<e
    Refreques>t<.queryparam.w/>Ref
    Value12797282/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> จะใช้เทมเพลตข้อความจากแอตทริบิวต์ที่กำหนดเองของแอปได้ ซึ่งพร้อมใช้งาน เป็นตัวแปรโฟลว์จากนโยบายความปลอดภัย

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

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

ไวยากรณ์s25

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e" >
  AssignVariabl<e
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate
  /AssignVariable
/AssignMessage

ตัวอย่าง 1s26

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

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

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

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

<AssignMessage name='AV-via-template-indirec>tly&#<39;  
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='my_templat>e_v<ariable'/
 > </AssignVariabl>e
/AssignMessage

ตัวอย่าง 3s28

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

<AssignMessage name='AV-template-with-fallb>ack<' 
 IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template
 > </AssignVariabl>e
/AssignMessage

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

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

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

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

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

ไวยากรณ์s29

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   Na>mevariable_nam<e/Name>
  <  Valuevariable>_<value/Value
  >/AssignVariable
/AssignMessage

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

ตัวอย่างต่อไปนี้จะตั้งค่าตัวแปรโฟลว์ปลายทาง myvar เป็นค่าตามตัวอักษร "42"

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

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

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

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

หากการกำหนดค่าใดค่าหนึ่งล้มเหลว <AssignVariable> จะกำหนดค่า "ErrorOnCopy" ให้กับ ตัวแปรโฟลว์ปลายทางแทน

<Copy>

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

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

หากคุณไม่ระบุองค์ประกอบย่อยใดๆ ใต้องค์ประกอบ <Copy> ระบบจะคัดลอกทุกส่วนของข้อความต้นฉบับที่กำหนด

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

ไวยากรณ์s30

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > name<="policy_name" 
    Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
      ...<
    /Fo>rmParams
 <   !-- >Can als<o be an empty array (Head>ers/) --><
    He>aders
      Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
      <...
    >/Head<ers
    Path[false|true]/Path
  <  Payload[fa>lse|true]/<Payload
   > !-- Ca<n also be an empty array (QueryPa>rams/) -->
  <  QueryPara>ms
      QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
    >  ...
    /Q<ueryParams<>/span>
    R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
    Stat<usCode[f>als<e|tru>e]/<StatusCode
    Verb[false|true]/Verb<
   > Version[f>als<e|true]/Version
  /Copy
  !-- Used as the destination for the Copy values --
  A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
    type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
  

ตัวอย่าง 1s31

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

<AssignMessage name="AM-co>py-<1"
  AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo
  <Copy source="request&qu>ot;
 <   Heade>rs
  <    Header> name=&<quot;Header_Name_1"/
    /Head>ers
   < FormParams
      FormParam name=&q>uot;For<m_Param_Name_1"/
      FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/
<      FormPa>ram< name>=<"Form_Par>am_Name_3"/
    /FormParams
    Pathtrue/Path
    QueryParams/
  /Copy
/AssignMessage

เนื่องจากไม่มีองค์ประกอบอย่าง <Payload> และ <Verb> นโยบายจึงไม่คัดลอกส่วนต่างๆ ของข้อความ

ตัวอย่าง 2s32

ตัวอย่างต่อไปนี้จะลบทุกอย่างในresponse message ที่มีอยู่ก่อน จากนั้นจะคัดลอกค่าทั้งหมดจากข้อความอื่นที่ชื่อ secondResponse ไปยังresponse message

<AssignMessage name='AM-Copy-Respo>nse<'
  AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo
  !>-- <first r>emo<ve any existing values --
  Remove/
  !-- then copy eve>ryt<hing from the designated mess>a<ge --
  Copy s>ource="secondResponse"/
/AssignMessage

องค์ประกอบ <Copy> มีแอตทริบิวต์เดียว ดังนี้

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

ระบุออบเจ็กต์ต้นทางของการคัดลอก

  • หากไม่ได้ระบุ source ค่าเริ่มต้นจะเป็น message ซึ่ง จะมีค่าแตกต่างกันไปตามโฟลว์ที่นโยบายดำเนินการ หากนโยบาย ทํางานภายในโฟลว์คําขอ ตัวแปร message จะอ้างอิงถึงออบเจ็กต์ request หากนโยบายทํางานภายในโฟลว์การตอบกลับ ตัวแปร message จะอ้างอิงถึงออบเจ็กต์ response
  • หากไม่สามารถระบุตัวแปรแหล่งที่มา หรือระบุเป็นประเภทที่ไม่ใช่ข้อความ <Copy> จะไม่ตอบกลับ
ไม่บังคับ สตริง

<FormParams> (บุตรของ <Copy>)

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

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

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

ไวยากรณ์s33

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram
      ...
    /FormParams
  /Copy
/AssignMessage

ตัวอย่าง 1s34

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

<AssignMessage name="copy-formpara>ms-<1"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram
    /FormParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 2s35

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

<AssignMessage name="copy-formpara>ms-<2"
  Copy source>=&quo<t;request&q>uot<;
   > Fo<rmParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 3s36

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

<AssignMessage name="copy-formpara>ms-<3"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPara>m name=<"paramName1"/
    >  FormP<aram name="paramName2&q>uot;/<
      Form>Par<am na>me=<"paramName3"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 4s37

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

<AssignMessage name="copy-formpara>ms-<4"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      >FormPar<am name="f1&quo>t;/
   <   FormParam name=&quo>t;f2&<quot;/
    >  F<ormPa>ram< name="f3.2"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; 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> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์s38

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    >!-- Can al<so be a>n empty< array (Headers/) -->
>    Headers
<      H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header
      ...
    /Headers
  /Copy
/AssignMessage

ตัวอย่าง 1s39

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

<AssignMessage name="copy-heade>rs-<1"
  Copy source>=&quo<t;reque>st"<;
    Headers
      Heade>r nam<e=">use<r-age>nt&<quot;/
    /Headers
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 2s40

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

<AssignMessage name="copy-heade>rs-<2"
  Copy source>=&quo<t;reques>t&q<uot;<>/span>
   < Headers/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 3s41

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

<AssignMessage name="copy-heade>rs-<3"
  Copy source>=&quo<t;reque>st"<;
    Headers
   >   Head<er name="h1&>quot;/
<      Header name=&>quot;<h2">/
 <     >Hea<der name="h3.2"/
    /Headers
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; 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]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Path>[false|true]/Path
  /Copy
/AssignMessage

ตัวอย่าง 1s42

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

<AssignMessage name="copy-pa>th-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    P>ath<true/Path
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

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

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

<Payload> (บุตรของ <Copy>)

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

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

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

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

ไวยากรณ์s43

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Payload[fa>lse|true]/Payload
  /Copy
/AssignMessage

ตัวอย่าง 1s44

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

<AssignMessage name="AM-copy-paylo>ad-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Pa<yload>tru<e/Payloa>d
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

<QueryParams> (บุตรของ <Copy>)

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

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

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

ไวยากรณ์s45

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !-- >Can also b<e an empty >array (<QueryParams/) --&gt;
    QueryPar>ams
      QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram
      ...
    /QueryParams
  /Copy
/AssignMessage

ตัวอย่าง 1s46

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

<AssignMessage name="copy-querypara>ms-<1"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      QueryPa>ram n<ame="my>_pa<ram&q>uot<;/
    /QueryParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 2s47

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

<AssignMessage name="copy-querypara>ms-<2"
  Copy source>=&quo<t;request&qu>ot;<
    >Que<ryParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

ตัวอย่าง 3s48

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

<AssignMessage name="copy-querypara>ms-<3"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      Qu>eryPara<m name="qp1">/
     < QueryParam name="q>p2&qu<ot;/
      Q>uer<yPara>m n<ame="qp3.2"/
    /QueryParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

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

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

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

<ReasonPhrase> (บุตรของ <Copy>)

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

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

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

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

ไวยากรณ์s49

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[>request|resp<onse]"
 >   <Reaso>n<Phrase[false|t>rue]/ReasonPhrase
  /Copy
/AssignMessage

ตัวอย่าง 1s50

ตัวอย่างต่อไปนี้ตั้งค่า <ReasonPhrase> เป็น true เมื่อมีองค์ประกอบต้นทางและ <AssignTo> ตามที่ระบุ <Copy> จะคัดลอกวลีเหตุผลจากข้อความตอบกลับที่มีชื่อไปยังออบเจ็กต์ response ดังนี้

<AssignMessage name="AM-copy-reasonphra>se-<1"
  Copy source="serviceC>allou<tResponse&qu>ot;
<    ReasonPhr>ase<true/>Rea<sonPhras>e
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

คุณจะใช้ <ReasonPhrase> ได้ก็ต่อเมื่อข้อความต้นทางและปลายทางเป็นประเภทการตอบกลับเท่านั้น

<StatusCode> (บุตรของ <Copy>)

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

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

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

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

ไวยากรณ์s52

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=">;[request|re<sponse]&quo>t;
<    S>t<atusCode[false>|true]/StatusCode
  /Copy
/AssignMessage

ตัวอย่าง 1s53

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

<AssignMessage name="copy-statusco>de-<1"
  Copy source=>"<;response&>quot<;
    Statu>sCo<detru>e/S<tatusCode
  /Copy
  AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo
/AssignMessage

คุณจะใช้ <StatusCode> ได้ก็ต่อเมื่อข้อความต้นทางและปลายทางเป็นประเภทการตอบกลับเท่านั้น

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

<Verb> (บุตรของ <Copy>)

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

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

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

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

ไวยากรณ์s54

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Verb>[false|true]/Verb
  /Copy
/AssignMessage

ตัวอย่าง 1s55

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

<AssignMessage name="copy-ve>rb-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    V>erb<true/Verb
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

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

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

<Version> (บุตรของ <Copy>)

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

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

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

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

ไวยากรณ์s56

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Version[fa>lse|true]/Version
  /Copy
/AssignMessage

ตัวอย่าง 1s57

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

<AssignMessage name="copy-versi>on-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Ve<rsion>tru<e/Version
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์s58

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name">; 
  IgnoreUnre<solvedVariables[true|false>]<
  /IgnoreUnre>solvedVariables
/AssignMessage

ตัวอย่าง 1s59

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

<AssignMessage name="AM-Set-Hea>der<s&q>uot;
<  Set
 >   Head<ers
      Header name=&#>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er
 >   </Headers
  /Set
  IgnoreU>nresolv<edVariablestrue
  /IgnoreU>n<resolvedVariab>les
/AssignMessage

เนื่องจากตั้งค่า <IgnoreUnresolvedVariables> เป็น true หากไม่ได้กำหนดตัวแปร possibly-defined-variable นโยบายนี้จะไม่แสดงข้อผิดพลาด

<Remove>

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

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

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

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

ไวยากรณ์s60

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam
      ...
    /Form<Params
 >   !-- Can< also b>e an em<pty array (Headers/) --&g>t;
    Heade<rs
    >  Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r
   <   ...
    /Headers
    Payload[<false|true]/>Payload
  <  !-- Can a>lso be <an empty array (QueryParams/) --&>gt;
    QueryPar<ams
      Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam
      ...
    /QueryParams
  /Remove
/AssignMessage

ตัวอย่าง 1s61

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

<AssignMessage name="AM-remo>ve-<1"
  D>isplayNa<meremove-1/D>isp<layNam>e
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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

ตัวอย่าง 2s62

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

<AssignMessage name="AM-remo>ve-<2">;
  R<emove
    !<-- Empty (F>ormParams/) removes all form par>amete<rs --
    F>ormPa<rams/
    Q>ueryPar<ams
      QueryParam n>ame=&<quot;qp1&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

ตัวอย่าง 3s63

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

<AssignMessage name="AM-remo>ve-<3">
  <Remove/
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

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

<FormParams> (บุตรของ <Remove>)

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

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

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

ไวยากรณ์s64

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam
      .>..
    /FormParams
  /Remove
/AssignMessage

ตัวอย่าง 1s65

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

<AssignMessage name="AM-remove-formpara>ms-<1">;
  R<emove
    >FormPar<ams
      FormParam name=">;form_p<aram_1"/
      FormParam >name=&q<uot;form_param_2"/
      >FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

ตัวอย่าง 2s66

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

<AssignMessage name="AM-remove-formpara>ms-<2">;
  R<emove
    F>orm<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

ตัวอย่าง 3s67

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

<AssignMessage name="AM-remove-formpara>ms-<3">;
  R<emove
    >FormPar<ams
      FormParam >name=&q<uot;f1"/
      >FormPar<am name="f2">/
   <   FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/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]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can al>so be an e<mpty ar>ray (He<aders/) -->;
    Header>s
      Head<er name>="header_n<ame">;he<ader_va>l<ue/Header
    >  ...
    /Headers
  /Remove
/AssignMessage

ตัวอย่าง 1s68

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

<AssignMessage name="AM-remove-one-he>ade<r">;
  R<emove
 >   Head<ers
      Header name=&qu>ot;us<er-agent>&qu<ot;/
  >  /<Headers
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

ตัวอย่าง 2s69

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

<AssignMessage name="AM-remove-all-hea>der<s">;
  R<emove
  >  H<eaders/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

ตัวอย่าง 3s70

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

<AssignMessage name="AM-remove-heade>rs-<3">;
  R<emove
 >   Head<ers
      Header >name=&q<uot;h1"/
   >   Head<er name="h2&qu>ot;/
<      He>ade<r name=>&qu<ot;h3.2&>quot;/
<    /Head>e<rs
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

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

<Payload> (บุตรของ <Remove>)

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

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

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

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_na>me" 
  <Remove
 >   <Payload>[<false|true]/Pa>yload
  /Remove
/AssignMessage

ตัวอย่าง 1s71

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

<AssignMessage name="AM-remove-paylo>ad-<1">;
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

<QueryParams> (บุตรของ <Remove>)

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

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

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

ไวยากรณ์s72

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also b>e an empty< array (Que>ryParam<s/) -->
    QueryParams
      >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param
      ..>.
    /QueryParams
  /Remove
/AssignMessage

ตัวอย่าง 1s73

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

<AssignMessage name="AM-remove-querypara>ms-<1">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame=&qu<ot;qp1">/
 <     /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

ตัวอย่าง 2s74

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

<AssignMessage name="AM-remove-querypara>ms-<2">;
  Rem<ove
      Qu>ery<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

ตัวอย่าง 3s75

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

<AssignMessage name="AM-remove-querypara>ms-<3">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame="<;qp1"/
        Qu>eryParam <name="qp2"/
  >      Q<ueryParam na>me=<"q>p3.<2"/>
      </QueryPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

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

ตัวอย่าง 4s76

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

<AssignMessage name="AM-remove-query-p>ara<m">;
  R<emove
    Q>ueryPar<ams
      QueryParam name>=&quo<t;apikey&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

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

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

<Set>

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

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

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

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>"<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am
    <  ...
    /FormParams
   > Headers
   <   Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader
      ...
    /Headers
    Pathpath/Path
    Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot;
   <     variableSuffix="suffix&>quot;new_payload</Payload
  >  QueryParams
 <     QueryPa>ram n<ame="qu>eryparam_name&quot;queryparam_<value/QueryPa>ram
 <     ...
 >   /QueryParams
    ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase
    StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e
 <   V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb
    Version[1.0|1.1|{variable}]/Verb
  /Set
/AssignMessage

ตัวอย่าง 1s77

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

<AssignMessage name="AM-Set-He>ade<r&q>uot;
<  Set
 >   Header<s
        Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader>
  <  /Heade>rs
  /S<et
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

ตัวอย่าง 2s78

ตัวอย่างต่อไปนี้จะเขียนทับเพย์โหลดสำหรับการตอบกลับ รวมถึงส่วนหัว Content-Type

<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot;
<  Set
    Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load
  /S>e<t
  AssignTore>sponse/AssignTo
/AssignMessage

<FormParams> (บุตรของ <Set>)

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

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

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

ไวยากรณ์s79

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam
      .>..
    /FormParams
  /Set
/AssignMessage

ตัวอย่าง 1s80

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

<AssignMessage name="AM-set-formpara>ms-<1&q>uot;
<  Set
    >FormPar<ams
      FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m
  >  /<FormParams
  /Set
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"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> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์s81

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name&q<uot; 
  Set
    Headers
 >     Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
    >  ...
    /Headers
  /Set
/AssignMessage

ตัวอย่าง 1s81

ตัวอย่างต่อไปนี้จะตั้งค่าส่วนหัว x-ratelimit-remaining เป็นค่าของตัวแปร ratelimit.Quota-1.available.count

<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot;
<  Set
 >   Head<ers
      Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader>
  <  /Heade>rs
  /Se<t
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

หากคุณกำหนดส่วนหัวที่ว่างเปล่าในนโยบาย (<Set><Headers/></Set>) นโยบายจะไม่ตั้งค่าส่วนหัวใดๆ ซึ่ง จะส่งผลเช่นเดียวกับการละเว้น <Headers>

<Path> (บุตรของ <Set>)

<Payload> (บุตรของ <Set>)

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

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

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

ไวยากรณ์s82

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name" 
  Set
    Payload contentType=&quot;content_type" variablePrefix=>"prefi<x"<>/span>
   <    > <variableSuffix>="suffix"new_payload/Payload
  /Set
/AssignMessage

ตัวอย่าง 1s83

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

<AssignMessage name="set-paylo>ad-<1&q>uot;
<  Set
    Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload
 > /Set
/AssignMessage

ตัวอย่าง 2s84

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

<AssignMessage name="set-paylo>ad-<2&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"}
    /Payload
  /Set
/AssignMessage

ตัวอย่าง 3s85

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

<AssignMessage name="set-paylo>ad-<3&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"}
    /Payload
  /Set
/AssignMessage

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

<AssignMessage name="set-payloa>d-3<b&q>uot;
<  Set
    Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#"
      {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"}
    /Payload
  /Set
/AssignMessage

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

ตัวอย่าง 4s86

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

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

<AssignMessage name="set-paylo>ad-<4&q>uot;
<  Set
    Payload contentType=>"t<ext/>xml"<
 >     r<oot>
        <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> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์s87

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_nam>e"< 
  Set
    QueryParams
      Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
      ..>.
    /QueryParams
  /Set
/AssignMessage

ตัวอย่าง 1s88

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

<AssignMessage name="AM-set-querypara>ms<-1&>quot;<  Set
    Q>ueryPar<ams
      QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram<
   > </QueryParams
 > /Set
/AssignMessage

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

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

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

<ReasonPhrase> (บุตรของ <Set>)

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

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

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

ไวยากรณ์s89

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name>" 
  Set
    ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase
  /Set
/AssignMessage

ตัวอย่าง 1s90

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

<AssignMessage name="set-reasonphra>se-<1&q>uot;
<  Set
    Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase<
  /Set
  AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/
/AssignMessage

ตัวอย่าง 2s91

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

<AssignMessage name="AM-set-reasonphra>se-<2&q>uot;
<  Set
    Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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

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

<StatusCode> (บุตรของ <Set>)

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

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

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

ไวยากรณ์s92

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me" 
  Set
    StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode
  /Set
/AssignMessage

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

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

<AssignMessage name="AM-set-statuscode>-40<4&q>uot;
<  Set
    >Sta<tusCode404/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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

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

<AssignMessage name="set-statusco>de-<2&q>uot;
<  Set
    >StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

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

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

<Verb> (บุตรของ <Set>)

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

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

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

ไวยากรณ์

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;pol>icy_name" 
  Set
    Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb
  /Set
/AssignMessage

ตัวอย่าง 1s93

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

<AssignMessage name="AM-set-ve>rb-<1&q>uot;
<  Se>t
  <  Ver>bPO<ST/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

ตัวอย่าง 2s94

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

ตัวอย่างต่อไปนี้ใช้ตัวแปรเพื่อป้อนคำกริยา

<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot;
<  Se>t
    Verb{my<_vari>abl<e}/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

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

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

<Version> (บุตรของ <Set>)

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

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

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

ไวยากรณ์s95

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name" 
  Set
 <   Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb
  /Set
/AssignMessage

ตัวอย่าง 1s96

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

<AssignMessage name="AM-set-versi>on-<1&q>uot;
<  Set
 >   <Version1>.1/<Vers>io<n
  /Set
 /Ass>ignMessage

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

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

<AssignMessage name="AM-set-versi>on-<2&q>uot;
<  Set
 >   Version{m<y_versio>n}/<Vers>ion<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

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

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

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

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

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

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

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

<AssignMessage name="AM-assign>to-2<" 
  AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo 
/AssignMessage

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

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

ตัวอย่าง 1s97

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

<AssignMessage name="AssignMessa>ge-<3"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo
  Copy
    Headers
>     <Header n>ame<=&quo>t;u<ser>-agen<t"/
  >  /Head<ers
  /Copy
  Set
    Que>ryParams
      QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam
    /QueryParams
 >   VerbG<ET/Verb
  /Set
  IgnoreUnr>e<solvedVariable>sfalse
  /IgnoreUnresolvedVariables
/AssignMessage

ตัวอย่างนี้

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

ตัวอย่าง 2s98

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

<AssignMessage name="AssignMessa>ge-<2"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o
  Set
    VerbPOST/Verb
    >Payload< conten><tType=&qu>ot;<text/xml&q><uot;
   >   re<questope>rat<ion1>0<5/operation/re>quest
    /Payload
  /Set
/AssignMessage

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

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

<AssignMessage name="custom-request-1-ac>ces<s"
  D>isplayNamecustom-reques<t-1-access/D>isp<layName
>  AssignTopartn<er.reques>t/A<ssi>gnTo
<  Set
 >   Head<ers
      Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader>
<    /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="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 เพื่อส่งคำขอไปยังบริการภายนอก