Cache API
Referência da Cache API: abra um cache nomeado em uma function e armazene, recupere e exclua respostas com CacheStorage e Cache.
A Cache API do Azion Runtime permite que uma function leia e grave no Cache. O objeto global caches é um CacheStorage que abre caches pelo nome. Cada Cache que ele retorna armazena objetos Response sob uma chave, de modo que uma function pode guardar uma resposta que construiu e retorná-la novamente.
Acesso
Uma function acessa a Cache API por meio do objeto global caches. Abra um cache pelo nome com caches.open() e, em seguida, chame os métodos de Cache no objeto que ele retorna:
CacheStorage
O objeto global caches é um CacheStorage. Ele tem três métodos, e cada um recebe o nome de um cache.
| Método | Retorna | Descrição |
|---|---|---|
open(name) | Cache | Abre o cache com esse nome. |
has(name) | booleano | true quando o cache foi aberto antes na mesma requisição. false para um nome que a requisição não abriu. |
delete(name) | booleano | Exclui o cache com esse nome. Retorna false para um nome que a requisição não abriu. |
caches.keys() e caches.default não estão disponíveis: os dois são undefined.
Cache
caches.open() retorna um Cache. Um Cache armazena cada resposta sob uma chave, que é um objeto Request ou uma string de URL.
| Método | Retorna | Descrição |
|---|---|---|
match(request) | Response ou nenhum valor | Retorna a resposta armazenada sob a chave. Quando a chave não tem entrada, a promise é resolvida sem resposta, e if (cached) é falso. |
put(request, response) | — | Armazena a resposta sob a chave. O método da requisição precisa ser GET. |
delete(request) | booleano | Remove a entrada da chave e retorna true. Um match() posterior para a chave não retorna resposta. |
matchAll(), add(), addAll() e keys() não estão disponíveis em um Cache.
Respostas armazenadas
O header cache-control de uma resposta não impede que put() a armazene. Uma resposta com cache-control: no-store é armazenada, e match() a retorna na mesma requisição.
Uma resposta armazenada com cache-control: max-age=600 é encontrada por requisições posteriores. Depois que delete() remove a entrada, match() não retorna resposta.
Exemplo
A function abaixo executa operações de CacheStorage e de Cache escolhidas pelos headers da requisição. Ela lê três headers:
| Header | Valores | Descrição |
|---|---|---|
x-storage-operation | open, has, delete | A operação de CacheStorage a executar. |
x-cache-operation | match, put, delete, none, all | A operação de Cache a executar depois de open. none apenas abre o cache, e all executa put, match e delete em uma única requisição. |
x-storage-name | Qualquer string | Nome do cache. Opcional; o padrão é my-cache. |
Em uma function com deploy feito, o argumento env é um objeto vazio, então uma requisição sem x-storage-name usa my-cache.
A function responde às requisições enviadas na ordem abaixo com estas respostas:
x-storage-operation | x-cache-operation | Status | Corpo |
|---|---|---|---|
| Não enviado | Não enviado | 400 | Invalid cache storage operation |
open | none | 200 | success in cache open! |
open | put | 200 | my content |
open | match | 404 | No content cached |
open | delete | 200 | OK |
open | all | 200 | all ops ok |
has | Não enviado | 200 | Cache storage 'my-cache' does NOT exist. |
delete | Não enviado | 200 | Cache storage 'my-cache' doesn't exist. |
bogus | Não enviado | 400 | Invalid cache storage operation |
A resposta que essa function armazena não tem header cache-control, e uma requisição match após a requisição put responde 404. Uma resposta armazenada com cache-control: max-age é encontrada por requisições posteriores, como descreve a seção Respostas armazenadas. As requisições has e delete não abrem o cache, e as duas informam que my-cache não existe.
Erros
| Erro | Causa | Solução |
|---|---|---|
TypeError: Request method must be GET | put() recebeu uma requisição cujo método não é GET, como POST. | Armazene a resposta sob uma requisição GET ou uma string de URL. |
ReferenceError: caches is not defined | O código roda com azion dev, que não fornece caches. | Teste o código em uma function com deploy feito. |