1

Я использовал AWS API Gateway с конечной точкой в ​​качестве функции лямбда. Я включил функции кеширования, предоставляемые шлюзом API, чтобы уменьшить время отклика & количество вызовов, перенаправленных на мою функцию лямбда.Может ли кэширование AWS API Gateway аннулировать конкретные записи на основе содержимого ответа?

Функция лямбда запрашивает другое хранилище данных для возврата данных. Если данные не найдены, выполняется асинхронный вызов для обновления хранилища данных, а «данные не найдены» возвращается вызывающему. Теперь API-шлюз даже кэширует этот результат, чего мы не хотим. Это приводит к тому, что кеш всегда возвращает «данные не найденные» для своего жизненного цикла (1 час TTL), хотя данные обновляются асинхронно в хранилище данных.

Я знаю заголовок запроса (Cache-Control: max-age = 0), который может аннулировать кеш и получать ответ непосредственно от Lambda, как указано на этой странице documentation.

Но это не будет полезно, поскольку вызывающий абонент не знает, имеются ли данные в хранилище данных или нет, и, следовательно, не может выборочно отправлять такой заголовок запроса.


Итак, мои 2 вопроса:

  1. ли API шлюз кэширует другой ответ HTTP, а также, как и 404 (кроме 200)?
  2. Можно ли сообщить API-шлюзу не кэшировать конкретных ответов?

ответ

0
  1. Как вы наблюдали, API шлюз кэширует результат конечной точки, независимо от кода статуса.

  2. Нет, не в это время. Я могу отбросить идею, чтобы увидеть, можно ли это сделать в будущем.

Даже если API шлюза условно не кэшировать 404, абонент должен был бы назвать конечную точку снова в любом случае, так почему бы не возвращать результат синхронно? Этот шаблон - это то, как большинство кэшированных API, о которых я знаю, ведут себя и позволят вашему API работать с тем, что предлагает API Gateway сегодня.

+0

«Даже если API-шлюз условно не кэшировал 404, вызывающему абоненту все равно нужно было бы вызвать конечную точку, так почему бы не вернуть результат синхронно?» Процесс асинхронного обновления занимает около 2 минут, так как он вызывает сторонний API. Следовательно, мы не можем вернуть результат синхронно. Таким образом, идея заключается в том, что в первый раз он вернет 404 или «данные не найдены», но должен возвращать хорошие данные в следующий раз. –