Condividi tramite


Cache-Control nella memorizzazione nella cache delle query REST

Per gli endpoint REST, è possibile influenzare il modo in cui Il generatore di API dati usa la cache dei risultati della query interna con l'intestazione della Cache-Control richiesta.

Importante

Se la memorizzazione nella cache è disabilitata nella configurazione di runtime, queste direttive vengono ignorate e le query vengono eseguite normalmente.

Valori di Cache-Control supportati

Value Comportamento
no-cache Forza DAB a ignorare le cache L1 e L2, recuperare i dati aggiornati dal database e aggiornare le cache con il nuovo risultato.
no-store Indica a DAB di non memorizzare nella cache la risposta (non archivia in L1 o L2 e non tenta di recuperare dalla cache).

Comportamento

  • La corrispondenza delle direttive non fa distinzione tra maiuscole e minuscole.
  • DAB non interpreta altre direttive standard Cache-Control , ad esempio max-age o max-stale.
  • Si applica solo alle operazioni di query REST. Non usato per le direttive cache a livello di richiesta GraphQL.
  • I valori dell'intestazione HTTP della richiesta Cache-Control controllano sia la cache L1 che L2.

Annotazioni

DAB non imposta le intestazioni di risposta del controllo cache per qualsiasi operazione della cache.

Direttiva: no-cache

Forza una lettura aggiornata e aggiorna i livelli della cache.

Richiesta

GET /api/Books
Cache-Control: no-cache
Accept: application/json

Risposta (esempio)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

Effetto: la cache contiene ora questo nuovo risultato (soggetto al TTL configurato).

Direttiva: no-store

Usa un valore memorizzato nella cache esistente, se presente; in caso contrario, esegue una query sul database ma non popola (o aggiorna) la cache con il nuovo risultato.

Richiesta

GET /api/Books
Cache-Control: no-store
Accept: application/json

Risposta (esempio)

HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

Effetto: se questo risultato non è già stato memorizzato nella cache, non verrà archiviato. Una richiesta successiva only-if-cached potrebbe non riuscire se nessuna richiesta precedente ha popolato la cache.

Review

  • Usare no-cache quando è necessario forzare un aggiornamento dal database e aggiornare anche la cache.
  • Usare no-store quando si desidera che i dati ma non si desideri che questa risposta modifichi la cache (anche se potrebbe leggere un valore memorizzato nella cache esistente).
  • Omettere l'intestazione per il normale comportamento di memorizzazione nella cache.