In Drupal gibt es zwei Ebenen des Caching.
1.) Dynamischer Seiten-Cache
Sie müssen die richtigen Cache-Metadaten für die JSON-Antwort angeben.
Verwenden Sie beispielsweise die Cache-Eigenschaften einer Konfigurations- oder Inhaltsentität
$response->addCacheableDependency($entitiy);
oder erstellen Sie ein zwischenspeicherbares Metadatenobjekt und fügen Sie dies der Antwort hinzu:
$build = [
'#cache' => [
'contexts' => ['url.query_args'],
'tags' => ['node:1', 'node_list'],
'max-age' => 300,
],
];
$cache_metadata = \Drupal\Core\Cache\CacheableMetadata::createFromRenderArray($build);
$response->addCacheableDependency($cache_metadata);
Sie können dies in einem benutzerdefinierten Controller verwenden oder in einem Ereignisabonnenten implementieren, um Antworten von anderen Modulen (Core oder Contrib) zu ändern.
2.) Interner Seiten-Cache
Das Modul Interner Seiten-Cache speichert alle Antworten für anonyme Anforderungen unabhängig von den Cache-Metadaten zwischen. Sie können dieses Modul deinstallieren, um diesen Cache zu deaktivieren.
Alternative Lösung
Fügen Sie auf der Clientseite jeder Anforderung eine andere Abfragezeichenfolge hinzu, um eine neue Antwort zu erhalten:
node/123?_format=json&time=123456789
Dadurch werden der interne Seitencache und Teile des dynamischen Seitencaches deaktiviert .
Referenz: https://www.drupal.org/docs/8/core/modules/rest/javascript-and-drupal-8-restful-web-services
Ich ziehe es vor, den Cache für meine Endpunkte vollständig zu deaktivieren. Sie können dem ResourceResponse- Objekt eine zwischenspeicherbare Abhängigkeit mit einem MaxAge-Wert von Null hinzufügen .
Hier ist ein Beispiel:
quelle
addCacheableDependency
Ihren Standort variieren können, damit Ihr Standort leistungsfähiger / skalierbarer wird.