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.
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>
Luồng chia sẻ
default
sau đây bao gồm một chính sách JavaScriptSharedStringFunctions
. 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>
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>
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);
- 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>
<FlowCallout> 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 (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thành |
đú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 |
<DisplayName> 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 |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<SharedFlowBundle> 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ó.
<Parameter> 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 |
<Parameters> phần tử
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 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ả |
---|---|
|
Phạm vi: Trong quá trình thực thi luồng dùng chung Giá trị của thuộc tính tên của luồng chia sẻ. |
|
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. 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ách và Xử 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. | build |
Lỗi triển khai
Không áp dụng
Chủ đề có liên quan
- Tạo flow dùng chung: Có thể tái sử dụng luồng được chia sẻ
- Thực thi luồng được chia sẻ trên nhiều proxy: Đính kèm luồng được chia sẻ bằng hook luồng