如何指定策略,以便Azure API管理为每个查询参数组合创建不同的响应缓存



如何指定策略,以便Azure API管理为每个查询参数组合创建不同的响应缓存?

假设我有一个端点/my端点,它接受2个查询参数(item_id和language(。

我希望API管理为我的查询参数值的每个组合创建不同的缓存。

例如,我希望以下请求为响应存储不同的缓存值:

/my-endpoint?item_id=4&language=en
/my-endpoint?item_id=4&language=nl
/my-endpoint?item_id=2&language=en
/my-endpoint?item_itd=2&language=nl

我该怎么做?

特别是,以下两种APIM策略(APIM策略1和APIM策略2(都有效吗?或者,当我使用值用逗号分隔的单个标记时(请参阅APIM策略1(,或者当我使用多个标记时(每个标记都有不同的值((请参阅API策略2(,Azure API管理响应缓存的工作方式有差异吗?

APIM策略1

<policies>
<inbound>
<base />
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" allow-private-response-caching="false" must-revalidate="false" downstream-caching-type="none">
<vary-by-query-parameter>item_id;language</vary-by-query-parameter>
</cache-lookup>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<cache-store duration="3600" />
</outbound>
<on-error>
<base />
</on-error>
</policies>

APIM策略2

<policies>
<inbound>
<base />
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" allow-private-response-caching="false" must-revalidate="false" downstream-caching-type="none">
<vary-by-query-parameter>item_id</vary-by-query-parameter>
<vary-by-query-parameter>language</vary-by-query-parameter>
</cache-lookup>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<cache-store duration="3600" />
</outbound>
<on-error>
<base />
</on-error>
</policies>

如果您没有得到"根据查询参数变化";为了工作,你可以做这样的事情:

<cache-store-value key="@("my-variable-" + context.Request.MatchedParameters.GetValueOrDefault("item_id","")) + "-" + context.Request.MatchedParameters.GetValueOrDefault("language",""))" value="@(context.Response.Body.As<String>(true))" duration="3600" />

通过这种方式,您可以组合参数以获得唯一的缓存变量名称。
考虑到您上面的情况,您将有4个不同的缓存变量:

my-variable-4-en
my-variable-4-nl
my-variable-2-en
my-variable-2-nl

它们都将包含不同的响应机构。

相关内容

  • 没有找到相关文章

最新更新