Chính sách về chú thích

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Sử dụng chính sách FlowCallout để gọi đến một luồng dùng chung từ một proxy API hoặc một luồng dùng chung khác.

Trong một luồng dùng chung, bạn tạo một chuỗi các bước mà bạn có thể sử dụng lại trong thời gian chạy từ nhiều nơi. Các bước này được triển khai dưới dạng chính sách, chẳng hạn như trong một proxy API. Chính sách FlowCallout cung cấp cho bạn một cách để gọi flow dùng chung từ các proxy API và các flow dùng chung khác. Nó hoạt động như một lệnh gọi hàm trong ngôn ngữ lập trình truyền thống.

  • Ví dụ: giả sử bạn đã tạo một luồng dùng chung có các tính năng bảo mật như xác minh khoá API, xác thực mã thông báo OAuth và bảo vệ bằng biểu thức chính quy. Luồng dùng chung này thể hiện quy ước của bạn về cách kiểm tra các yêu cầu đến. Bằng cách sử dụng các chính sách FlowCallout, bạn có thể gọi luồng dùng chung đó từ nhiều proxy API.
  • Bạn có thể gọi một luồng dùng chung từ một luồng khác bằng cách triển khai chính sách FlowCallout trong một luồng dùng chung.

Mẫu

Xác minh khoá API trong luồng dùng chung

Trong ví dụ này, một luồng dùng chung được dùng để thực hiện các tác vụ thường gặp liên quan đến bảo mật. Ở đây, luồng dùng chung sẽ xác thực khoá API. Các proxy API và những luồng dùng chung khác có thể sử dụng chính sách FlowCallout để thực hiện các lệnh gọi vào luồng dùng chung này.

Định nghĩa về luồng dùng chung sau đây bao gồm một chính sách Verify-API-Key thực thi khi luồng dùng chung được gọi từ một chính sách FlowCallout trong một proxy API.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SharedFlow name="default">
    <Step>
        <Name>Verify-API-Key</Name>
    </Step>
</SharedFlow>

Chính sách VerifyAPIKey trong luồng dùng chung trước đó sẽ truy xuất giá trị khoá và xác minh giá trị đó.

<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
    <DisplayName>Verify API Key</DisplayName>
    <APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>

Chính sách FlowCallout sau đây, được dùng trong một proxy API, sẽ gọi quy trình dùng chung trước đó để xác minh khoá API. Gói luồng dùng chung verify-apikey-shared (không xuất hiện ở đây) sẽ định cấu hình luồng dùng chung theo cách mà gói APIProxy định cấu hình một proxy.

<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout">
    <DisplayName>Auth Flow Callout</DisplayName>
    <SharedFlowBundle>verify-apikey-shared</SharedFlowBundle>
</FlowCallout>

Truyền các tham số đến một luồng dùng chung

Ví dụ này minh hoạ cách truyền các tham số từ chính sách FlowCallout đến một luồng dùng chung. Ở đây, chính sách FlowCallout gọi đến một luồng dùng chung được thiết kế để thực hiện các hàm xử lý chuỗi phổ biến. Luồng chia sẻ bao gồm JavaScript nối đầu vào, chuyển đổi đầu vào thành chữ thường hoặc cả hai. Chính sách FlowCallout xác định các tham số chỉ định đầu vào, đầu ra của chuỗi và việc cần làm với đầu vào.

  1. Chính sách String-Handler FlowCallout gọi luồng dùng chung, truyền các tham số chỉ định biến để lưu trữ đầu ra của luồng dùng chung, thao tác luồng dùng chung cần dùng và đầu vào cần dùng (ở đây là một chuỗi ký tự, nhưng cũng có thể là một biến luồng). Các phần tử Parameter chỉ định tên và giá trị của các biến để tạo thời gian chạy. Luồng dùng chung có thể truy xuất các biến này để sử dụng trong mã của riêng mình.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
      <DisplayName>String Handler</DisplayName>
      <Parameters>
        <Parameter name="input">Gladys Kravitz</Parameter>
        <Parameter name="operations">concatenate tolowercase</Parameter>
        <Parameter name="outputVariable">string.handler.output</Parameter>
      </Parameters>
      <SharedFlowBundle>StringHandler</SharedFlowBundle>
    </FlowCallout>
  2. Luồng default dùng chung sau đây bao gồm một chính sách SharedStringFunctions JavaScript sẽ thực thi khi luồng dùng chung được gọi từ chính sách FlowCallout.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SharedFlow name="default">
      <Step>
        <Name>SharedStringFunctions</Name>
      </Step>
    </SharedFlow>
  3. Trong luồng dùng chung, chính sách JavaScript SharedStringFunctions sau đây chỉ định tệp JavaScript SharedStringFunctions.js có mã cần thực thi.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions">
      <DisplayName>SharedStringFunctions</DisplayName> <Properties/>
      <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL>
    </Javascript>
  4. JavaScript sau đây (SharedStringFunctions.js) sẽ thực thi từ chính sách JavaScript SharedStringFunctions. Tập lệnh này truy xuất các giá trị từ các biến được tạo từ các phần tử chính sách FlowCallout Parameter.

    // Input value from the calling API proxy.
    var handledString = context.getVariable("input");
    // Variable to use for output from this script.
    var outputVariable = context.getVariable("outputVariable");
    // A space-separated list of things to do to the input string.
    // Convert to lower case to handle unintentional capitals in configuration.
    var operation = context.getVariable("operations").toLowerCase();
    
    // If "lowercase" was given as an operation, convert the input to lowercase.
    if (operation.includes("tolowercase")) {
        handledString = handledString.toLowerCase();
    }
    
    // If "concatenate" was given as an operation, concatenate the input.
    if (operation.includes("concatenate")) {
        handledString = handledString.replace(/\s+/g, '');
    }
    // Assign the resulting string to the output variable specified by
    // the calling API proxy.
    context.setVariable(outputVariable, handledString);
  5. Quá trình thực thi quay lại từ chính sách JavaScript, đến luồng dùng chung, sau đó đến chính sách FlowCallout trong proxy API ban đầu.

Tài liệu tham khảo về phần tử

Sau đây là các phần tử và thuộc tính mà bạn có thể định cấu hình trên chính sách này:

<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle>
</FlowCallout>

Thuộc tính <FlowCallout>

<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">

Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Mô tả Mặc định Sự hiện diện
name

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

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là 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 có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặ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 này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

&lt;DisplayName&gt; phần tử

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ý có tên ngôn ngữ tự nhiên khác.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <SharedFlowBundle>

Chỉ định tên của luồng dùng chung cần gọi. Giá trị của phần tử này phải giống với giá trị của thuộc tính name của phần tử SharedFlowBundle mục tiêu.

<SharedFlowBundle/>

Trong ví dụ đơn giản nhất, bạn sẽ đặt tên cho luồng dùng chung đang được gọi làm giá trị cho phần tử này. Tức là giá trị của phần tử này phải giống với giá trị thuộc tính name của luồng dùng chung.

<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
 
Mặc định Không áp dụng
Sự hiện diện

Bắt buộc.

Loại Không áp dụng

Thuộc tính

Không có.

Phần tử <Parameter>

Chỉ định một tham số và giá trị (hoặc nguồn giá trị) để truyền dưới dạng một biến vào luồng dùng chung do chính sách này gọi.

Bằng cách sử dụng một tham số, bạn có thể chỉ định một giá trị (hoặc một biến chứa giá trị) sẽ được truyền đến luồng dùng chung do chính sách gọi. Về mặt khái niệm, điều này tương tự như việc chỉ định một tham số trong lệnh gọi hàm. Giống như tham số hàm, giá trị của tham số FlowCallout có thể thay đổi dựa trên ngữ cảnh của lệnh gọi luồng dùng chung.

Các tham số FlowCallout chỉ hiển thị trong quá trình thực thi luồng được chia sẻ.

Cú pháp

Bạn có thể sử dụng phần tử này với một trong các dạng cú pháp sau. Xin lưu ý rằng khi bạn sử dụng một giá trị cố định, định dạng của giá trị mà bạn chỉ định sẽ phụ thuộc vào mã sử dụng giá trị đó.

<!- A literal value in an attribute. --/>
<Parameter name="parameter-name" value='parameter-value' />
<!- A reference to a variable in an attribute. --/>
<Parameter name="parameter-name" ref='source-variable-name' />
<!- A literal value in the element content. --/>
<Parameter name="parameter-name">parameter-value</Parameter>
<!- An reference to an attribute in the element content. --/>
<Parameter name="parameter-name">{source-variable-name}</Parameter>

Ví dụ

Chính sách String-Handler FlowCallout này truyền các tham số chỉ định nơi lưu trữ đầu ra của luồng dùng chung và đầu vào cần sử dụng. Các phần tử Parameter chỉ định tên và giá trị của các biến để tạo thời gian chạy. Luồng dùng chung có thể truy xuất các biến này để sử dụng trong mã riêng.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
  <DisplayName>String Handler</DisplayName>
  <Parameters>
    <Parameter name="input">Gladys Kravitz</Parameter>
    <Parameter name="outputVariable">string.handler.output</Parameter>
  </Parameters>
  <SharedFlowBundle>StringHandler</SharedFlowBundle>
</FlowCallout>
Mặc định Không áp dụng
Sự hiện diện

Bắt buộc.

Loại Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Tỷ lệ hiển thị Loại
tên Tên của biến thời gian chạy cần tạo bằng tham số này. Không có. Bắt buộc. Chuỗi
ref

Biến chứa giá trị cần dùng trong thời gian chạy. Bỏ qua thuộc tính này nếu bạn đang chỉ định một giá trị theo nghĩa đen để sử dụng.

Không có. Không bắt buộc. Chuỗi
value Giá trị cần dùng trong biến thời gian chạy được tạo bằng tham số này. Bỏ qua thuộc tính này nếu bạn đang chỉ định tên của một biến phải là nguồn giá trị. Không có. Không bắt buộc. Chuỗi

Phần tử <Parameters>

Chỉ định tập hợp các phần tử <Parameter> để truyền dưới dạng các biến vào luồng dùng chung do chính sách này gọi.

Cú pháp

<Parameters>
  <Parameter name="parameter-name" value='parameter-value' />
</Parameters>
Mặc định Không áp dụng
Sự hiện diện

Không bắt buộc.

Loại Không áp dụng

Thuộc tính

Không có.

Giản đồ

Biến dòng

Các biến luồng cho phép hành vi động của các chính sách và luồng trong thời gian chạy, dựa trên tiêu đề HTTP, nội dung thông báo hoặc bối cảnh luồng. Để biết thêm thông tin về các biến trong luồng, hãy xem phần Tài liệu tham khảo về biến.

Biến Mô tả

apigee.edge.sharedflow.name

Phạm vi: Trong quá trình thực thi luồng dùng chung
Loại: Chuỗi
Quyền: Đọc

Giá trị của thuộc tính tên của luồng dùng chung.

apigee.edge.flowhook.name

Phạm vi: Trong quá trình thực thi quy trình dùng chung được đính kèm vào lệnh gọi quy trình.
Loại: Chuỗi
Quyền: Đọc

Tên của lệnh gọi lại quy trình.

Tham chiếu 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. Bạn cần nắm được thông tin này nếu đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi 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 thực thi chính sách.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
flow.SharedFlowNotFound 500 Luồng dùng chung không tồn tại hoặc luồng dùng chung tồn tại nhưng không được triển khai.

Lỗi triển khai

Không áp dụng

Chủ đề có liên quan