นโยบาย assignMessage

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

อะไร

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

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

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

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

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

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails.
enabled true Optional Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

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

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

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

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

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

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

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

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีที่คุณจะใช้นโยบายนโยบาย AssignMessage ได้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ใน Cloud รุ่น 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: ตั้งค่า/รับตัวแปร

ตัวอย่างต่อไปนี้ใช้นโยบายมอบหมายข้อความ 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: รับส่วนหัวการตอบกลับไฮไลต์ของบริการ

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

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

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

{calloutResponse.header.Set-Cookie.values}

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

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

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

<Add>

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

ตัวอย่างนี้ใช้ <Add> ในขั้นตอนการสมัครล่วงหน้า หากคุณดูผลลัพธ์ในเครื่องมือ เช่น เครื่องมือติดตาม คำขอไปยัง "http://httpbin.org/get" จะกลายเป็น "http://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-urlencrypted" ก่อนส่งข้อความไปยังบริการเป้าหมาย

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

<AssignTo>

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

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

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

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

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

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

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

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

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

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

  • หาก <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 รายการด้วยสตริงตามตัวอักษร (ขีดกลาง) ระหว่างตัวแปรดังกล่าว

<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 ให้ทำดังนี้

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

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

ตัวอย่าง 3

Use Case ที่พบบ่อยสำหรับ <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> เป็น "true" Edge จะแสดงข้อผิดพลาด

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

  </AssignVariable>
</AssignMessage>

ตัวอย่าง 3

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

<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-urlencrypted" ก่อนส่งข้อความไปยังบริการเป้าหมาย

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

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

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

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

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

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

หากเป็น "จริง" นโยบายนี้จะคัดลอก ReasonPhrase from การตอบกลับที่ระบุโดยแอตทริบิวต์ 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>)

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

<DisplayName>

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value n/a
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

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

Example

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

The <DisplayName> element has no attributes or child elements.

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

Use Case ที่พบบ่อยสำหรับ <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-url encrypted"

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

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

ตัวอย่าง 4

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

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

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

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

<Set>

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

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

ตัวอย่าง 3

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

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

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

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

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

ตัวอย่าง 4

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

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

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

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

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

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

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

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

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

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

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

ไวยากรณ์

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

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

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

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

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

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

ตัวอย่างที่ 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> เป็น "เท็จ" เมื่อ <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
สร้าง Mock API โดยใช้นโยบาย AssignMessage สร้าง REST API จำลองแบบง่ายโดยการเพิ่มนโยบาย AssignMessage ในขั้นตอนการตอบสนอง
ตั้งค่าหรือแก้ไขเพย์โหลดโดยใช้นโยบาย AssignMessage แปลงคำขอ REST เป็นคำขอ SOAP โดยการตั้งค่าเพย์โหลด SOAP โดยใช้นโยบาย AssignMessage ที่รันไทม์ของ API

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

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.assignmessage.SetVariableFailed 500 The policy was not able to set a variable. See the fault string for the name of the unresolved variable.
steps.assignmessage.VariableOfNonMsgType 500

This error occurs if the source attribute in the <Copy> element is set to a variable which is not of type message.

Message type variables represent entire HTTP requests and responses. The built-in Edge flow variables request, response, and message are of type message. To learn more about message variables, see the Variables reference.

steps.assignmessage.UnresolvedVariable 500

This error occurs if a variable specified in the Assign Message policy is either:

  • out of scope (not available in the specific flow where the policy is being executed)
  • or
  • can't be resolved (is not defined)

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidIndex If the index specified in the <Copy> and/or <Remove> elements of the Assign Message policy is 0 or a negative number, then deployment of the API Proxy fails.
InvalidVariableName If the child element <Name> is empty or not specified in the <AssignVariable> element, then the deployment of the API proxy fails because there is no valid variable name to which to assign a value. A valid variable name is required.
InvalidPayload A payload specified in the policy is invalid.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. assignmessage.AM-SetResponse.failed = true

Example error response

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

Example fault rule

<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

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

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