Используя FastAPI и FastAPICache, мы можем использовать заголовок Cache-Control, чтобы разрешить принудительное вычисление ответа API или его возврат из кэша.
Для конечной точки в целом, если это позволяет политика Cache-Control, если тот же объект запроса отображается снова, он может быть возвращен из кэша.
Я хочу аналогичного поведения на функциональном уровне. Для некоторой функциональной панели в моей конечной точке foo (потенциально вложенной и в другом файле/модуле), которая принимает только один аргумент a, как она может определить, разрешено ли ей возвращаться из кэша?
Очевидно, мы могли бы сделать что-то вроде bar(a=request.a,cache_control=request.headers.cache_control), но я думаю что-то вроде:
В main.py
@router.post("/foo")
def foo(request: Request):
return bar(a=request.body.a)
В utils.py
def bar(a: int):
# something like:
if fastapi.current_context().cache_control().no_cache():
val = some_expensive_computation(a)
else:
val = cache.get(a, some_expensive_computation(a))
if not fastapi.current_context().cache_control().no_store():
cache.set(a, val)
return val
Подробнее здесь: https://stackoverflow.com/questions/785 ... pplication