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

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

Sử dụng chính sách FlowAnnotation để gọi đến một quy trình chia sẻ từ một proxy API hoặc một proxy khác quy trình chung.

Trong một quy trình dùng chung, bạn sẽ tạo một trình tự gồm các bước để có thể sử dụng lại trong thời gian chạy của nhiều bước địa điểm. Các bước này được triển khai dưới dạng chính sách, như trong proxy API. Chính sách FlowAnnotation cung cấp cho bạn một cách để gọi flow được chia sẻ từ proxy API và các flow dùng chung khác. Hàm này 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ụ: hãy tưởng tượng rằng bạn đã xây dựng một quy trình 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ệ biểu thức chính quy. Quy trình 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. Khi sử dụng các chính sách FlowAnnotation, bạn có thể gọi quy trình được chia sẻ đó từ nhiều proxy API.
  • Bạn có thể gọi một luồng được chia sẻ từ một luồng được chia sẻ khác bằng cách triển khai chính sách FlowAnnotation từ trong một luồng được chia sẻ luồng.

Mẫu

Xác minh khoá API trong quy trình dùng chung

Trong ví dụ này, một quy trình dùng chung được dùng để thực hiện các công việc phổ biến liên quan đến bảo mật. Đây là quy trình chung xác thực một khoá API. Proxy API và các luồng chia sẻ khác có thể sử dụng FlowAnnotation để thực hiện lệnh gọi tham gia quy trình chung này.

Định nghĩa luồng chia sẻ sau đây bao gồm một chính sách Verify-API-Key thực thi khi luồng chia sẻ được gọi từ chính sách FlowAnnotation trong 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 chia sẻ trước đó truy xuất giá trị khoá và xác minh thông tin đó.

<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 FlowAnnotation sau đây (được dùng trong một proxy API) sẽ gọi flow được chia sẻ trước đó đến xác minh khoá API. Gói luồng dùng chung verify-apikey-shared (không xuất hiện tại đây) định cấu hình luồng chia sẻ theo cách gói APIProxy định cấu hình 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ố vào một luồng dùng chung

Ví dụ này minh hoạ cách chuyển thông số từ chính sách FlowAnnotation đến quy trình chung. Ở đây, chính sách FlowAnnotation gọi đến một quy trình chung được thiết kế để thực hiện các hành động phổ biến hàm xử lý chuỗi. Luồng chung bao gồm JavaScript liên kết thông tin đầu vào, chữ thường hay cả hai. Chính sách FlowAnnotation xác định các thông 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 FlowAnnotation String-Handler gọi quy trình chung, truyền các tham số chỉ định biến để lưu trữ đầu ra của luồng được chia sẻ, luồng được chia sẻ nào sẽ sử dụng hoạt động nào và đầu vào nào cần sử dụng (ở đây, giá trị cố định kiểu chuỗi, nhưng cũng có thể là một biến luồng). Phần tử Parameter chỉ định tên và giá trị của biến để tạo thời gian chạy. Luồng chia sẻ 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="operations">concatenate tolowercase</Parameter>
        <Parameter name="outputVariable">string.handler.output</Parameter>
      </Parameters>
      <SharedFlowBundle>StringHandler</SharedFlowBundle>
    </FlowCallout>
    
  2. Luồng chia sẻ default sau đây bao gồm một chính sách JavaScript SharedStringFunctions. Chính sách này sẽ thực thi khi luồng chia sẻ được gọi từ chính sách FlowAnnotation.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SharedFlow name="default">
      <Step>
        <Name>SharedStringFunctions</Name>
      </Step>
    </SharedFlow>
  3. Trong quy trình chung, chính sách JavaScript SharedStringFunctions sau đây chỉ định tệp JavaScript SharedStringFunctions.js có mã để 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, SharedStringFunctions.js, thực thi từ SharedStringFunctions Chính sách JavaScript. Tập lệnh này truy xuất các giá trị từ các biến được tạo từ phần tử Parameter của chính sách FlowAnnotation.

    // 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. Luồng thực thi quay trở lại từ chính sách JavaScript, tới luồng được chia sẻ, sau đó quay lại Chính sách FlowAnnotation trong proxy API ban đầu.

Tham chiếu phần tử

Sau đây là các phần tử và thuộc tính mà bạn có thể thiết lập theo 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>

&lt;FlowCallout&gt; thuộc tính

<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

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

Chỉ định tên của luồng được chia sẻ 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 tên của phần tử SharedFlowBundle mục tiêu.

<SharedFlowBundle/>

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

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

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

Chỉ định một thông số và giá trị (hoặc nguồn giá trị) để truyền dưới dạng một biến vào luồng được chia sẻ được gọi bởi hàm này .

Bằng cách sử dụng tham số, bạn có thể chỉ định một giá trị (hoặc biến chứa giá trị) cần được được chuyển vào quy trình chung mà 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 trong lệnh gọi hàm. Tương tự như với thông số hàm, giá trị của thông số FlowAnnotation có thể khác nhau tuỳ theo ngữ cảnh của lệnh gọi luồng được chia sẻ.

Thông số FlowAnnotation chỉ hiển thị trong quá trình thực thi của luồng 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 đây. Xin lưu ý rằng sử dụng giá trị cố định, định dạng của giá trị mà bạn chỉ định sẽ phụ thuộc vào mã sẽ tiêu thụ dữ liệu đó.

<!- 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 chú thích luồng String-Handler này chuyển các thông số chỉ định vị trí để lưu trữ đầu ra của luồng dùng chung và đầu vào nào cần sử dụng. Phần tử Parameter chỉ định tên và giá trị của biến để tạo thời gian chạy. Luồng được chia sẻ có thể truy xuất các biến này để sử dụng trong mã của riêng nó.

<?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 Sự hiện diện Loại
tên Tên của biến thời gian chạy để tạo bằng thông số này. Không có. Bắt buộc. Chuỗi
tham chiếu

Biến chứa chứa giá trị sẽ được sử dụng trong thời gian chạy. Hãy bỏ qua thuộc tính này nếu bạn chỉ định một giá trị cố định để sử dụng.

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

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

Chỉ định tập hợp các phần tử &lt;Parameter&gt; để truyền dưới dạng các biến vào luồng chung được gọi bởi hàm này .

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 luồ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 HTTP tiêu đề, nội dung thông báo hoặc ngữ cảnh luồng. Để biết thêm thông tin về các biến Luồng, hãy xem Tham chiếu 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 chia sẻ.

apigee.edge.flowhook.name

Phạm vi: Trong quá trình thực thi luồng dùng chung được đính kèm với luồng nội dung hấp dẫn.
Loại: Chuỗi
Quyền: Đọc

Tên của hook trong flow.

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