Tài liệu tham khảo về cấu hình luồng

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

Phần này cung cấp thông tin tham khảo về các phần tử XML mà bạn sử dụng để xác định luồng proxy API của mình.

Hệ phân cấp và cú pháp

Các ví dụ sau đây cho thấy hệ phân cấp phần tử và cú pháp của các phần tử cấu hình luồng:

Hệ phân cấp phần tử

Ví dụ sau đây cho thấy hệ phân cấp của các phần tử cấu hình luồng trong các phần tử <ProxyEndpoint><TargetEndpoint>:

<ProxyEndpoint | TargetEndpoint>
    <PreFlow>
          <Request>
                <Step>
                    <Condition>
                    <Name>
          <Response>
                <Step>
                    <Condition>
                    <Name>
          <Description>
    <Flows>
          <Flow>
                <Description>
                <Condition>
                <Request>
                      <Step>
                          
                <Response>
                      <Step>
                          
          <Description>
    <PostFlow>
          <Request>
                <Step>
                    
          <Response>
                <Step>
                    
          <Description>
    <PostClientFlow> (<ProxyEndpoint> only)
          <Response>
                
          <Description>

      // Additional configuration elements

</ProxyEndpoint | TargetEndpoint>

Cú pháp

Ví dụ sau đây cho thấy cú pháp của các phần tử cấu hình luồng. Mỗi phần tử trong số này được mô tả chi tiết trong các phần sau:

<!-- ProxyEndpoint flow configuration file -->
<ProxyEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  <PostClientFlow name="flow_name">
    <Description>flow_description</Description>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

<!-- TargetEndpoint flow configuration file -->
<TargetEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
    ...
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  ...
</TargetEndpoint>

Bạn sử dụng các phần tử này để xác định quá trình thực thi PreFlow, condition Flow, PostFlow và PostClientFlow.

<Condition>

Xác định một câu lệnh được xử lý trong thời gian chạy. Nếu câu lệnh được đánh giá là true (đúng), thì bước hoặc quy trình liên kết với điều kiện sẽ được thực thi. Nếu câu lệnh được đánh giá là false thì bước hoặc quy trình này sẽ bị bỏ qua.

Loại Chuỗi
(Các) Phần tử gốc <Flow>
<Step>
(Các) phần tử con Không có

Bạn có thể áp dụng một điều kiện cho một bước cụ thể hoặc cho toàn bộ quy trình, tuỳ thuộc vào việc bạn đặt phần tử đó vào phần tử <Flow> hay <Step>:

// Condition can apply to just one step:        // Or to the flow:
<Flows>                                         <Flows>
  <Flow>                                          <Flow>
    <Step>                                          <Condition>
      <Condition>                                   <Step>
      <Name>                                          <Name>
      ...                                             ...
    ...                                             ...
  ...                                             ...
</Flows>                                        </Flows>

Nếu một điều kiện trong <Step> có giá trị là true (đúng), Edge sẽ thực thi bước đó. Nếu điều kiện được đánh giá là false (sai), Edge sẽ bỏ qua bước này.

Nếu một điều kiện trong <Flow> được đánh giá là true (đúng), Edge sẽ xử lý tất cả các bước trong quy trình. Nếu điều kiện được đánh giá là false (sai), Edge sẽ bỏ qua toàn bộ quy trình.

Cú pháp

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

<Condition>property operator "value"</Condition>

Trong trường hợp:

property
Thuộc tính biến luồng mà bạn muốn sử dụng trong điều kiện của mình. Ví dụ: biến luồng request có các thuộc tính tên là pathcontent. Để sử dụng chúng trong một điều kiện, bạn cần chỉ định flow_variable[chấm]property_name:
request.path
request.content

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

operator
Cấu trúc xác định cách đánh giá tình trạng của bạn. Sau đây là các toán tử phổ biến:
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

Để biết danh sách đầy đủ, hãy xem phần Toán tử trong tài liệu tham khảo về Điều kiện.

"value"
Giá trị để đánh giá thuộc tính biến luồng. Đây thường là một loại cơ bản, chẳng hạn như số nguyên hoặc chuỗi. Ví dụ: 200 hoặc "/mèo". Giá trị này có thể bao gồm các ký tự đại diện, chẳng hạn như dấu hoa thị và các ký tự khác để so khớp mẫu, như mô tả trong bài viết So khớp mẫu bằng câu lệnh có điều kiện.

Ví dụ 1

Ví dụ sau đây sẽ kiểm tra xem thuộc tính verb của biến luồng request có phải là "GET" hay không:

<!-- api-platform/reference/examples/flow-segments/condition-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  ...
</ProxyEndpoint>

Nếu yêu cầu là một "GET" thì ví dụ này sẽ thực thi chính sách "Log-Request-OK".

Ví dụ 2

Ví dụ sau đây sẽ kiểm tra mã phản hồi:

<!-- api-platform/reference/examples/flow-segments/condition-2.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

Tuỳ thuộc vào giá trị mã, một chính sách khác sẽ được thực thi.

Thuộc tính

Phần tử <Condition> không có thuộc tính nào.

Phần tử con

Phần tử <Condition> không có các phần tử con.

<Description>

Mô tả luồng bằng các thuật ngữ mà con người có thể đọc được. Hãy sử dụng phần tử này để cung cấp thông tin về quy trình cho chính bạn hoặc các nhà phát triển khác. Nội dung mô tả không hiển thị bên ngoài.

Loại Chuỗi
(Các) Phần tử gốc <Flow>
<PreFlow>
<PostFlow>
(Các) phần tử con Không có

Cú pháp

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

<Description>flow_description</Description>

Ví dụ:

Ví dụ sau đây cho thấy phần tử <Description> chỉ định mục đích của một luồng:

<!-- api-platform/reference/examples/flow-segments/description-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Thuộc tính

Phần tử <Description> không có thuộc tính nào.

Phần tử con

Phần tử <Description> không có các phần tử con.

<Flow>

Xác định một tập hợp các bước tuỳ chỉnh mà Edge thực thi.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <Flows>
(Các) phần tử con <Condition>
<Description>
<Request>
<Response>

Bạn có thể tuỳ ý chỉ định <Condition> trên <Flow>. Trong trường hợp đó, Edge chỉ thực thi các bước trong luồng nếu điều kiện đó được đánh giá là đúng (true). Nếu không, Edge sẽ bỏ qua toàn bộ quy trình.

Phần tử <Flows> có thể chứa nhiều phần tử <Flow>, mỗi phần tử có các bước và điều kiện riêng. Khi có nhiều phần tử <Flow>, Edge chỉ thực thi phần tử đầu tiên mà không có điều kiện nào hoặc điều kiện được đánh giá là true (đúng).

Bạn có thể xác định một luồng mặc định luôn thực thi (nếu không có luồng có điều kiện nào khác thực thi). Tuỳ thuộc vào cách định cấu hình proxy API, đây có thể là một công cụ hữu ích trong việc bảo vệ bạn khỏi các cuộc tấn công độc hại.

Cú pháp

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

<Flow name="conditional_flow_name">
  <Description>flow_description</Description>
  <Condition>property operator "value"</Condition>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</Flow>

Tất cả các phần tử con của <Flow> là không bắt buộc.

Ví dụ 1

Ví dụ sau đây cho thấy một <Flow> đơn giản luôn thực thi chính sách "Log-Message-OK":

<!-- api-platform/reference/examples/flow-segments/flow-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-flow">
    <Flow>
      <Request>
        <Step>
          <Name>Log-Message-OK</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Ví dụ 2

Ví dụ sau đây cho thấy một <Flow> với nhiều bước, mỗi bước có một điều kiện riêng:

<!-- api-platform/reference/examples/flow-segments/flow-2.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Ví dụ 3

Ví dụ sau đây cho thấy nhiều luồng trong một Luồng có điều kiện:

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge chỉ thực thi một luồng trong một phân đoạn; nó thực thi luồng đầu tiên không có điều kiện, hoặc luồng có điều kiện được phân giải thành true.

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <Flow>:

Thuộc tính Loại Mô tả
name Chuỗi (Bắt buộc) Mã nhận dạng duy nhất cho luồng. Ví dụ: "My-condition-Flow-1". Tên không được chứa dấu cách hoặc các ký tự đặc biệt khác.

Phần tử con

Bảng sau đây mô tả các phần tử con của <Flow>:

Phần tử con Loại Mô tả
<Condition> Chuỗi Xác định một câu lệnh có điều kiện được xử lý trong thời gian chạy. Nếu câu lệnh được đánh giá là true (đúng), thì luồng (và tất cả các bước của luồng) sẽ được thực thi. Nếu câu lệnh được đánh giá là false, thì luồng (và tất cả các bước của luồng) sẽ bị bỏ qua.
<Description> Chuỗi Cung cấp nội dung mô tả ngắn gọn về quy trình. Nội dung mô tả này không hiển thị bên ngoài.
<Request> Đối tượng phức tạp Xác định các bước và điều kiện cho phân đoạn yêu cầu.
<Response> Đối tượng phức tạp Chỉ định các bước và điều kiện cho phân đoạn phản hồi.

<Flows>

Không chứa hoặc chứa nhiều phần tử <Flow>.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <ProxyEndpoint>
<TargetEndpoint>
(Các) phần tử con <Flow>

Nếu có nhiều phần tử <Flow> trong <Flows> thì chỉ một <Flow> được thực thi. Đây sẽ là luồng đầu tiên không có <Condition> hoặc luồng có điều kiện được phân giải thành true.

Bạn có thể xác định một luồng mặc định luôn thực thi (nếu không có luồng nào khác thực thi). Tuỳ thuộc vào cách định cấu hình proxy API, đây có thể là một công cụ hữu ích trong việc bảo vệ bạn khỏi các cuộc tấn công độc hại.

Cú pháp

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

<Flows name="flow_name">
  <Flow name="conditional_flow_name">
    <Description>flow_description</Description>
    <Condition>property operator "value"</Condition>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </Flow>
</Flows>

Tất cả các phần tử con của <Flows> là không bắt buộc.

Ví dụ 1

Ví dụ sau đây cho thấy một phần tử <Flows> đơn giản có một <Flow>:

<!-- api-platform/reference/examples/flow-segments/flows-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge thực thi một trong các chính sách này dựa trên hậu tố của đường dẫn mà Edge thu thập từ biến luồng proxy. Nếu hậu tố đường dẫn khớp với cả hai điều kiện, thì Edge sẽ không thực thi luồng này.

Ví dụ 2

Ví dụ sau đây cho thấy nhiều phần tử <Flow> trong <Flows>, mỗi phần tử có một <Condition> riêng:

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge chỉ thực thi luồng đầu tiên trong một phân đoạn có điều kiện được đánh giá là true (đúng). Sau đó, Edge bỏ qua các luồng còn lại trong phân đoạn.

Ví dụ 3

Ví dụ sau đây cho thấy một <Flow> "mặc định":

<!-- api-platform/reference/examples/flow-segments/flows-3.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-conditional-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-conditional-flow-2">
      <Response>
        <Step>
          <Condition>response.header.someheader = "42"</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-default-flow">
      <Response>
        <Step>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge chỉ thực thi luồng đầu tiên trong một phân đoạn có điều kiện được đánh giá là true (đúng). Nếu không có luồng có điều kiện nào được thực thi, thì luồng thứ ba trong ví dụ này (không có điều kiện nào) sẽ thực thi.

Luồng mặc định có thể là một công cụ hữu ích trong việc bảo vệ chống lại các cuộc tấn công độc hại.

Thuộc tính

Phần tử <Flows> không có thuộc tính nào.

Phần tử con

Phần tử <Flows> có các phần tử con sau đây:

Phần tử con Loại Nội dung mô tả
<Flow> Đối tượng phức tạp Luồng xác định một tập hợp các bước có thể có trong Luồng có điều kiện.

<Name>

Chỉ định mã nhận dạng của chính sách để thực thi trong <Flow>.

Loại Chuỗi
(Các) Phần tử gốc <Step>
(Các) phần tử con Không có

Cú pháp

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

<Name>policy_name</Name>

Ví dụ:

Ví dụ sau đây cho thấy hai chính sách được thêm vào quy trình theo tên:

<!-- api-platform/reference/examples/flow-segments/name-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Thuộc tính

Phần tử <Name> không có thuộc tính nào.

Phần tử con

Phần tử <Name> không có các phần tử con.

<PostFlow>

Xác định các bước cần thực hiện trong PostFlow của yêu cầu và phản hồi.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <ProxyEndpoint>
<TargetEndpoint>
(Các) phần tử con <Description>
<Request>
<Response>

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

Cú pháp

<PostFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostFlow>

Ví dụ:

Ví dụ sau đây cho thấy một PostFlow với các bước cho cả yêu cầu và phản hồi được xác định:

<!-- api-platform/reference/examples/flow-segments/postflow-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Name>Set-Response-Headers</Name>
      </Step>
    </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <PostFlow>:

Thuộc tính Loại Mô tả
name Chuỗi Mã nhận dạng duy nhất cho luồng (duy nhất trong điểm cuối). Ví dụ: "My-PostFlow-1". Giá trị này không được bao gồm dấu cách hoặc các ký tự đặc biệt khác.

Phần tử con

Bảng sau đây mô tả các phần tử con của <PostFlow>:

Phần tử con Loại Mô tả
<Description> Chuỗi Cung cấp nội dung mô tả ngắn gọn về quy trình.
<Request> Đối tượng phức tạp Xác định các chính sách cần thực thi trong PostFlow của yêu cầu.
<Response> Đối tượng phức tạp Xác định các chính sách cần thực thi trong PostFlow của phản hồi.

<PostClientFlow>

Xác định các chính sách trong ProxyEndpoint chỉ thực thi sau khi một phản hồi được trả về cho ứng dụng. Những chính sách này thường ghi nhật ký những thông điệp liên quan đến phản hồi.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <ProxyEndpoint>
(Các) phần tử con <Description>
<Response>

Cú pháp

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

<PostClientFlow name="flow_name">
  <Description>flow_description</Description>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostClientFlow>

Tất cả các phần tử con của <PostClientFlow> là không bắt buộc.

Ví dụ:

Ví dụ sau đây cho thấy một PostClientFlow đơn giản thực thi một chính sách duy nhất:

<!-- api-platform/reference/examples/flow-segments/postclientflow-1.xml -->
<ProxyEndpoint name="default">
  <PostClientFlow name="my-postclientflows">
    <Description>My first PostClientFlow. Processed after the response is sent back to the client.</Description>
    <Response>
      <Step>
        <Name>Message-Logging-OK</Name>
      </Step>
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <PostClientFlow>:

Thuộc tính Loại Mô tả
name Chuỗi Mã nhận dạng duy nhất cho luồng. Tên không được chứa dấu cách hoặc các ký tự đặc biệt khác. Ví dụ: "My-PostClientFlow-1".

Phần tử con

Bảng sau đây mô tả các phần tử con của <PostClientFlow>:

Phần tử con Loại Mô tả
<Description> Chuỗi Cung cấp nội dung mô tả ngắn gọn về quy trình.
<Response> Đối tượng phức tạp Xác định các chính sách cần thực thi trong PostFlow của phản hồi.

<PreFlow>

Xác định các chính sách cần thực thi trong PreFlow của yêu cầu và phản hồi.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <ProxyEndpoint>
<TargetEndpoint>
(Các) phần tử con <Description>
<Request>
<Response>

Cú pháp

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

<PreFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PreFlow>

Tất cả các phần tử con của <PreFlow> là không bắt buộc.

Ví dụ:

Ví dụ sau đây cho thấy một PreFlow với một yêu cầu và một luồng phản hồi được xác định:

<!-- api-platform/reference/examples/flow-segments/preflow-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <PreFlow>:

Thuộc tính Loại Mô tả
name Chuỗi Mã nhận dạng duy nhất cho luồng. Tên không được chứa dấu cách hoặc các ký tự đặc biệt khác. Ví dụ: "My-PreFlow-1".

Phần tử con

Bảng sau đây mô tả các phần tử con của <PreFlow>:

Phần tử con Loại Mô tả
<Description> Chuỗi Cung cấp nội dung mô tả ngắn gọn về quy trình.
<Request> Đối tượng phức tạp Xác định các chính sách cần thực thi trong PreFlow của yêu cầu.
<Response> Đối tượng phức tạp Xác định các chính sách cần thực thi trong PreFlow của phản hồi.

<Request>

Xác định các chính sách cần thực thi trong phân đoạn yêu cầu của luồng.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <Flow>
<PreFlow>
<PostFlow>
(Các) phần tử con <Condition>
<Step>

Cú pháp

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

<Request>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Request>

Tất cả các phần tử con của <Request> là không bắt buộc.

Ví dụ:

Ví dụ sau đây cho thấy các luồng được xác định cho yêu cầu trong cả PreFlow và PostFlow:

<!-- api-platform/reference/examples/flow-segments/request-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PostFlow>
  ...
</ProxyEndpoint>

Thuộc tính

Phần tử <Request> không có thuộc tính nào.

Phần tử con

Bảng sau đây mô tả các phần tử con của <Request>:

Phần tử con Loại Nội dung mô tả
<Condition> Đối tượng phức tạp Xác định xem các bước trong phân đoạn yêu cầu có được thực thi hay không.
<Step> Chuỗi Chỉ định một chính sách để thực thi trong phân đoạn yêu cầu.

<Response>

Xác định các chính sách cần thực thi trong phân đoạn phản hồi của luồng.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
(Các) phần tử con <Condition>
<Step>

Cú pháp

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

<Response>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Response>

Tất cả các phần tử con của <Response> là không bắt buộc.

Ví dụ:

Ví dụ sau đây cho thấy các luồng được xác định cho phản hồi, trong cả PreFlow và PostFlow:

<!-- api-platform/reference/examples/flow-segments/response-1.xml -->
<ProxyEndpoint name="default">
    <PreFlow name="my-preFlows">
        <Description>My first PreFlow</Description>
        <Response>
            <Step>
                <Condition>response.status.code LesserThanOrEquals 300</Condition>
                <Name>Log-Response-OK</Name>
            </Step>
            <Step>
                <Condition>response.status.code GreaterThan 300</Condition>
                <Name>Log-Response-NOT-OK</Name>
            </Step>
        </Response>
    </PreFlow>
    <PostFlow name="my-postflows">
        <Description>My first PostFlow</Description>
        <Response>
            <Step>
                <Name>Set-Response-Headers</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

Thuộc tính

Phần tử <Response> không có thuộc tính nào.

Phần tử con

Bảng sau đây mô tả các phần tử con của <Response>:

Phần tử con Loại Mô tả
<Condition> Chuỗi Xác định xem các bước trong phân đoạn phản hồi có được thực thi hay không.
<Step> Chuỗi Chỉ định một chính sách để thực thi trong phân đoạn phản hồi.

<Step>

Chỉ định một chính sách để thực thi và (không bắt buộc) một điều kiện giúp xác định xem có thực thi chính sách đó hay không.

Loại Đối tượng phức tạp
(Các) Phần tử gốc <Request>
<Response>
(Các) phần tử con <Condition>
<Name>

Có thể có nhiều bước được xác định trong <Flow> và các bước được thực thi theo thứ tự được xác định trong XML của luồng.

Các bước không có điều kiện sẽ luôn được thực thi. Các bước có điều kiện chỉ thực thi khi điều kiện đó được đánh giá là true (đúng). Nếu điều kiện được đánh giá là false (sai), Edge sẽ bỏ qua bước này.

Cú pháp

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

<Step>
  <Condition>property operator "value"</Condition>
  <Name>policy_name</Name>
</Step>

Chỉ có thể có một <Condition> và một <Name> cho mỗi <Step>, nhưng có thể có nhiều bước trong một <Flow>.

Tất cả các phần tử con của <Step> là không bắt buộc.

Ví dụ 1

Ví dụ sau đây cho thấy một bước có điều kiện và một bước không có điều kiện:

<!-- api-platform/reference/examples/flow-segments/step-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
      <Description>My first PostFlow</Description>
      <Request>
          <Step>
              <Condition>request.verb = "GET"</Condition>
              <Name>Log-Request-OK</Name>
          </Step>
      </Request>
      <Response>
          <Step>
              <Name>Set-Response-Headers</Name>
          </Step>
      </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

Bước không có điều kiện này sẽ được thực thi mọi lúc trong phân đoạn yêu cầu. Bước có điều kiện sẽ chỉ thực thi khi yêu cầu là "GET" trong phân đoạn phản hồi.

Ví dụ 2

Ví dụ sau đây trình bày nhiều bước trong một phân đoạn:

<!-- api-platform/reference/examples/flow-segments/step-2.xml -->
<ProxyEndpoint name="default">
    <PostFlow name="PostFlow">
        <Response>
            <Step>
                <Name>Assign-Message-1</Name>
            </Step>
            <Step>
                <Name>Assign-Message-2</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

Các bước không có điều kiện sẽ luôn được thực thi.

Thuộc tính

Phần tử <Step> không có thuộc tính nào.

Phần tử con

Bảng sau đây mô tả các phần tử con của <Step>:

Phần tử con Loại Mô tả
<Condition> Chuỗi Xác định câu lệnh có điều kiện cho bước được xử lý trong thời gian chạy. Nếu câu lệnh có giá trị là true (đúng), thì Edge sẽ thực thi bước này. Nếu câu lệnh được đánh giá là false (sai), Edge sẽ bỏ qua bước này.
<Name> Chuỗi Chỉ định mã của chính sách sẽ thực thi trong quy trình hiện tại.