Estoy configurando el almacenamiento en caché en el lado de AWS API Gateway para mejorar el rendimiento de mi API REST. El punto final que estoy tratando de configurar está usando un parámetro de consulta. Ya habilité el almacenamiento en caché en el lado de AWS API Gateway, pero desafortunadamente tuve que descubrir que está ignorando los parámetros de consulta al crear la clave de caché.
Por ejemplo, cuando realizo la primera llamada GET con el parámetro de consulta "test1"
GET https://2kdslm234ds9.execute-api.us-east-1.amazonaws.com/api/test?search=test1La respuesta para esta llamada se guarda en caché, y cuando después hago una llamada a otro parámetro de consulta: "test2"
GET https://2kdslm234ds9.execute-api.us-east-1.amazonaws.com/api/test?search=test2Vuelvo a recibir respuesta para la primera llamada.
La configuración para el almacenamiento en caché es bastante simple y no encontré nada relacionado con la configuración de parámetros.
¿Cómo puedo configurar el almacenamiento en caché de Gateway para tener en cuenta los parámetros de consulta?
Debe configurar esta opción en el panel API de puerta de enlace.
La siguiente es cómo podemos lograr esto utilizando SAM:
El resultado final en la consola de AWS API Gateway debe mostrar que la casilla de verificación establecer almacenamiento en caché es:
La plantilla *.yml para API Gateway sería:
Resources: MyApi: Type: AWS::Serverless::Api Properties: StageName: Prod CacheClusterEnabled: true CacheClusterSize: '0.5' MethodSettings: - HttpMethod: GET CacheTtlInSeconds: 120 ResourcePath: "/getData" CachingEnabled: true DefinitionBody: swagger: 2.0 basePath: /Prod info: title: OutService x-amazon-apigateway-policy: Version: "2012-10-17" Statement: - Effect: Allow Principal: "*" Action: execute-api:Invoke Resource: - execute-api:/*/*/* paths: "/getData": get: # ** Parameter(s) can be set here ** parameters: - name: "path" in: "query" required: "false" type: "string" x-amazon-apigateway-integration: # ** Key is cached ** cacheKeyParameters: - method.request.querystring.path httpMethod: POST type: aws_proxy uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${OutLambda.Arn}/invocations responses: {} EndpointConfiguration: PRIVATE Cors: AllowHeaders: "'*'"