Usando estedrupal gprr
comando do tutorial do Console do Drupal , criei um recurso REST personalizado no Drupal 8. Consigo usar esse recurso para recuperar um objeto JSON simples que diz olá ao usuário atual executando GET on:
http://localhost/example/hello?_format=json
O JSON retornado fica assim:
{ "hello": "tyler" }
Isso é de se esperar, quando eu estiver logado. Mas quando eu efetuo logout e faço outro GET no recurso, o mesmo resultado é retornado :
{ "hello": "tyler" }
Fazer uma limpeza completa do cache do Drupal corrige esse problema, mas gostaria de desabilitar especificamente o armazenamento em cache neste recurso. Como eu posso fazer isso?
Como solução alternativa, pensei que adicionar um carimbo de data / hora à string de consulta funcionaria:
http://localhost/example/hello?_format=json&time=123456789
Mas isso também retorna exatamente o mesmo resultado , independentemente do valor do carimbo de data / hora na string de consulta.
Por uma questão de brevidade, aqui está o código do esqueleto para criar o recurso GET:
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()
));
}
}
Existe uma configuração / configuração que preciso definir neste plug-in para desativar o cache em solicitações GET?
\Drupal
em locais onde pode injetar o serviço, que com base no código comentado, parece que você pode fazer aqui.Eu tive o mesmo problema.
Depois de ler a documentação e examinar esta página, consegui desligar o cache do meu endpoint personalizado. Aqui está um exemplo do meu código de trabalho dentro da função get () para meu endpoint:
Adicionando isso para referência futura, espero que ajude quem precisa.
Página de documentação CacheableResponseTrait
fonte
drush cr
, funcionou todas as vezes depois.Eu também tive o mesmo problema e a solução para isso é:
Você também pode ver a documentação CacheableMetadata e os contextos de cache .
fonte