Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerFlex Gateway ポリシー開発キット (PDK) は、#[entrypoint] 設定関数に挿入できる以下のパラメーターを提供します。
Configuration: ポリシーの設定パラメーターを提供します。設定パラメーターの定義方法については、ポリシースキーマ定義の作成を参照してください。
Metadata: ポリシー、Flex Gateway インスタンス、API インスタンス、および Anypoint 組織に関するメタデータを提供します。提供されるメタデータの詳細については、ポリシーのメタデータへのアクセスを参照してください。
HttpClient: ポリシーで HTTP コールを有効にします。ポリシーから HTTP コールを実行する方法の詳細については、HTTP コールの実行を参照してください。
CacheBuilder: ポリシーのキャッシュ機能を提供します。キャッシュの詳細については、ワーカー間でのデータ共有とキャッシュの設定を参照してください。
StreamProperties: 同じ要求を処理する他のポリシーとプロパティを共有するための構造体を提供します。ポリシー間の情報共有の詳細については、ポリシー間のデータ共有を参照してください。
また、HttpClient および StreamProperties パラメーターをラップされた関数の on_request または on_response に直接挿入することもできます。たとえば、on_request 関数の内部で HTTP コールを実行する必要がある場合は、HTTPClient をその関数に直接挿入します。
ベストプラクティスとして、パラメーターは必ず使用する場所にのみ挿入するようにしてください。ただし、ポリシーの適用時に一度だけ実行する初期化ステップがパラメーターに必要な場合は、ラップされた関数のパフォーマンスを向上させるために、パラメーターを #[entrypoint] に挿入して設定ステップを完了させるのが最善です。
ラップされた関数は以下のパラメーターを受け入れます。
HttpClient: ポリシーで HTTP コールを有効にします。ポリシーから HTTP コールを実行する方法の詳細については、HTTP コールの実行を参照してください。
StreamProperties: 同じ要求を処理する他のポリシーとプロパティを共有するための構造体を提供します。ポリシー間の情報共有の詳細については、ポリシー間のデータ共有を参照してください。
RequestState: 受信したリクエストヘッダーとリクエストボディを操作するための、要求検索条件のさまざまなフェーズへのアクセスを提供します。 RequestState は on_request 関数でのみ使用できます。RequestState のヘッダーとボディの読み取りと書き込みについては、リクエストヘッダーとリクエストボディの読み取りと書き込みを参照してください。
ResponseState: アップストリームのレスポンスヘッダーとレスポンスボディを操作するための、要求検索条件のさまざまなフェーズへのアクセスを提供します。 ResponseState は on_response 関数でのみ使用できます。ResponseState のヘッダーとボディの読み取りと書き込みについては、リクエストヘッダーとリクエストボディの読み取りと書き込みを参照してください。
RequestData: on_request 関数と on_response 関数の間でデータを共有します。 RequestData は on_response 関数でのみ使用できます。RequestData の詳細については、要求と応答でのデータの共有を参照してください。
Authentication: 認証データの読み取りまたは他のポリシーとの共有のためのアクセスを提供します。Authentication の詳細については、要求認証情報へのアクセスを参照してください。
ラップされた関数がこれらのパラメーターを受け取るだけであれば、ラッパーにラムダは必要ありません。たとえば、関数のシグネチャーが次のように定義されているとします。
async fn request_filter(state: RequestState) -> RequestData<String>;
async fn response_filter(state: ResponseState, path: RequestData<String>);
次の例では、関数定義のラムダを定義しています。
let filter = on_request(|request_state| request_filter(request_state))
.on_response(|response_state, request_data| response_filter(response_state, request_data));
ラムダを定義する代わりに、次の関数定義を使うことができます。
let filter = on_request(request_filter)
.on_response(response_filter);
ラップされた関数が、他のパラメーター (#[entrypoint] 関数で定義された設定パラメーターなど) を必要とする場合は、そのパラメーターをラップされた関数に挿入します。パラメーターを渡すには、ラムダを定義して変数参照を送信します。例:
async fn request_filter(state: RequestState, conf: &Config, tuple: &(u32, u32)) {
...
}
#[entrypoint]
async fn configure(launcher: Launcher, Configuration(bytes): Configuration) -> Result<()> {
let config = serde_json::from_slice(&bytes)?;
let tuple: (u32, u32) = (10, 10);
let filter = on_request(|request_state| request_filter(request_state, &config, &tuple));
launcher
.launch(filter)
.await?;
Ok(())
}