Mit dem Drupal Console- Befehl dieses Tutorialsdrupal gprr
habe ich in Drupal 8 eine benutzerdefinierte REST-Ressource erstellt. Mit dieser Ressource kann ich ein einfaches JSON-Objekt abrufen, das den aktuellen Benutzer begrüßt, indem ich ein GET für Folgendes ausführe:
http://localhost/example/hello?_format=json
Der zurückgegebene JSON sieht dann folgendermaßen aus:
{ "hello": "tyler" }
Dies ist zu erwarten, da ich angemeldet bin. Wenn ich mich jedoch abmelde und ein weiteres GET für die Ressource durchführe, wird dasselbe Ergebnis zurückgegeben :
{ "hello": "tyler" }
Durch das Löschen eines vollständigen Drupal-Cache wird dieses Problem behoben, aber ich möchte das Caching für diese Ressource speziell deaktivieren. Wie kann ich das machen?
Als Problemumgehung dachte ich, dass das Hinzufügen eines Zeitstempels zur Abfragezeichenfolge funktionieren würde:
http://localhost/example/hello?_format=json&time=123456789
Dies liefert jedoch auch genau das gleiche Ergebnis , unabhängig davon, welcher Zeitstempelwert in der Abfragezeichenfolge enthalten ist.
Der Kürze halber ist hier der Grundgerüstcode zum Erstellen der GET-Ressource:
class ExampleHello extends ResourceBase {
/**
* {@inheritdoc}
*/
public static function create(/* ... */) {
return new static(/* ... */);
}
/**
* Constructs a Drupal\rest\Plugin\ResourceBase object.
*/
public function __construct(/* ... */) {
parent::__construct(/* ... */);
// ...
}
/*
* Responds to GET requests.
*/
public function get() {
$account = \Drupal::currentUser()->getAccount();
if (!$account->id()) {
return new ResourceResponse(array(
'welcome' => 'visitor'
));
}
return new ResourceResponse(array(
'hello' => $account->getAccountName()
));
}
}
Gibt es eine Konfiguration / Einstellung, die ich für dieses Plugin festlegen muss, um das Caching bei GET-Anforderungen zu deaktivieren?
\Drupal
an Orten zu verwenden, an denen Sie den Dienst einspeisen können. Dies sieht basierend auf Ihrem auskommentierten Code so aus, wie Sie es hier tun können.