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 dùng để xác định Luồng proxy API.

Hệ phân cấp & cú pháp

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

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ương án trong số này được mô tả chi tiết trong các phần tiếp theo:

<!-- 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ử sau để xác định PreFlow, có điều kiện, PostFlow và PostClientFlow thực thi.

<Condition>

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

Loại Chuỗi
(Các) phần tử mẹ <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ộ luồng, tuỳ thuộc vào việc bạn đặt phần tử trong phần tử <Flow> hoặc <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> cho kết quả là true, thì Edge sẽ thực thi bước đó. Nếu điều kiện đánh giá là false, Edge sẽ bỏ qua bước này.

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

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 . Ví dụ: biến luồng request có các thuộc tính được đặt tên pathcontent. Để sử dụng chúng trong một điều kiện, bạn phải chỉ định flow_variable[dấu chấm]property_name:
request.path
request.content

Để xem danh sách đầy đủ các biến luồng và thuộc tính của các biến đó, 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á điều kiện của bạn. Phổ biến toán tử bao gồm:
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

Để xem danh sách đầy đủ, hãy xem Toán tử trong Tham chiếu điều kiện.

"value"
Giá trị dùng để đánh giá thuộc tính biến luồng. Đây thường là loại cơ bản như số nguyên hoặc chuỗi. Ví dụ: 200 hoặc "/mèo". Giá trị 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 để khớp mẫu, như được mô tả trong So khớp mẫu với điều kiện.

Ví dụ 1

Ví dụ sau đây sẽ kiểm tra xem giá trị verb của biến luồng request hay không là "GET":

<!-- 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à "GET", thì ví dụ này sẽ thực thi lệnh "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ị của mã, một chính sách khác nhau 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ó phần tử con.

<Description>

Mô tả dòng chảy bằng các thuật ngữ mà con người có thể đọc được. Sử dụng phần tử này để cung cấp thông tin về 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ị ra bên ngoài.

Loại Chuỗi
(Các) phần tử mẹ <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 phần 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ó 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ử mẹ <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à true. Nếu không, Edge sẽ bỏ qua toàn bộ luồng.

Một phần tử <Flows> có thể chứa nhiều phần tử <Flow>, mỗi phần tử có một điều kiện riêng và các bước thực hiện. Khi có nhiều phần tử <Flow>, Edge chỉ thực thi phần tử đầu tiên mà trong đó không có điều kiện nào hoặc điều kiện được đánh giá là 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 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 bảo vệ khỏ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ả phần tử con của <Flow> đều 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 lệnh "Log-Message-OK" chính sách của Google:

<!-- 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 minh hoạ một <Flow> có nhiều bước, mỗi bước có một bước riêng điều kiện:

<!-- 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 phân đoạn; nó sẽ thực thi luồng đầu tiên không có một điều kiện hoặc điều kiện có điều kiện 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 quy trình. Ví dụ: &quot;My-Conditional-Flow-1&quot;. 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 câu lệnh có điều kiện được xử lý trong thời gian chạy. Nếu câu lệnh đánh giá thành true 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ó giá trị 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ề luồng. Nội dung mô tả này không xuất hiện bên ngoài hiển thị.
<Request> Đối tượng phức tạp Chỉ đị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ử mẹ <ProxyEndpoint>
<TargetEndpoint>
(Các) phần tử con <Flow>

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

Bạn có thể xác định một quy trình mặc định luôn thực thi (nếu không có quy trình 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 bảo vệ khỏ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ả phần tử con của <Flows> đều 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ố đường dẫn mà Edge thu thập được từ Biến luồng proxy. Nếu hậu tố đường dẫn không khớp với cả điều kiện nào, thì Edge không thực thi quy trình 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ó phần tử riêng <Condition>:

<!-- 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 phân đoạn có điều kiện được đánh giá là true. Sau nên Edge bỏ qua các luồng còn lại trong phân đoạn.

Ví dụ 3

Ví dụ sau đây trình bày một giá trị "mặc định" <Flow>:

<!-- 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 phân đoạn có điều kiện được đánh giá là true. Nếu không có luồng 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) thực thi.

Luồng mặc định có thể là công cụ hữu ích trong bảo vệ khỏ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 như sau:

Phần tử con Loại Mô tả
<Flow> Đối tượng phức tạp Một 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ử mẹ <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 2 chính sách được thêm vào luồng 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ó 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ử mẹ <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 minh hoạ một PostFlow có các bước dành cho cả yêu cầu và phản hồi 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 của luồng (duy nhất trong điểm cuối). Ví dụ: "My-PostFlow-1". Chiến lược phát hành đĩa đơn giá trị 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ề luồng.
<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 phản hồi được trả về khách hàng. Những chính sách này thường ghi lại 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ử mẹ <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ả phần tử con của <PostClientFlow> đều 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:

<!-- 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 của luồng. Tên không được chứa dấu cách hoặc dấu cách đặc biệt khác ký tự. 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ề luồng.
<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ử mẹ <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ả phần tử con của <PreFlow> đều không bắt buộc.

Ví dụ:

Ví dụ sau đây minh hoạ một PreFlow với một yêu cầu và một quy trình 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 của luồng. Tên không được chứa dấu cách hoặc dấu cách đặc biệt khác ký tự. 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ề luồng.
<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ử mẹ <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ả phần tử con của <Request> đều 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 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 thực thi hay chưa.
<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ử mẹ <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ả phần tử con của <Response> đều không bắt buộc.

Ví dụ:

Ví dụ sau đây cho thấy các quy trình đượ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 thực thi hay chưa.
<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à một điều kiện xác định liệu có thực thi hay không (không bắt buộc) chính sách đó.

Loại Đối tượng phức tạp
(Các) phần tử mẹ <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 hiện trong thứ tự được xác định trong XML của luồng.

Các bước không có điều kiện luôn thực thi. Các bước có điều kiện chỉ thực thi nếu điều kiện đó có giá trị là true (đúng). Nếu điều kiện được đánh giá là false, thì 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>

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

Tất cả phần tử con của <Step> đều không bắt buộc.

Ví dụ 1

Ví dụ sau đây minh hoạ 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 sẽ thực thi mỗi lần 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 khi trả lời phân khúc.

Ví dụ 2

Ví dụ sau đây minh hoạ 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 luôn 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 sẽ đánh giá thành true, sau đó Edge sẽ thực thi bước này. Nếu câu lệnh có giá trị là false, thì Edge sẽ bỏ qua bước này.
<Name> Chuỗi Chỉ định mã nhận dạng của chính sách để thực thi trong quy trình hiện tại.