Tworzenie API
Tworzenie APIDodawanie cache HTTP

Dodawanie cache HTTP

Gdy queries są wykonywane na serwerze GraphQL przy użyciu GET (zamiast bardziej tradycyjnej metody POST), odpowiedź GraphQL może być buforowana po stronie klienta lub w pośrednich etapach między klientem a serwerem (np. w CDN), z wykorzystaniem standardowego cache HTTP.

Działa to naturalnie dla persisted queries, a dla single endpoint i custom endpoints można to osiągnąć przez dołączenie parametru ?query={ GraphQL query } do endpointu.

Konfiguracja jest tworzona za pomocą listy kontroli cache i dostarczana do endpointu poprzez konfigurację schematu.

Wykonywanie endpointu przez GET

Persisted queries są już przystosowane do wykonywania przez GET, ponieważ przechowują query GraphQL na serwerze (tzn. nie musi być ona podana w treści żądania).

Dla single endpoint i custom endpoints natomiast, query musi być podana w parametrze ?query=... dołączonym do adresu URL endpointu.

Na przykład następująca query GraphQL:

{
  posts {
    id
    title
    url
    author {
      id
      name
      url
    }
  }
}

...może być wykonana przez GET na single endpoint w następujący sposób:

https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }

Automatyczne obliczanie max-age

Wartość max-age odpowiedzi jest obliczana automatycznie na podstawie list kontroli dostępu przypisanych do endpointu (poprzez konfigurację schematu).

Wartość ta jest najniższą wartością max-age spośród wszystkich pól i dyrektyw w żądanej query, lub no-store jeśli:

  • wykonywana jest jakakolwiek mutacja
  • jakiekolwiek pole lub dyrektywa ma max-age z wartością 0
  • reguła kontroli dostępu musi sprawdzić stan użytkownika dla jakiegoś pola lub dyrektywy (w takim przypadku odpowiedź jest specyficzna dla użytkownika i nie może być buforowana)

Domyślny max-age

Pola, którym nie przypisano żadnej konkretnej wartości max-age, będą używać wartości domyślnej zdefiniowanej w konfiguracji schematu:

Domyślna wartość max-age w konfiguracji schematu

Jeśli nie jest ustawiona, zostanie użyta domyślna wartość max-age zdefiniowana na stronie Ustawień, w zakładce "Cache Control". Ta wartość, wynosząca 86400 sekund, może być zmodyfikowana w Ustawieniach.

Przykład

Załóżmy, że mamy następującą konfigurację wartości max-age dla pól typu User:

  • name => 600
  • url => 30

Wtedy odpowiedź na tę query będzie miała wartość max-age ustawioną na 86400 (ponieważ ani displayName, ani email nie zostały skonfigurowane, więc używają wartości domyślnej):

query {
  users {
    displayName
    email
  }
}

Odpowiedź na tę query będzie miała wartość max-age ustawioną na 30 (odpowiadającą url, które jest najniższą wartością spośród wszystkich skonfigurowanych pól):

query {
  user(by: {id: 1}) {
    name
    url
  }
}

Odpowiedź na tę query będzie miała wartość max-age ustawioną na no-store (ponieważ pole me wymaga stanu użytkownika):

query {
  me {
    name
    url
  }
}

Odpowiedź na tę query będzie miała wartość max-age ustawioną na no-store (ponieważ wykonuje mutację):

mutation {
  createPost {
    id
  }
}

Dostęp do wszystkich list kontroli cache

Po kliknięciu na "Cache Control Lists" w menu pluginu wyświetlana jest lista wszystkich utworzonych list kontroli cache:

Listy kontroli cache w panelu administracyjnym
Listy kontroli cache w panelu administracyjnym

Tworzenie nowej listy kontroli cache

Kliknij przycisk "Add New Cache Control List", aby otworzyć edytor WordPress:

Tworzenie listy kontroli cache

Nadaj tytuł liście kontroli cache, dodaj wpisy z polami i dyrektywami oraz skonfiguruj wartość max-age dla każdego z nich:

Tworzenie listy kontroli cache

Gdy wszystko będzie gotowe, kliknij przycisk Publish. Nowa lista kontroli cache stanie się wtedy dostępna dla konfiguracji schematu.

Wpisy Cache Control

Każda lista kontroli cache zawiera jeden lub wiele wpisów, z których każdy składa się z następujących elementów:

  • Pola, dla których konfiguruje się buforowanie
  • Dyrektywy, dla których konfiguruje się buforowanie
  • Wartość max-age dla każdego z nich

Wpis kontroli dostępu

Wybieranie pól z interfejsów

Oprócz pól z typów możemy również wybierać pola z interfejsów. W takim przypadku wartość max-age jest stosowana przy zapytaniu o te pola z dowolnego typu implementującego dany interfejs.

Wybieranie pola z interfejsu
Wybieranie pola z interfejsu

Opisywanie listy kontroli cache

Użyj pola "Excerpt" w panelu ustawień dokumentu, aby dodać opis do listy kontroli cache.

Więcej informacji znajdziesz w przewodniku Dodawanie opisu do API.

Korzystanie z listy kontroli cache

Po utworzeniu listy kontroli cache możemy sprawić, aby Custom Endpoint lub Persisted Query z niej korzystały, edytując odpowiednią konfigurację schematu i wybierając ACL z listy w bloku "Cache Control Lists".

Wybieranie listy kontroli cache w konfiguracji schematu

Jeśli konfiguracja nie zostanie dostosowana, zostaną użyte domyślne listy kontroli cache zdefiniowane na stronie Ustawień, w zakładce "Cache Control":

Wybieranie domyślnych list kontroli cache na stronie Ustawień