Перейти до вмісту

Smart Cache Fallback

Smart Cache MirApi зберігає успішні відповіді upstream у Redis та повертає їх як екстрений fallback при збоях upstream. Це механізм рятування при збоях — не загальнодоступний кеш. Кожен запит завжди спочатку намагається звернутись до upstream; кешовані дані повертаються лише коли всі спроби провалились.

  1. Перший успішний запит: MirApi пересилає до upstream і при успіху кешує тіло відповіді в Redis з налаштованим TTL.
  2. Наступні запити: Запит пересилається до upstream як звичайно. Кеш не повертається при успіху — тільки при збої.
  3. Збій upstream (всі повтори вичерпані): MirApi шукає запис у кеші. Якщо знайдено — кешована відповідь повертається з X-Rescued: cache. Якщо ні — повертається помилка від upstream.

Ключ кешу: SHA256(ClientID + TargetURL + Method + RequestBody) — різні тіла запитів дають різні записи кешу.

Terminal window
curl https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.exchangerate.host/latest" \
-H "X-Smart-Cache: 300s"
ЗаголовокПрикладиОпис
X-Smart-Cache60s, 5m, 1hTTL кешу для успішних відповідей. Приймає Go durations.

1. API курсів валют (Найпоширеніший)

Section titled “1. API курсів валют (Найпоширеніший)”
Terminal window
curl https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.exchangerate.host/latest?base=USD" \
-H "X-Smart-Cache: 300s"
# Якщо API повертає 503 (є кешовані дані):
# HTTP/1.1 200 OK
# X-Rescued: cache
# {"base": "USD", "rates": {"EUR": 0.9234, ...}}

2. Каталог продуктів / конфігураційні дані

Section titled “2. Каталог продуктів / конфігураційні дані”
Terminal window
curl https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.yourstore.com/v1/products?category=electronics" \
-H "X-Smart-Cache: 10m" \
-H "X-Retry-Count: 2"
# Кешується на 10 хвилин на унікальну комбінацію URL+тіло

При відкритому контурі — кеш повертається негайно, без виклику upstream:

Terminal window
curl https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.exchangerate.host/latest" \
-H "X-Circuit-Breaker: on" \
-H "X-Smart-Cache: 600s" \
-H "X-Retry-Count: 2"
# Нормально: upstream → кеш збережено в Redis
# Контур OPEN: без виклику upstream → кеш негайно → X-Rescued: cache

Кеш перевіряється тільки після вичерпання всіх повторів:

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.bankapi.com/rates" \
-H "X-Smart-Cache: 1h" \
-H "X-Retry-Count: 3" \
-H "X-Retry-Delay: 500ms"
# Спроба 1 → 503
# Спроба 2 → 503 (після 500ms)
# Спроба 3 → 503 (після 1s)
# Спроба 4 → 503 (після 2s)
# Всі провалились → перевірити Redis → кеш HIT → X-Rescued: cache

Індикатор кешованої відповіді

Section titled “Індикатор кешованої відповіді”
HTTP/1.1 200 OK
X-Rescued: cache
Content-Type: application/json
{"base": "USD", "rates": {"EUR": 0.9234, ...}}
  • Завжди використовуйте Smart Cache для read-heavy ендпоінтів: курси валют → 60s300s; каталоги → 5m30m; ембеддинги → 1h24h.
  • Поєднуйте з X-Circuit-Breaker: on для критичних API.
  • Для операцій запису (платежів, мутацій) забезпечте idempotency через X-Proxy-Idempotency-Key.