Cache'owanie Shopify GraphQL: Praktyczny przewodnik

GraphQL nie działa tak jak REST. Nie można buforować danych na podstawie adresu URL. W REST jeden punkt końcowy (endpoint) odpowiada jednemu wpisowi w pamięci podręcznej. W GraphQL jeden punkt końcowy obsługuje wszystko. Dwa zapytania do tego samego adresu URL mogą zwrócić różne dane.

Aby poprawnie cache'ować GraphQL, klucz pamięci podręcznej musi zawierać:

  • zapytanie (query)
  • zmienne (variables)
  • kontekst użytkownika (lokalizacja lub segment kupującego)

Użyj warstw, aby zbudować szybki system:

  • Client cache: do ponownego wykorzystania sesji w przeglądarce.
  • Edge cache: dla publicznych stron sklepu.
  • App cache: dla współdzielonych danych na serwerze.
  • Persisted queries: dla stabilnych kluczy opartych na skrótach (hashach).

Dopasuj czas przechowywania w cache do częstotliwości zmian danych.

Cache'uj te elementy przez długi czas:

  • szczegóły produktu
  • kolekcje
  • ustawienia sklepu

Cache'uj te elementy przez krótki czas:

  • ceny
  • dostępność zapasów

Nigdy nie cache'uj tych elementów:

  • koszyki
  • procesy zakupowe (checkout)
  • ceny specyficzne dla klienta

Jeśli obsługujesz sklepy B2B, musisz uwzględnić identyfikator firmy (company ID) w kluczu pamięci podręcznej. W przeciwnym razie Klient A może zobaczyć cenę kontraktową Klienta B.

Użyj tych trzech metod, aby zarządzać świeżością danych:

  1. TTL (oparty na czasie): Ustaw czas wygaśnięcia. Jest to proste, ale często opiera się na zgadywaniu.
  2. Webhooks (oparty na zdarzeniach): To najdokładniejsza metoda. Gdy produkt zostaje zaktualizowany, Shopify wysyła webhook. Wykorzystaj ten webhook, aby usunąć stary wpis z pamięci podręcznej.
  3. Stale-while-revalidate: Natychmiast serwuj stare dane, podczas gdy w tle odświeżasz pamięć podręczną.

Zbuduj niezawodne obsługiwalniki (handlers) webhooków. Jeśli webhook zawiedzie, Twoja pamięć podręczna pozostanie nieaktualna. Użyj mechanizmu ponowień (retries), aby temu zapobiec.

Skup się na tych metrykach, aby sprawdzić, czy Twoja strategia działa:

  • Hit ratio: Dąż do wysokiego współczynnika trafień.
  • Latency: Czas odpowiedzi powinien spaść.
  • Uniknięte wywołania API: Większa liczba trafień oznacza niższe koszty.
  • Incydenty nieaktualnych danych: Twoim celem jest zero błędnych cen lub raportów o stanach magazynowych.

Warstwuj pamięci podręczne. Dopasuj czasy wygaśnięcia do zmienności danych. Używaj webhooków do czyszczenia starych danych. Twórz klucze, które uwzględniają personalizację.

Źródło: https://dev.to/masadashraf/caching-shopify-graphql-a-practical-guide-for-developers-33k8