Chính sáchassignMessage

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Nội dung

Chính sách AttributionMessage sẽ thay đổi hoặc tạo các thông báo yêu cầu và phản hồi mới trong Luồng proxy API. Chính sách này cho phép bạn thực hiện những thao tác sau đối với những thư đó:

  • Thêm thông số biểu mẫu, tiêu đề hoặc tham số truy vấn mới vào thư
  • Sao chép các thuộc tính hiện có từ thông báo này sang thông báo khác
  • Xoá tiêu đề, tham số truy vấn, tham số biểu mẫu và/hoặc thông báo các gói dữ liệu từ một tin nhắn
  • Đặt giá trị của các tài sản hiện có trong một thông báo

Với chính sách AttributionMessage, bạn thường thêm, thay đổi hoặc xoá các thuộc tính của yêu cầu hoặc phản hồi. Tuy nhiên, bạn cũng có thể sử dụng chính sách AttributionMessage để tạo một yêu cầu/phản hồi và chuyển thông báo này đến một mục tiêu thay thế, như được mô tả trong Tạo thông báo theo yêu cầu tuỳ chỉnh.

Chính sách AttributionMessage có thể tạo hoặc thay đổi các biến luồng với phần tử con sau đây phần tử:

<AssignMessage> phần tử

Xác định chính sách AttributionMessage.

Giá trị mặc định Xem tab Chính sách mặc định bên dưới
Bắt buộc? Bắt buộc
Loại Đối tượng phức tạp
Phần tử mẹ không áp dụng
Phần tử con <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

Phần tử <AssignMessage> sử dụng cú pháp sau:

Cú pháp

Phần tử <AssignMessage> sử dụng cú pháp sau:

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

Chính sách mặc định

Ví dụ sau đây cho thấy các chế độ cài đặt mặc định khi bạn thêm một chính sách AttributionMessage vào quy trình của bạn trong giao diện người dùng 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>

Khi bạn chèn chính sách AttributionMessage mới trong giao diện người dùng Edge, mẫu này sẽ chứa các mã giả lập cho tất cả các thao tác có thể thực hiện. Thông thường, bạn chọn(các) thao tác mình muốn thực hiện bằng chính sách này và xoá các phần tử con còn lại. Ví dụ: nếu bạn muốn thực hiện thao tác sao chép, hãy sử dụng phần tử <Copy> và xoá <Add>, <Remove> và các phần tử con khác khỏi phần tử cho dễ đọc hơn.

Phần tử này có các thuộc tính chung cho tất cả các chính sách:

Thuộc tính Mặc định Bắt buộc? Nội dung mô tả
name Không áp dụng Bắt buộc

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

Nếu muốn, hãy sử dụng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy của giao diện người dùng quản lý bằng một tên ngôn ngữ tự nhiên khác.

continueOnError sai Không bắt buộc Đặt thành "false" để trả về lỗi khi một chính sách không thành công. Đây là hành vi dự kiến đối với hầu hết các chính sách. Đặt thành "true" để tiếp tục thực thi luồng ngay cả sau khi chính sách không hoạt động.
enabled true Không bắt buộc Đặt thành "true" để thực thi chính sách này. Đặt thành "false" để "tắt" chính sách này. Chính sách sẽ không được thực thi ngay cả khi vẫn được liên kết với một luồng.
async   sai Không được dùng nữa Thuộc tính này không còn được dùng nữa.

Bảng sau đây cung cấp mô tả cấp cao về các phần tử con của <AssignMessage>:

Phần tử con Bắt buộc? Mô tả
Toán tử phổ biến
<Add> Không bắt buộc Thêm thông tin vào đối tượng thông báo được chỉ định bởi <AssignTo>.

<Add> thêm tiêu đề hoặc tham số vào thông báo không tồn tại trong thư gốc . Để ghi đè tiêu đề hoặc tham số hiện có, hãy sử dụng phần tử <Set>.

<Copy> Không bắt buộc Sao chép thông tin từ thông báo do source chỉ định cho đối tượng thông báo do phần tử <AssignTo> chỉ định.
<Remove> Không bắt buộc Xoá các phần tử được chỉ định khỏi biến tin nhắn được chỉ định trong Phần tử <AssignTo>.
<Set> Không bắt buộc Thay thế các giá trị của thuộc tính hiện có trên yêu cầu hoặc phản hồi, được chỉ định bởi phần tử <AssignTo>.

<Set> ghi đè các tiêu đề hoặc tham số đã tồn tại trong bản gốc . Để thêm tiêu đề hoặc tham số mới, hãy sử dụng phần tử <Add>.

Các phần tử con khác
<AssignTo> Không bắt buộc Chỉ định thông báo nào mà chính sách AttributionMessage hoạt động. Đây có thể là yêu cầu/phản hồi hay có thể là tin nhắn tuỳ chỉnh mới.
<AssignVariable> Không bắt buộc Chỉ định giá trị cho biến luồng. Nếu biến không tồn tại, thì <AssignVariable> tạo ra nó.
<IgnoreUnresolvedVariables> Không bắt buộc Xác định xem quá trình xử lý có dừng khi gặp biến chưa được giải quyết hay không.

Mỗi phần tử con trong số này được mô tả trong các phần tiếp theo.

Ví dụ

Các ví dụ sau đây trình bày một số cách mà bạn có thể sử dụng chính sách SendMessage chính sách của Google:

1: Thêm tiêu đề

Ví dụ sau đây sẽ thêm một tiêu đề vào yêu cầu bằng thuộc tính Phần tử <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: Xoá tải trọng

Ví dụ sau đây sẽ xoá tải trọng khỏi phản hồi bằng <Remove> phần tử:

<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: Sửa đổi câu trả lời

Ví dụ sau đây sửa đổi một đối tượng phản hồi hiện có bằng cách thêm tiêu đề vào đối tượng đó:

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

Ví dụ này không tạo ra thông báo mới. Thay vào đó, công cụ này sẽ sửa đổi một bằng cách thêm tiêu đề HTTP.

Vì ví dụ này bỏ qua tên biến trong phần tử <AssignTo> và chỉ định type làm "phản hồi", chính sách này sửa đổi đối tượng phản hồi mà mục tiêu trả về máy chủ.

Tiêu đề HTTP mà chính sách này thêm vào thông báo phản hồi được lấy từ một biến được điền bởi chính sách LookupCache. Do đó, tin nhắn phản hồi được sửa đổi bởi Gán chính sách Thông báo có chứa tiêu đề HTTP cho biết kết quả đã được được lấy từ bộ nhớ đệm hay không. Việc đặt tiêu đề trong phản hồi có thể hữu ích khi gỡ lỗi và khắc phục sự cố.

4: Đặt nội dung động

Bạn có thể sử dụng tính năng Chỉ định thông báo để nhúng nội dung động vào tải trọng của phản hồi và yêu cầu tin nhắn.

Để nhúng các biến luồng Edge vào một tải trọng XML, hãy gói biến được chỉ định trong dấu ngoặc nhọn dấu ngoặc nhọn, như sau: {prefix.name}.

Ví dụ sau đây nhúng giá trị của biến luồng tiêu đề HTTP user-agent trong phần tử XML có tên là 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>

Đối với các tải trọng JSON, bạn có thể chèn các biến bằng cách sử dụng variablePrefix và Thuộc tính variableSuffix có các ký tự phân tách như được thể hiện trong các thuộc tính sau ví dụ:

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

Để xem danh sách đầy đủ các biến luồng, hãy xem Tài liệu tham khảo về biến luồng.

Kể từ bản phát hành đám mây 16.08.17, bạn cũng có thể sử dụng dấu ngoặc nhọn để chèn biến.

5: Xoá tham số truy vấn

Ví dụ sau đây xoá tham số truy vấn apikey khỏi yêu cầu:

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

Cách hay nhất là tách tham số truy vấn apikey khỏi yêu cầu khi bạn sử dụng chính sáchVerifyAPIKey để xác thực người dùng. Việc này là để tránh thông tin khoá nhạy cảm được truyền đến đích phụ trợ.

6: Đặt/nhận biến

Ví dụ sau đây sử dụng 3 chính sách Chỉ định tin nhắn:

  1. Tạo 3 biến luồng trong yêu cầu, với các giá trị tĩnh
  2. Tự động lấy các biến luồng trong chính sách thứ hai trong luồng yêu cầu
  3. Đặt chúng trong tải trọng của phản hồi
<!-- 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>

Trong chính sách đầu tiên, phần tử <AssignVariable> sẽ tạo và thiết lập giá trị các biến trong yêu cầu. Mỗi phần tử <Name> chỉ định tên biến và <Value> chỉ định giá trị.

Chính sách thứ hai sử dụng phần tử <AssignVariable> để đọc các giá trị và tạo ra 3 các biến mới:

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

Trong chính sách thứ hai, phần tử <Ref> sẽ tham chiếu đến biến nguồn, và các phần tử <Name> chỉ định tên của các biến mới. Nếu biến được tham chiếu bởi phần tử <Ref> không truy cập được, bạn có thể sử dụng giá trị do phần tử <Value> chỉ định.

Cách thử xem bộ chính sách này:

  1. Thêm chính sách số 1 và số 2 vào luồng yêu cầu. Hãy nhớ đặt chính sách số 1 trước chính sách #2.
  2. Thêm chính sách thứ ba vào quy trình phản hồi.
  3. Chính sách thứ ba sử dụng phần tử <Set> để thêm các biến vào phản hồi. Chiến lược phát hành đĩa đơn ví dụ sau đây tạo tải trọng XML trong phản hồi mà Edge trả về ứng dụng:
    <!-- 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>
    

    Lưu ý rằng cú pháp để truy cập vào các biến luồng trong <Set> là để gói các biến đó vào dấu ngoặc nhọn.

    Hãy nhớ đặt thuộc tính contentType của phần tử <Payload> thành "application/xml".

  4. Gửi yêu cầu đến proxy API của bạn; ví dụ:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Bạn có thể chuyển hướng kết quả thông qua một tiện ích như xmllint để XML được hiển thị trong một cấu trúc được định dạng đẹp:

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

    Nội dung của phản hồi phải có dạng như sau:

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

7: Nhận tiêu đề phản hồi của chú thích dịch vụ

Trong ví dụ sau, giả sử chính sách ServiceAnnotation nằm trong yêu cầu proxy API, và phản hồi chú thích chứa nhiều tiêu đề cùng tên (Set-Cookie). Giả sử biến phản hồi của Chú thích dịch vụ là biến mặc định calloutResponse, chính sách sau đây nhận Set-Cookie thứ hai giá trị tiêu đề.

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

Để liệt kê tất cả các giá trị tiêu đề, hãy sử dụng biến sau:

{calloutResponse.header.Set-Cookie.values}

Mỗi phần tử con trong tệp tham chiếu này đều có các ví dụ bổ sung. Để xem thêm ví dụ, hãy xem Ví dụ về assignMessage trên GitHub.

Tham chiếu phần tử con

Phần này mô tả các phần tử con của <AssignMessage>.

<Add>

Thêm thông tin vào yêu cầu hoặc phản hồi, được chỉ định bởi <AssignTo> .

Phần tử <Add> thêm các thuộc tính mới cho thông báo không có trong thông báo gốc . Để thay đổi giá trị của các tài sản hiện có, hãy sử dụng <Set> .

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Loại phức tạp
Phần tử mẹ <AssignMessage>
Phần tử con <FormParams>
<Headers>
<QueryParams>

Phần tử <Add> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sử dụng phần tử <FormParams> để nhận các giá trị của ba tham số chuỗi truy vấn từ yêu cầu ban đầu và đặt chúng làm tham số biểu mẫu trên yêu cầu thiết bị đầu cuối đích:

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

Ví dụ 2

Ví dụ sau đây sử dụng phần tử <Headers> để thêm phần tử Tiêu đề User-Agent đến yêu cầu điểm cuối đích:

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

Ví dụ 3

Ví dụ sau đây sử dụng phần tử <QueryParams> để thêm một truy vấn có giá trị tĩnh đối với yêu cầu:

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

Ví dụ này sử dụng <Add> trong luồng trước yêu cầu. Nếu bạn xem kết quả trong một công cụ chẳng hạn như công cụ Theo dõi, yêu cầu "http://httpbin.org/get" trở thành &quot;http://httpbin.org/get?myParam=42&quot;.

Các phần tử con của <Add> hỗ trợ thay thế chuỗi động, còn gọi là mẫu thư.

<FormParams> (con của <Add>)

Thêm thông số biểu mẫu mới vào thông báo yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời .

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm <FormParam> phần tử
Phần tử mẹ <Add>
Phần tử con <FormParam>

Phần tử <FormParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sẽ thêm một thông số biểu mẫu duy nhất ("answer") và một giá trị tĩnh ("42") vào yêu cầu:

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

Ví dụ 2

Ví dụ sau đây lấy giá trị của tham số chuỗi truy vấn name và thêm nó vào yêu cầu dưới dạng thông số biểu mẫu:

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

Lưu ý rằng ví dụ này không chỉ định mục tiêu bằng <AssignTo>. Chính sách này thêm vào yêu cầu.

Ví dụ 3

Ví dụ sau đây sẽ thêm nhiều thông số biểu mẫu vào yêu cầu:

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

Ví dụ này lấy các tham số chuỗi truy vấn từ yêu cầu ban đầu và thêm các tham số đó dưới dạng tham số biểu mẫu cho yêu cầu được gửi đến điểm cuối đích.

Bạn có thể sử dụng công cụ Theo dõi để xem luồng. Bạn sẽ thấy phần nội dung của yêu cầu chứa dữ liệu biểu mẫu được mã hoá URL, ban đầu được chuyển vào dưới dạng chuỗi truy vấn thông số:

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

Bạn chỉ có thể sử dụng <FormParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: POST
  • Loại thông báo: Yêu cầu
  • Một (hoặc cả hai) trong số sau:
    • Dữ liệu biểu mẫu: Đặt thành một giá trị nào đó hoặc "" (chuỗi trống). Ví dụ: với curl thân mến! Hãy thêm -d "" vào yêu cầu của bạn.
    • Tiêu đề Content-Length: Đặt thành 0 (nếu không có dữ liệu trong phần tử yêu cầu ban đầu; nếu không thì độ dài hiện tại, tính bằng byte). Ví dụ: với curl thêm -H "Content-Length: 0" vào yêu cầu của bạn.

Ví dụ:

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

Khi bạn thêm <FormParams>, Edge sẽ đặt tiêu đề Content-Type của yêu cầu thành &quot;application/x-www-form-urlencoded&quot; trước khi gửi tin nhắn đến dịch vụ đích.

<Headers> (con của <Add>)

Thêm tiêu đề mới vào yêu cầu hoặc phản hồi được chỉ định, do hàm Phần tử <AssignTo>.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm <Header> phần tử
Phần tử mẹ <Add>
Phần tử con <Header>

Phần tử <Headers> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sẽ thêm tiêu đề user-agent vào thông báo yêu cầu, và sẽ chỉ định giá trị của biến luồng request.user.agent cho tiêu đề đó.

<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> (con của <Add>)

Thêm các tham số truy vấn mới vào yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm <QueryParam> phần tử
Phần tử mẹ <Add>
Phần tử con <QueryParam>

Phần tử <QueryParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sẽ thêm tham số truy vấn "myParam" cho yêu cầu và chỉ định giá trị "42" vào cuộc trò chuyện:

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

Bạn chỉ có thể sử dụng <QueryParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: GET
  • Loại thông báo: Yêu cầu

Ngoài ra, bạn chỉ có thể đặt tham số truy vấn khi phần tử <AssignTo> Thuộc tính type là một thông báo yêu cầu. Việc đặt chúng trên câu trả lời không có tác dụng.

Nếu bạn xác định một mảng trống các tham số truy vấn trong chính sách của mình (<Add><QueryParams/></Add>), chính sách này không thêm bất kỳ truy vấn nào tham số. Điều này cũng giống như việc bỏ qua <QueryParams>.

<AssignTo>

Xác định đối tượng mà chính sách AttributionMessage hoạt động. Có các lựa chọn sau:

  • Thông báo yêu cầu: request do proxy API nhận được
  • Thông báo phản hồi: response được máy chủ đích trả về
  • Thông báo tuỳ chỉnh: Đối tượng phản hồi hoặc yêu cầu tuỳ chỉnh

Lưu ý rằng trong một số trường hợp, bạn không thể thay đổi đối tượng mà chính sách AttributionMessage hoạt động. Ví dụ: bạn không thể sử dụng <Add> hay <Set> để thêm hoặc thay đổi tham số truy vấn (<QueryParams>) hoặc thông số biểu mẫu (<FormParams>) trên câu trả lời. Bạn chỉ có thể thao túng các tham số truy vấn và tham số biểu mẫu theo yêu cầu.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <AssignMessage>
Phần tử con Không có

Nếu bạn không chỉ định <AssignTo>, chính sách này sẽ hoạt động theo yêu cầu hoặc phản hồi mặc định, dựa vào nơi chính sách thực thi. Nếu thực thi chính sách trong quy trình yêu cầu, thì chính sách này sẽ ảnh hưởng đến thông báo yêu cầu. Nếu thực thi trong quy trình phản hồi thì chính sách sẽ ảnh hưởng đến phản hồi theo mặc định.

Phần tử <AssignTo> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây chỉ định rằng mục tiêu là yêu cầu ban đầu sẽ được gửi đến điểm cuối đích:

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

Bằng cách đặt createNew thành "false" (mặc định), ví dụ này sẽ không tạo yêu cầu mới. Mọi thao tác trong chính sách này đều ảnh hưởng đến yêu cầu ban đầu.

Ví dụ 2

Ví dụ sau đây sẽ tạo một đối tượng yêu cầu mới:

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

Khi bạn tạo một đối tượng yêu cầu hoặc phản hồi mới, các phần tử khác của chính sách PagingMessage (chẳng hạn như <Add>, <Set><Set>) hành động theo .

Bạn có thể truy cập vào đối tượng yêu cầu mới trong các chính sách khác sau trong quy trình này hoặc gửi đối tượng yêu cầu mới yêu cầu một dịch vụ bên ngoài kèm theo chính sách ServiceAnnotation.

Ví dụ 3

Ví dụ sau đây sẽ tạo một đối tượng yêu cầu mới có tên là "MyRequestObject":

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

Khi bạn tạo một đối tượng yêu cầu hoặc phản hồi mới, các phần tử khác của chính sách PagingMessage (chẳng hạn như <Add>, <Set><Set>) hành động theo .

Bạn có thể truy cập vào đối tượng yêu cầu mới trong các chính sách khác sau trong quy trình này hoặc gửi đối tượng yêu cầu mới yêu cầu một dịch vụ bên ngoài kèm theo chính sách ServiceAnnotation.

Bảng sau đây mô tả các thuộc tính của <AssignTo>:

Thuộc tính Mô tả Bắt buộc? Loại
createNew

Xác định xem chính sách này có tạo thông báo mới khi chỉ định giá trị hay không.

Nếu giá trị là "true" thì chính sách sẽ tạo một biến mới thuộc loại do type chỉ định ("yêu cầu" hoặc "phản hồi"). Nếu bạn không chỉ định tên của biến mới, thì chính sách sẽ tạo một yêu cầu mới hoặc đối tượng phản hồi, dựa trên giá trị của type.

Nếu giá trị là "false", thì chính sách sẽ phản hồi theo một trong 2 cách:

  • Nếu <AssignTo> có thể phân giải tên biến thành một yêu cầu hoặc phản hồi, thì biến này sẽ tiếp tục xử lý. Ví dụ: nếu chính sách nằm trong quy trình yêu cầu, thì biến sẽ là . Nếu chính sách nằm trong nội dung phản hồi, thì biến sẽ là của bạn.
  • Nếu <AssignTo> không thể được phân giải hoặc phân giải thành loại không phải thông báo, thì hàm chính sách gửi thông báo lỗi.

Nếu bạn không chỉ định createNew, chính sách này sẽ phản hồi theo một trong 2 cách:

  • Nếu <AssignTo> phân giải thành một tin nhắn thì quá trình xử lý sẽ chuyển sang .
  • Nếu không thể phân giải <AssignTo> hoặc phân giải thành loại không phải thông báo, thì biến thuộc loại được chỉ định trong type sẽ được tạo.
Không bắt buộc Boolean
transport

Chỉ định kiểu truyền tải cho loại thông báo yêu cầu hoặc thông báo phản hồi.

Giá trị mặc định là "http" (giá trị duy nhất được hỗ trợ).

Không bắt buộc Chuỗi
type Chỉ định loại của thông báo mới khi createNew là "true". Hợp lệ các giá trị là "request" hoặc "phản hồi".

Giá trị mặc định là "request". Nếu bạn bỏ qua thuộc tính này, thì Edge sẽ tạo một trong hai yêu cầu hoặc phản hồi, tuỳ thuộc vào vị trí mà chính sách này thực thi trong quy trình.

Không bắt buộc Chuỗi

<AssignVariable>

Gán giá trị cho biến luồng đích (ví dụ: biến có giá trị được đặt bởi chính sách AttributionMessage). Nếu biến luồng không tồn tại, thì <AssignVariable> sẽ tạo nó.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Loại phức tạp
Phần tử mẹ <AssignMessage>
Phần tử con <Name> (bắt buộc)
<Ref>
<Template>
<Value>

Giá trị mà bạn chỉ định cho biến luồng đích có thể là một trong những giá trị sau:

  • Chuỗi cố định: Sử dụng phần tử con <Value> để chỉ định một giá trị cố định giá trị chuỗi cho biến luồng đích.
  • Biến luồng: Sử dụng phần tử con <Ref> để chỉ định giá trị của một phần tử biến luồng hiện có cho biến luồng đích. Để xem danh sách đầy đủ các quy trình Các biến có thể dùng làm nguồn, hãy xem Tài liệu tham khảo về biến Luồng.
  • Mẫu thông báo: Sử dụng phần tử con <Template> để chỉ định một phần tử mẫu thông báo cho biến luồng đích.

Phần tử <AssignVariable> sử dụng cú pháp sau:

Cú pháp

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

Sử dụng phần tử <Ref> để chỉ định biến nguồn. Nếu biến không thể truy cập được tham chiếu bởi <Ref>, Edge sử dụng giá trị do phần tử <Value> chỉ định. Nếu bạn xác định <Template>, nó sẽ được ưu tiên hơn các phần tử con khác.

Ví dụ 1

Ví dụ sau đây đặt giá trị của một biến mới, myvar, thành giá trị cố định giá trị "42":

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

Ví dụ 2

Ví dụ sau đây chỉ định giá trị của biến luồng request.header.user-agent cho biến luồng đích myvar và giá trị của tham số truy vấn country đối với biến luồng đích 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>

Nếu một trong hai nhiệm vụ đó không thành công, Edge sẽ gán giá trị "ErrorOnCopy" đến biến luồng đích.

Nếu biến luồng myvar hoặc Country không tồn tại, <AssignVariable> tạo ra chúng.

Ví dụ 3

Ví dụ sau sử dụng <Template> phần tử con để nối hai biến ngữ cảnh có một chuỗi ký tự (dấu gạch nối) giữa chúng:

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

Cách sử dụng phổ biến cho <AssignVariable> là đặt giá trị mặc định cho tham số truy vấn, tiêu đề hoặc giá trị khác có thể được chuyển vào cùng với yêu cầu. Bạn thực hiện việc này bằng cách kết hợp cả Các phần tử con <Ref><Value>. Để biết thêm hãy xem ví dụ về <Ref>.

<Name> (con của <AssignVariable>)

Chỉ định tên của biến luồng đích (ví dụ: biến có giá trị được đặt bằng chính sách AttributionMessage). Nếu biến có tên trong <AssignVariable> không tồn tại, thì biến sẽ tạo một bản ghi có tên đó.

Giá trị mặc định không áp dụng
Bắt buộc? Bắt buộc
Loại Chuỗi
Phần tử mẹ <AssignVariable>
Phần tử con Không có

Phần tử <Name> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây chỉ định biến đích đến là myvar và đặt biến đó thành giá trị cố định "42":

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

Nếu myvar không tồn tại, <AssignVariable> sẽ tạo lớp đó.

<Ref> (con của <AssignVariable>)

Chỉ định nguồn của sự chỉ định dưới dạng biến luồng. Biến luồng có thể là một trong biến luồng được xác định trước (như liệt kê trong tài liệu tham khảo về biến luồng) hoặc biến luồng tuỳ chỉnh mà bạn đã tạo.

Giá trị của <Ref> luôn được hiểu là biến luồng; bạn không thể chỉ định một chuỗi ký tự dưới dạng giá trị. Để chỉ định một giá trị chuỗi cố định, hãy sử dụng phần tử <Value> thay thế.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <AssignVariable>
Phần tử con Không có

Khi bạn chỉ định một biến luồng bằng <Ref>, hãy bỏ dấu ngoặc nhọn "{}" mà bạn thường dùng để tham chiếu đến một biến luồng. Ví dụ: để đặt giá trị của biến mới thành giá trị của luồng client.host biến:

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

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

Để xác định giá trị mặc định cho biến luồng đích, hãy sử dụng <Value> kết hợp với <Ref>. Nếu biến luồng được chỉ định bởi <Ref> không tồn tại, không thể đọc hoặc rỗng, thì Edge sẽ gán giá trị này <Value> thành biến luồng đích.

Phần tử <Ref> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây chỉ định giá trị của biến luồng request.header.user-agent cho biến luồng đích myvar và giá trị của tham số truy vấn country thành biến 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>

Trong ví dụ này, Edge không được chỉ định giá trị mặc định (hoặc giá trị dự phòng) cho bài tập.

Ví dụ 2

Ví dụ sau đây sẽ chỉ định giá trị của biến luồng request.header.user-agent vào biến luồng đích myvar và giá trị của tham số truy vấn country thành biến 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>

Trong ví dụ này, nếu giá trị của biến luồng request.header.user-agent hoặc tham số truy vấn Country rỗng, không đọc được hoặc không đúng định dạng, Edge sẽ gán giá trị "ErrorOnCopy" cho các biến mới.

Ví dụ 3

Một trường hợp sử dụng phổ biến cho <AssignVariable> là đặt giá trị mặc định của truy vấn thông số, tiêu đề hoặc giá trị khác có thể được chuyển vào cùng với yêu cầu. Ví dụ: bạn tạo proxy API thời tiết, trong đó yêu cầu lấy một tham số truy vấn có tên là "w". Chiến dịch này chứa mã nhận dạng của thành phố mà bạn muốn nhận thông tin thời tiết. URL yêu cầu có biểu mẫu:

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

Để xác định giá trị mặc định cho "w", hãy tạo một chính sách AllowedMessage như sau:

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

Trong ví dụ này, <AssignVariable> nhận được giá trị của request.queryparam.w và gán đối tượng đó cho chính nó. Nếu biến luồng có giá trị rỗng, nghĩa là "w" tham số truy vấn cũ là loại bỏ khỏi yêu cầu, thì ví dụ này sử dụng giá trị mặc định từ Phần tử <Value>. Do đó, bạn có thể gửi yêu cầu đến API này proxy bỏ qua "w" tham số truy vấn:

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

...và vẫn yêu cầu proxy API trả về kết quả hợp lệ.

Không giống như khi sử dụng <Value>, giá trị của <Ref> phải là biến luồng, chẳng hạn như thuộc tính của request, response hoặc Đối tượng target. Giá trị này cũng có thể là một biến luồng tuỳ chỉnh mà bạn đã tạo.

Nếu bạn chỉ định một biến luồng không tồn tại cho giá trị <Ref>, và giá trị của <IgnoreUnresolvedVariables> là "true", Edge sẽ đưa ra thông báo lỗi.

<Template> (con của <AssignVariable>)

Chỉ định một mẫu thông báo. Tin nhắn cho phép bạn thực hiện việc thay thế chuỗi biến khi chính sách thực thi, và có thể kết hợp các chuỗi ký tự với tên biến được gói trong ngoặc dấu ngoặc nhọn. Ngoài ra, tin nhắn mẫu hỗ trợ như thoát và chuyển đổi chữ hoa chữ thường.

Sử dụng thuộc tính ref để chỉ định một biến luồng trong đó giá trị của biến là một mẫu tin nhắn. Ví dụ: bạn có thể lưu trữ mẫu tin nhắn dưới dạng thuộc tính tuỳ chỉnh trên ứng dụng của nhà phát triển. Khi Edge xác định được ứng dụng của nhà phát triển sau khi xác minh khoá API hoặc mã thông báo bảo mật (thông qua một chính sách bổ sung), <AssignVariable> có thể sử dụng mẫu thông báo có sẵn trong thuộc tính tuỳ chỉnh của ứng dụng dưới dạng biến luồng trong chính sách bảo mật. Ví dụ sau giả định thông báo có sẵn trong thuộc tính khách hàng có tên là message_template trên ứng dụng của nhà phát triển thực hiện lệnh gọi API, trong đó chính sáchVerifyAPIKey được dùng để xác minh khoá API của ứng dụng:

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

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <AssignVariable>
Phần tử con Không có

Phần tử <Template> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sử dụng cú pháp tạo mẫu thông báo để liên kết 2 biến ngữ cảnh có một chuỗi ký tự (dấu gạch nối) giữa chúng:

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

Ví dụ 2

Ví dụ sau đây chỉ định một biến luồng, trong đó giá trị của biến là một mẫu thông báo được xác định trước. Sử dụng tuỳ chọn này nếu bạn muốn chèn một mẫu được xác định trước tại mà không cần sửa đổi chính sách:

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

  </AssignVariable>
</AssignMessage>

Ví dụ 3

Ví dụ sau đây chỉ định một biến luồng và một giá trị văn bản. Trong trường hợp này, nếu biến được tham chiếu không rỗng, giá trị đó sẽ được dùng làm mẫu. Nếu giá trị tham chiếu giá trị là rỗng, thì giá trị văn bản (trong trường hợp này là {system.uuid}-{messageid}) sẽ được dùng làm mẫu. Mẫu này rất hữu ích khi cung cấp thông tin "ghi đè" giá trị, trong đó trong một số trường hợp, bạn muốn ghi đè mẫu mặc định (phần văn bản) bằng các giá trị được đặt linh động. Ví dụ: câu lệnh có điều kiện có thể lấy giá trị từ bản đồ khoá-giá trị và đặt biến được tham chiếu thành giá trị đó:

<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> (con của <AssignVariable>)

Xác định giá trị của biến luồng đích được đặt bằng <AssignVariable>. Chiến lược phát hành đĩa đơn giá trị luôn được hiểu là một chuỗi cố định; bạn không thể sử dụng biến luồng làm giá trị, thậm chí nếu bạn đặt giá trị trong dấu ngoặc ("{}"). Để dùng biến luồng, hãy sử dụng <Ref> thay thế.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <AssignVariable>
Phần tử con Không có

Khi được sử dụng kết hợp với phần tử <Ref>, <Value> đóng vai trò là giá trị mặc định (hoặc dự phòng). Nếu không chỉ định <Ref>, không thể giải quyết hoặc rỗng, giá trị <Value> được dùng.

Phần tử <Value> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt giá trị của biến luồng đích, myvar, thành giá trị cố định "42":

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

Ví dụ 2

Ví dụ sau đây chỉ định giá trị của biến luồng request.header.user-agent cho biến luồng myvar và giá trị của tham số truy vấn country thành biến 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>

Nếu một trong hai bài tập không thành công, <AssignVariable> sẽ gán giá trị "ErrorOnCopy" đến biến luồng đích.

<Copy>

Sao chép các giá trị từ thông báo do thuộc tính source chỉ định vào thông báo do phần tử <AssignTo> chỉ định. Nếu bạn không chỉ định một mục tiêu có <AssignTo>, thì chính sách này sẽ sao chép các giá trị vào yêu cầu hoặc phản hồi, tuỳ thuộc vào vị trí mà chính sách này thực thi trong quy trình.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <AssignMessage>
Phần tử con <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Phần tử <Copy> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sao chép tiêu đề, 3 thông số biểu mẫu, đường dẫn và tất cả các truy vấn thông số từ yêu cầu đến một yêu cầu tuỳ chỉnh mới:

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

Phần tử <Copy> có các thuộc tính như sau:

Thuộc tính Mô tả Bắt buộc? Loại
nguồn

Chỉ định đối tượng nguồn của bản sao.

  • Nếu bạn không chỉ định source, thì thông báo này sẽ được coi là một thông báo đơn giản. Cho Ví dụ: nếu chính sách này nằm trong quy trình yêu cầu, thì nguồn sẽ mặc định thành Đối tượng request. Nếu nằm trong quy trình phản hồi, chính sách này mặc định là Đối tượng response. Nếu bỏ qua source, bạn có thể sử dụng toán tử tuyệt đối tham chiếu đến một biến luồng làm nguồn của bản sao. Ví dụ: chỉ định giá trị với tên {request.header.user-agent}.
  • Nếu biến nguồn không thể được phân giải hoặc phân giải thành loại không phải là thông báo, <Copy> không phản hồi được.
Không bắt buộc Chuỗi

<FormParams> (con của <Copy>)

Sao chép các thông số biểu mẫu từ yêu cầu do Thuộc tính source của phần tử <Copy> cho yêu cầu do phần tử <AssignTo> chỉ định. Phần tử này không ảnh hưởng đến của bạn.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm các phần tử <FormParam> hoặc một mảng trống
Phần tử mẹ <Copy>
Phần tử con <FormParam>

Phần tử <FormParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sẽ sao chép một thông số biểu mẫu duy nhất từ yêu cầu sang yêu cầu tuỳ chỉnh "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>

Ví dụ 2

Ví dụ sau đây sẽ sao chép tất cả thông số biểu mẫu vào yêu cầu tuỳ chỉnh &quot;MyCustomRequest&quot;:

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

Ví dụ 3

Ví dụ sau đây sẽ sao chép 3 thông số biểu mẫu vào yêu cầu tuỳ chỉnh &quot;MyCustomRequest&quot;:

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

Ví dụ 4

Nếu có nhiều tham số biểu mẫu có cùng tên, hãy sử dụng cú pháp sau:

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

Ví dụ này sao chép "f1", "f2" và giá trị thứ hai của "f3". Nếu "f3" chỉ có một thì giá trị đó sẽ không được sao chép.

Bạn chỉ có thể sử dụng <FormParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: POST
  • Loại thông báo: Phản hồi
  • Một (hoặc cả hai) trong số sau:
    • Dữ liệu biểu mẫu: Đặt thành một giá trị nào đó hoặc "" (chuỗi trống). Ví dụ: với curl thân mến! Hãy thêm -d "" vào yêu cầu của bạn.
    • Tiêu đề Content-Length: Đặt thành 0 (nếu không có dữ liệu nào trong yêu cầu ban đầu; nếu không thì độ dài hiện tại. Ví dụ: với curl thêm -H "Content-Length: 0" vào yêu cầu của bạn.

Khi bạn sao chép <FormParams>, <Copy> sẽ đặt Content-Type của tin nhắn thành &quot;application/x-www-form-urlencoded&quot; trước khi gửi tin nhắn đến dịch vụ đích.

<Headers> (con của <Copy>)

Sao chép tiêu đề HTTP từ yêu cầu hoặc thông báo phản hồi do thuộc tính source của phần tử <Copy> cho yêu cầu hoặc tin nhắn phản hồi do phần tử <AssignTo> chỉ định.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Một mảng gồm các phần tử <Header> hoặc một mảng trống
Phần tử mẹ <Copy>
Phần tử con <Header>

Phần tử <Headers> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sẽ sao chép tiêu đề user-agent trong yêu cầu vào đối tượng yêu cầu mới, tuỳ chỉnh:

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

Ví dụ 2

Để sao chép tất cả tiêu đề, hãy dùng một phần tử <Headers> trống như ví dụ sau cho thấy:

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

Ví dụ 3

Nếu có nhiều tiêu đề trùng tên, hãy sử dụng cú pháp sau:

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

Ví dụ này sao chép "h1", "h2" và giá trị thứ hai của "h3". Nếu "h3" chỉ có một thì giá trị đó sẽ không được sao chép.

<Path> (con của <Copy>)

Xác định xem có nên sao chép đường dẫn từ yêu cầu nguồn sang đích đến hay không của bạn. Phần tử này không ảnh hưởng đến câu trả lời.

Nếu giá trị là "true" (đúng), chính sách này sẽ sao chép đường dẫn từ thông báo yêu cầu do Thuộc tính source của phần tử <Copy> với yêu cầu do phần tử <AssignTo> chỉ định.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Copy>
Phần tử con Không có

Phần tử <Path> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau cho biết rằng chính sách AllowedMessage phải sao chép đường dẫn từ nguồn yêu cầu đối với đối tượng yêu cầu tuỳ chỉnh mới:

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

Bạn chỉ có thể sử dụng <Path> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Yêu cầu

<Payload> (con của <Copy>)

Xác định xem có nên sao chép tải trọng từ nguồn sang đích hay không. Nguồn và đích có thể là yêu cầu hoặc phản hồi.

Nếu giá trị là "true" (đúng), chính sách này sẽ sao chép tải trọng từ thông báo do Thuộc tính source của phần tử <Copy> với thông báo do phần tử <AssignTo> chỉ định.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Copy>
Phần tử con Không có

Phần tử <Payload> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <Payload> thành "true" để tải trọng yêu cầu là sao chép từ yêu cầu sang phản hồi:

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

<QueryParams> (con của <Copy>)

Sao chép các tham số chuỗi truy vấn từ yêu cầu do Thuộc tính source của phần tử <Copy> với yêu cầu được chỉ định bởi phần tử <AssignTo>. Phần tử này không ảnh hưởng đến câu trả lời.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Một mảng gồm các phần tử <QueryParam> hoặc một mảng trống
Phần tử mẹ <QueryParam>
Phần tử con Không có

Phần tử <QueryParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau sẽ sao chép "my_param" từ yêu cầu sang một truy vấn mới. đối tượng yêu cầu tuỳ chỉnh:

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

Ví dụ 2

Ví dụ sau đây sẽ sao chép tất cả tham số truy vấn từ yêu cầu sang một thuộc tính tuỳ chỉnh mới đối tượng yêu cầu:

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

Ví dụ 3

Nếu có nhiều tham số truy vấn có cùng tên, hãy sử dụng cú pháp sau:

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

Ví dụ này sẽ sao chép "qp1", "qp2" và giá trị thứ hai của "qp3". Nếu "qp3" chỉ có một giá trị, thì giá trị đó sẽ không được sao chép.

Bạn chỉ có thể sử dụng <QueryParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: GET
  • Loại thông báo: Yêu cầu

<ReasonPhrase> (con của <Copy>)

Xác định xem có nên sao chép cụm từ lý do từ phản hồi nguồn sang phản hồi đích. Phần tử này không ảnh hưởng đến yêu cầu.

Nếu giá trị là "true" (đúng), chính sách này sẽ sao chép ReasonPhrase từ phản hồi được chỉ định bởi thuộc tính source của phần tử <Copy> cho phản hồi do phần tử <AssignTo> chỉ định.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Copy>
Phần tử con Không có

Phần tử <ReasonPhrase> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <ReasonPhrase> thành "true", điều này khiến <Copy> để sao chép cụm từ lý do từ phản hồi mặc định vào đối tượng phản hồi tuỳ chỉnh:

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

Bạn chỉ có thể sử dụng <ReasonPhrase> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Phản hồi

<StatusCode> (con của <Copy>)

Xác định xem mã trạng thái có được sao chép từ phản hồi nguồn sang đích hay không của bạn. Phần tử này không ảnh hưởng đến yêu cầu.

Nếu giá trị "true" (đúng), chính sách này sẽ sao chép mã trạng thái từ thông báo phản hồi được chỉ định trong thuộc tính source của phần tử <Copy> cho câu trả lời do phần tử <AssignTo> chỉ định.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Copy>
Phần tử con Không có

Phần tử <StatusCode> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <StatusCode> thành "true", việc này sẽ sao chép mã trạng thái từ đối tượng phản hồi mặc định sang đối tượng phản hồi mới tuỳ chỉnh:

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

Bạn chỉ có thể sử dụng <StatusCode> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Phản hồi

Việc sử dụng <StatusCode> phổ biến là để đảm bảo rằng phản hồi proxy có cùng trạng thái là phản hồi nhận được từ mục tiêu khi createNew của <AssignTo> được đặt thành "true".

<Verb> (con của <Copy>)

Xác định xem động từ HTTP có được sao chép từ yêu cầu nguồn sang đích hay không của bạn. Phần tử này không ảnh hưởng đến câu trả lời.

Nếu giá trị là "true", sẽ sao chép động từ có trong thuộc tính source của phần tử <Copy> vào yêu cầu được chỉ định trong phần tử <AssignTo>.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Copy>
Phần tử con Không có

Phần tử <Verb> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <Verb> thành "true", nghĩa là sẽ sao chép động từ trong thành một yêu cầu mới, tuỳ chỉnh:

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

Bạn chỉ có thể sử dụng <Verb> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Yêu cầu

<Version> (con của <Copy>)

Xác định xem phiên bản HTTP có được sao chép từ yêu cầu nguồn sang yêu cầu đích. Phần tử này không ảnh hưởng đến câu trả lời.

Nếu giá trị "true" (đúng), sẽ sao chép phiên bản HTTP tìm được trong thuộc tính source của phần tử <Copy> thành đối tượng do phần tử <AssignTo> chỉ định.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Copy>
Phần tử con Không có

Phần tử <Version> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <Version> thành "true" dựa trên yêu cầu, dữ liệu này sẽ sao chép phiên bản từ đối tượng yêu cầu mặc định thành đối tượng yêu cầu tuỳ chỉnh mới:

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

Bạn chỉ có thể sử dụng <Version> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Yêu cầu

<DisplayName>

Hãy sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong phần trình chỉnh sửa proxy giao diện người dùng quản lý với một cái tên khác, nghe tự nhiên hơn.

Phần tử <DisplayName> áp dụng chung cho mọi chính sách.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc. Nếu bạn bỏ qua <DisplayName>, giá trị của Thuộc tính name của chính sách được dùng
Loại Chuỗi
Phần tử mẹ &lt;PolicyElement&gt;
Phần tử con Không có

Phần tử <DisplayName> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ:

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

Phần tử <DisplayName> không có thuộc tính hoặc phần tử con.

<IgnoreUnresolvedVariables>

Xác định xem quá trình xử lý có dừng khi gặp biến chưa được giải quyết hay không.

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <AssignMessage>
Phần tử con Không có

Đặt thành true để bỏ qua các biến chưa được giải quyết và tiếp tục xử lý; nếu không false Giá trị mặc định là false.

Việc đặt <IgnoreUnresolvedVariables> thành true khác với việc đặt giá trị continueOnError của <AssignMessage> đến true trong đó dành riêng cho cài đặt và nhận giá trị của biến. Nếu bạn đặt continueOnError thành true, thì Edge sẽ bỏ qua tất cả các lỗi, chứ không chỉ các lỗi gặp phải khi sử dụng biến.

Phần tử <IgnoreUnresolvedVariables> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <IgnoreUnresolvedVariables> thành "true":

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

<Remove>

Xoá tiêu đề, tham số truy vấn, tham số biểu mẫu và/hoặc phần tải tin nhắn khỏi một tin nhắn. Tin nhắn có thể là một yêu cầu hoặc phản hồi. Bạn chỉ định thông báo <Remove> thực hiện bằng cách sử dụng phần tử <AssignTo>.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Loại phức tạp
Phần tử mẹ <AssignMessage>
Phần tử con <FormParams>
<Headers>
<Payload>
<QueryParams>

Một trường hợp sử dụng phổ biến cho <Remove> là xoá tham số truy vấn chứa thông tin nhạy cảm thông tin từ đối tượng yêu cầu đến để tránh truyền thông tin đó đến máy chủ phụ trợ.

Phần tử <Remove> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây xoá nội dung của thư khỏi câu trả lời:

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

Trong quy trình phản hồi, chính sách này sẽ xoá phần nội dung của phản hồi và chỉ trả về HTTP đến máy khách.

Ví dụ 2

Ví dụ sau đây xoá tất cả tham số biểu mẫu và tham số truy vấn khỏi yêu cầu:

<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> (con của <Remove>)

Xoá các thông số biểu mẫu được chỉ định khỏi yêu cầu. Phần tử này không ảnh hưởng đến của bạn.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm các phần tử <FormParam> hoặc một mảng trống
Phần tử mẹ <Remove>
Phần tử con <FormParam>

Phần tử <FormParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây xoá 3 thông số biểu mẫu khỏi yêu cầu:

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

Ví dụ 2

Ví dụ sau đây xoá tất cả thông số biểu mẫu khỏi yêu cầu:

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

Ví dụ 3

Nếu có nhiều tham số biểu mẫu có cùng tên, hãy sử dụng cú pháp sau:

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

Ví dụ này loại bỏ "f1", "f2" và giá trị thứ hai của "f3". Nếu "f3" chỉ có một thì giá trị đó sẽ không bị xoá.

Bạn chỉ có thể sử dụng <FormParams> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Yêu cầu
  • Content-Type: "application/x-www-form-url Chơi"

<Headers> (con của <Remove>)

Xoá các tiêu đề HTTP được chỉ định khỏi yêu cầu hoặc phản hồi, được chỉ định bởi Phần tử <AssignTo>.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm các phần tử <Header> hoặc một mảng trống
Phần tử mẹ <Remove>
Phần tử con <Header>

Phần tử <Headers> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây sẽ xoá tiêu đề user-agent khỏi yêu cầu:

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

Ví dụ 2

Ví dụ sau đây sẽ xoá tất cả tiêu đề khỏi yêu cầu:

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

Ví dụ 3

Nếu có nhiều tiêu đề trùng tên, hãy sử dụng cú pháp sau:

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

Ví dụ này loại bỏ "h1", "h2" và giá trị thứ hai của "h3" khỏi yêu cầu. Nếu "h3" chỉ có một giá trị, nên sẽ không bị xoá.

<Payload> (con của <Remove>)

Xác định xem <Remove> có xoá tải trọng trong yêu cầu hoặc phản hồi hay không, tức là do phần tử <AssignTo> chỉ định. Đặt thành "true" đến xoá tải trọng; ngược lại là "false". Giá trị mặc định là "false".

Giá trị mặc định Sai
Bắt buộc? Không bắt buộc
Loại Boolean
Phần tử mẹ <Remove>
Phần tử con Không có

Phần tử <Payload> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt <Payload> thành "true" để tải trọng yêu cầu là đã xoá:

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

<QueryParams> (con của <Remove>)

Xoá các tham số truy vấn đã chỉ định khỏi yêu cầu. Phần tử này không ảnh hưởng đến của bạn.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm các phần tử <QueryParam> hoặc một mảng trống
Phần tử mẹ <Remove>
Phần tử con <QueryParam>

Phần tử <QueryParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây xoá một tham số truy vấn khỏi yêu cầu:

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

Ví dụ 2

Ví dụ sau đây sẽ xoá tất cả tham số truy vấn khỏi yêu cầu:

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

Ví dụ 3

Nếu có nhiều tham số truy vấn có cùng tên, hãy sử dụng cú pháp sau:

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

Ví dụ này loại bỏ "qp1", "qp2" và giá trị thứ hai của "qp3" khỏi yêu cầu. Nếu "qp3" chỉ có một giá trị, nên sẽ không bị xoá.

Ví dụ 4

Ví dụ sau đây xoá tham số truy vấn apikey khỏi yêu cầu:

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

Bạn chỉ có thể sử dụng <QueryParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: GET
  • Loại thông báo: Yêu cầu

<Set>

Đặt thông tin trong yêu cầu hoặc thông báo phản hồi, được chỉ định bởi Phần tử <AssignTo>. <Set> ghi đè tiêu đề hoặc các thông số đã tồn tại trong thư gốc. Để tạo tiêu đề hoặc thông số mới, hãy sử dụng thay thế bằng phần tử <Add>.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Loại phức tạp
Phần tử mẹ <AssignMessage>
Phần tử con <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Phần tử <Set> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây cho thấy phần tử <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> (con của <Set>)

Ghi đè các thông số biểu mẫu hiện có trong một yêu cầu và thay thế chúng bằng các giá trị mới mà bạn chỉ định bằng phần tử này. Phần tử này không ảnh hưởng đến câu trả lời.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm <FormParam> phần tử
Phần tử mẹ <Set>
Phần tử con <FormParam>

Phần tử <FormParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt thông số biểu mẫu có tên là "myparam" với giá trị của Biến request.header.myparam trong một yêu cầu tuỳ chỉnh mới:

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

Bạn chỉ có thể sử dụng <FormParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: POST
  • Loại thông báo: Yêu cầu

Nếu bạn xác định thông số biểu mẫu trống trong chính sách của mình (<Add><FormParams/></Add>), chính sách không thêm bất kỳ biểu mẫu nào tham số. Điều này cũng giống như việc bỏ qua <FormParams>.

<Set> thay đổi Content-Type của tin nhắn thành &quot;application/x-www-form-urlencoded&quot; trước khi gửi đến điểm cuối đích.

<Headers> (con của <Set>)

Ghi đè tiêu đề HTTP hiện có trong yêu cầu hoặc phản hồi, được chỉ định bởi Phần tử <AssignTo>.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm <Header> phần tử
Phần tử mẹ <Set>
Phần tử con <Header>

Phần tử <Headers> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt tiêu đề user-agent thành giá trị của Biến 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>

Nếu bạn xác định tiêu đề trống trong chính sách (<Add><Headers/></Add>), chính sách này không thêm tiêu đề. Chiến dịch này cũng giống như việc bỏ qua <Headers>.

<Path> (con của <Set>)

<Payload> (con của <Set>)

Xác định nội dung thông báo cho một yêu cầu hoặc phản hồi, được chỉ định bởi Phần tử <AssignTo>. Tải trọng có thể là bất kỳ loại nội dung hợp lệ nào, chẳng hạn như văn bản, JSON hoặc XML.

Giá trị mặc định chuỗi trống
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <Set>
Phần tử con Không có

Phần tử <Payload> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây thiết lập một tải trọng văn bản thuần tuý:

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

Ví dụ 2

Ví dụ sau đây sẽ thiết lập một tải trọng JSON:

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

Ví dụ 3

Ví dụ sau đây sẽ chèn các giá trị biến vào tải trọng bằng cách gói tên biến trong dấu ngoặc nhọn:

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

Trong các phiên bản cũ hơn của Apigee Edge, ví dụ: trước bản phát hành đám mây 16.08.17, bạn có thể không được sử dụng dấu ngoặc nhọn để biểu thị các tham chiếu biến trong tải trọng JSON. Trong các bản phát hành đó, bạn cần phải dùng các thuộc tính variablePrefixvariableSuffix để chỉ định các ký tự phân tách và sử dụng các ký tự đó để gói tên biến, như sau:

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

Cú pháp cũ hơn này vẫn hoạt động.

Ví dụ 4

Nội dung của <Payload> được coi là một mẫu thông báo. Điều này có nghĩa là Chính sách AttributionMessage thay thế các biến được đặt trong dấu ngoặc nhọn bằng giá trị của thuộc tính trong thời gian chạy.

Ví dụ sau đây sử dụng cú pháp dấu ngoặc nhọn để đặt một phần của tải trọng thành giá trị biến:

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

Bảng sau đây mô tả các thuộc tính của <Payload>:

Thuộc tính Mô tả Sự hiện diện Loại
contentType

Nếu được chỉ định, giá trị của contentType sẽ được gán cho Tiêu đề HTTP Content-Type.

Không bắt buộc Chuỗi
variablePrefix Nếu muốn, hãy chỉ định dấu phân cách phía trước trên biến luồng. Giá trị mặc định là "{". Cho để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến Luồng. Không bắt buộc Char
variableSuffix Nếu muốn, hãy chỉ định dấu phân cách ở cuối trên một biến luồng. Mặc định là "}". Cho để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến Luồng. Không bắt buộc Char

<QueryParams> (con của <Set>)

Ghi đè các tham số truy vấn hiện có trong yêu cầu bằng các giá trị mới. Phần tử này không có tác dụng về một câu trả lời.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Mảng gồm <QueryParam> phần tử
Phần tử mẹ <Set>
Phần tử con <QueryParam>

Phần tử <QueryParams> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt "địa chỉ" với giá trị của Biến request.header.address:

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

Bạn chỉ có thể sử dụng <QueryParams> khi đáp ứng các tiêu chí sau:

  • Động từ HTTP: GET
  • Loại thông báo: Yêu cầu

Nếu bạn xác định tham số truy vấn trống trong chính sách (<Set><QueryParams/></Set>), chính sách không đặt bất kỳ truy vấn nào tham số. Điều này cũng giống như việc bỏ qua <QueryParams>.

<ReasonPhrase> (con của <Set>)

Đặt cụm từ lý do cho câu trả lời. Bước này thường được thực hiện khi gỡ lỗi kết hợp với <StatusCode>. Phần tử này không ảnh hưởng đến yêu cầu.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi
Phần tử mẹ <Set>
Phần tử con Không có

Phần tử <ReasonPhrase> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây xác định một cụm từ lý do đơn giản:

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

Ví dụ 2

Nội dung của <ReasonPhrase> được coi là một mẫu thông báo. Điều này có nghĩa là tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của biến được tham chiếu, như trong ví dụ sau:

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

Bạn chỉ có thể sử dụng <ReasonPhrase> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Phản hồi

<StatusCode> (con của <Set>)

Đặt mã trạng thái trên phản hồi. Phần tử này không ảnh hưởng đến yêu cầu.

Giá trị mặc định "200" (khi thuộc tính createNew của <AssignTo> được đặt thành 'true')
Bắt buộc? Không bắt buộc
Loại Chuỗi hoặc variable
Phần tử mẹ <Set>
Phần tử con Không có

Phần tử <StatusCode> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt mã trạng thái đơn giản:

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

Ví dụ 2

Nội dung của <StatusCode> được coi là một mẫu thông báo. Điều này có nghĩa là tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của biến được tham chiếu, như trong ví dụ sau:

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

Bạn chỉ có thể sử dụng <StatusCode> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Phản hồi

<Verb> (con của <Set>)

Đặt động từ HTTP trên yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi hoặc variable
Phần tử mẹ <Set>
Phần tử con Không có

Phần tử <Verb> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt một động từ đơn giản cho yêu cầu:

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

Ví dụ 2

Nội dung của <Verb> được coi là một mẫu thông báo. Điều này có nghĩa là tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của tham chiếu biến.

Ví dụ sau đây sử dụng một biến để điền một động từ:

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

Bạn chỉ có thể sử dụng <Verb> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Yêu cầu

<Version> (con của <Set>)

Thiết lập phiên bản HTTP trên một yêu cầu. Phần tử này không ảnh hưởng đến câu trả lời.

Giá trị mặc định không áp dụng
Bắt buộc? Không bắt buộc
Loại Chuỗi hoặc variable
Phần tử mẹ <Set>
Phần tử con Không có

Phần tử <Version> sử dụng cú pháp sau:

Cú pháp

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

Ví dụ 1

Ví dụ sau đây đặt số phiên bản thành "1.1":

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

Ví dụ 2

Sau đây là cách sử dụng biến trong dấu ngoặc nhọn để đặt số phiên bản:

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

Nội dung của <Version> được coi là một mẫu thông báo. Điều này có nghĩa là tên biến được đặt trong dấu ngoặc nhọn sẽ được thay thế trong thời gian chạy bằng giá trị của thuộc tính biến.

Bạn chỉ có thể sử dụng <Version> khi đáp ứng các tiêu chí sau:

  • Loại thông báo: Yêu cầu

Tạo thông báo cho yêu cầu tuỳ chỉnh

Bạn có thể sử dụng chính sách AttributionMessage để tạo thông báo yêu cầu tuỳ chỉnh. Sau khi bạn tạo một nhóm quảng cáo tuỳ chỉnh yêu cầu, bạn có thể sử dụng theo các cách sau:

  • Truy cập vào các biến của nó trong các chính sách khác
  • Truyền đến dịch vụ bên ngoài

Để tạo thông báo yêu cầu tuỳ chỉnh, hãy sử dụng phần tử <AssignTo> trong chính sách của ApplyMessage . Đặt createNew thành "true" và chỉ định tên của thư mới trong phần nội dung của phần tử, như trong ví dụ sau:

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

Theo mặc định, Edge không làm gì với thông báo yêu cầu tuỳ chỉnh. Sau khi tạo xong, Edge sẽ tiếp tục thực hiện quy trình với yêu cầu ban đầu. Để sử dụng yêu cầu tuỳ chỉnh, hãy thêm một chính sách như dưới dạng chính sách ServiceAnnotation đến proxy của bạn để có thể chuyển yêu cầu tuỳ chỉnh tới một ứng dụng .

Sau đây là ví dụ về cách tạo thông báo yêu cầu tuỳ chỉnh:

Ví dụ 1

Ví dụ sau đây sẽ tạo một đối tượng yêu cầu tuỳ chỉnh bằng tính năng Gán tin nhắn:

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

Ví dụ sau:

  • Tạo một đối tượng thông báo yêu cầu mới có tên là "MyCustomRequest".
  • Trên MyCustomRequest, chính sách này:
    • Sao chép giá trị của tiêu đề HTTP user-agent từ URL đến đối với tin nhắn mới. Vì <Copy> sử dụng tham chiếu tuyệt đối đến Biến luồng user-agent, không có cần chỉ định thuộc tính source cho <Copy>.
    • Đặt tham số truy vấn address trên thông báo tuỳ chỉnh thành giá trị của tham số truy vấn addy của yêu cầu đến.
    • Đặt động từ HTTP thành GET.
  • Đặt <IgnoreUnresolvedVariables> thành "false". Khi <IgnoreUnresolvedVariables> là "false", nếu một trong các biến mà chính sách cố gắng thêm không tồn tại, Edge sẽ ngừng xử lý trong luồng API.

Ví dụ 2

Dưới đây là một ví dụ khác minh hoạ cách tạo đối tượng yêu cầu tuỳ chỉnh bằng thao tác Chỉ định Thông báo:

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

Ví dụ này sẽ tạo một yêu cầu tuỳ chỉnh mới có tên là "partner.request". Sau đó, phương pháp này sẽ đặt <Verb><Payload> về yêu cầu mới.

Bạn có thể truy cập vào thông báo yêu cầu tuỳ chỉnh trong một chính sách PagingMessage khác xuất hiện sau này trong luồng. Ví dụ sau đây sẽ lấy giá trị của thông báo yêu cầu tuỳ chỉnh Tiêu đề 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>

Video

Hãy xem các video sau để tìm hiểu thêm về chính sách AssignmentsMessage.

Video Mô tả
Lý do giao việc Chính sách về thư? Tìm hiểu về lợi ích của việc sử dụng chính sách OnlyMessage để sửa đổi yêu cầu API hoặc mà không sửa đổi mã phụ trợ.
Sao chép các thành phần API bằng chính sách AttributionMessage Sao chép các phần tử từ một yêu cầu hoặc phản hồi API và tạo một yêu cầu hoặc phản hồi mới bằng cách sử dụng chính sách SendMessage.
Xoá API các phần tử sử dụng chính sách AttributionMessage Xoá các phần tử API và sửa đổi API trước khi API đó tiếp cận phần phụ trợ mục tiêu bằng cách sử dụng Chính sách AttributionMessage.
Thêm và đặt API các phần tử sử dụng chính sách AttributionMessage Thay đổi yêu cầu hoặc phản hồi API bằng cách thêm tham số truy vấn, tiêu đề, tham số biểu mẫu hoặc tải trọng dữ liệu bằng cách sử dụng chính sách SendMessage.
Tạo mục tiêu tuỳ chỉnh các biến bằng chính sách AttributionMessage Đặt các biến luồng tuỳ chỉnh bằng chính sách AttributionMessage và tận dụng các biến trong các chính sách khác trong proxy API.
Tạo mới đối tượng yêu cầu hoặc phản hồi bằng chính sách AddMessage Tạo đối tượng phản hồi hoặc yêu cầu API mới bằng chính sách AttributionMessage tại API thời gian chạy.
Tạo API mô phỏng bằng chính sách AttributionMessage Tạo một API REST mô phỏng đơn giản bằng cách thêm chính sách PagingMessage vào phản hồi luồng.
Thiết lập hoặc sửa đổi tải trọng bằng cách sử dụng chính sách SendMessage Chuyển đổi yêu cầu REST thành yêu cầu SOAP bằng cách đặt Tải trọng SOAP bằng chính sách AssignmentsMessage chính sách trong thời gian chạy API.

Mã lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng để biết bạn có đang phát triển các quy tắc lỗi để xử lý lỗi hay không. Để tìm hiểu thêm, hãy xem bài viết Những điều cần biết về lỗi liên quan đến chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi chính sách thực thi.

Mã lỗi Trạng thái HTTP Nguyên nhân Cách khắc phục
steps.assignmessage.SetVariableFailed 500 Chính sách này không đặt được biến. Xem chuỗi lỗi để biết tên của biến chưa được phân giải.
steps.assignmessage.VariableOfNonMsgType 500

Lỗi này xảy ra nếu thuộc tính source trong phần tử <Copy> được đặt thành một biến không thuộc loại message.

Biến loại thông báo đại diện cho toàn bộ yêu cầu và phản hồi HTTP. Các biến luồng Edge tích hợp sẵn request, responsemessage thuộc loại thông báo. Để tìm hiểu thêm về các biến thông báo, hãy xem Tài liệu tham khảo về biến.

steps.assignmessage.UnresolvedVariable 500

Lỗi này xảy ra nếu một biến được chỉ định trong chính sách Chỉ định thông báo là:

  • ngoài phạm vi (không có trong luồng cụ thể mà chính sách đang được thực thi)
  • hoặc
  • không thể phân giải (chưa được xác định)

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai một proxy chứa chính sách này.

Tên lỗi Nguyên nhân Cách khắc phục
InvalidIndex Nếu chỉ mục được chỉ định trong phần tử <Copy> và/hoặc <Remove> của chính sách Chỉ định thông báo là 0 hoặc số âm, thì việc triển khai Proxy API sẽ không thành công.
InvalidVariableName Nếu phần tử con <Name> trống hoặc không được chỉ định trong phần tử <AssignVariable>, thì việc triển khai proxy API sẽ không thành công vì không có tên biến hợp lệ để gán giá trị. Bạn phải nhập tên biến hợp lệ.
InvalidPayload Trọng tải được chỉ định trong chính sách là không hợp lệ.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi trong thời gian chạy. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi liên quan đến chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. assignmessage.AM-SetResponse.failed = true

Ví dụ về phản hồi khi gặp lỗi

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

Ví dụ về quy tắc lỗi

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

Giản đồ

Mỗi loại chính sách được xác định bằng một giản đồ XML (.xsd). Giản đồ chính sách để tham khảo đều có trên GitHub.

Chủ đề có liên quan

Đang hoạt động Bạn có thể xem các mẫu của chính sách AttributionMessage trong các mẫu Nền tảng API.

Để xem ví dụ nâng cao hơn về cách ghi đè target.url từ ProxyEndpoint, hãy xem bài viết này trên Cộng đồng Apigee.

Cách xem "đường dẫn đã đặt" trong chính sách về ServiceAnnotation, hãy tham khảo nội dung Tìm hiểu bằng cách làm ví dụ này trong mẫu GitHub của Apigee. Bạn chỉ cần sao chép kho lưu trữ và hãy làm theo hướng dẫn trong chủ đề đó. Ví dụ này sử dụng chính sách AttributionMessage để thiết lập một đường dẫn yêu cầu, sau đó sử dụng chính sách Chú thích dịch vụ để gửi yêu cầu đến một dịch vụ bên ngoài.