Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerFlex Gateway ポリシー開発キット (PDK) は、要求と応答の間でデータを受け渡すための RequestData 列挙型を提供しています。
要求関数と応答関数の間で状況を共有するには、要求関数が、応答関数に渡すデータパラメーターが格納された Flow::Continue 列挙型変数を返す必要があります。応答関数は、要求関数の最終状況と渡されたデータパラメーターを含む RequestData パラメーターを受け取る必要があります。
RequestData 列挙型に格納される最終状況は次のとおりです。
RequestData::Continue(data): 要求関数は Flow::Continue(data) で終了しました。
RequestData::Break : 要求関数は Flow::Break で終了しました。
RequestData::Cancel: 要求機能はキャンセルされました。
要求関数が Flow::Continue で終了し、アップストリームポリシーによってキャンセルされなかった場合、RequestData::Continue 変数には要求関数によって送信された値が格納されます。
これを実装するには、policy-pdk-configure-features-stop.adoc で使用されているフローの例にラップされる関数の on_response を追加します。
async fn request_filter(state: RequestState) -> Flow<String> {
let state = state.into_headers_state().await;
let handler = state.handler();
if handler.header("authorization").is_some() {
Flow::Continue(state.path())
} else {
Flow::Break(
Response::new(401)
.with_headers(vec![(
"WWW-Authenticate".to_string(),
"Bearer realm=\"oauth2\"".to_string(),
)])
.with_body(r#"{ "error": "token was not present"}"#),
)
}
}
async fn response_filter(state: ResponseState, request_data: RequestData<String>) {
// Handle only completed requests
if let RequestData::Continue(path) = request_data else {
return;
};
let state = state.into_headers_state().await;
logger::info!("Path: {path}, Status: {}", state.status_code());
}