我在API网关中有一个API,我想通过AWS SDK启用或禁用对请求参数的缓存。
方法是GET /cats
。我正在使用updateStage方法,并且尝试了以下方法:
params = {
restApiId: 'myRestApiId',
stageName: 'myStageName',
patchOperations: [
{
op: 'replace',
path: '/~1cats/GET/requestParameters/method.request.header.pawId/caching/enabled'
}];
await aws.updateStage(params).promise();
失败,并显示以下信息:
无效的方法设置路径: requestParameters / method.request.path.pawId / caching / enabled。一定是 以下之一:[... / metrics / enabled,... / logging / dataTrace, ... / logging / loglevel,... / throttling / burstLimit, ... /节流/rateLimit、.../缓存/ ttlInSeconds, ... /缓存/已启用,... /缓存/数据已加密, ... / caching / requireAuthorizationForCacheControl, ... / caching / unauthorizedCacheControlHeaderStrategy]
这很奇怪,因为.../caching/enabled
是它“必须”的选项之一!
如何通过SDK启用对请求参数的缓存?
答案 0 :(得分:1)
我的理解是您不能直接在暂存的API上启用requestParameters的缓存。您将需要更新API并将其部署以再次上演。您在阶段级别看到的cachingEnabled选项用于启用完整API响应(而非参数)的缓存。 best practices for other web servers available on here
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html
现在可以使用以下操作来更新API以启用请求参数的缓存。
var params = {
httpMethod: 'GET',
resourceId: 'xxxx', /* you will need to pass unique identifier which API gateway creates for /cats or /pets resources */
restApiId: 'xxxxxxx', /* unique identifer for your API */
patchOperations: [
{
op: 'add', /* add or remove only for enabling/disabling */
path: '/cacheKeyParameters/method.request.header.pawId',
},
/* more items */
]
};
apigateway.updateIntegration(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
注意-
路径根据您启用参数缓存的位置而变化。
范例-
method.request.header.pawId
或
integration.request.header.pawId
等,
找出确切路径以及需要使用哪些方法的最简单方法之一是先调用它们各自的getStage
,getIntegration
,getMethod
并研究响应。