通过AWS开发工具包对API Gateway方法请求参数启用缓存

时间:2018-12-27 17:27:11

标签: amazon-web-services caching aws-sdk aws-api-gateway

我在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启用对请求参数的缓存?

1 个答案:

答案 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.pawIdintegration.request.header.pawId等,

找出确切路径以及需要使用哪些方法的最简单方法之一是先调用它们各自的getStagegetIntegrationgetMethod并研究响应。