key e um campo value oferece um armazenamento durável de chave-valor, com escopo para o workspace, consultável por meio do mesmo cliente de API tipado que você já usa para registros.
Definir o objeto de armazenamento
Declare um objeto personalizado com dois campos —key (um TEXT único) e value (um RAW_JSON, para que você possa armazenar qualquer payload serializável em JSON). Consulte Objects para a referência completa de defineObject.
src/objects/kv-store.object.ts
Aplicar unicidade à chave
Adicione um índice exclusivo emkey para que a mesma chave nunca possa ter duas linhas. Esta é a primitiva recomendada para unicidade — consulte Data → Unique indexes.
src/indexes/kv-store-key.index.ts
Ler e gravar a partir de uma função de lógica
Encapsule o objeto por trás de alguns pequenos helpers para que o restante do seu código pareça uma API de chave-valor —get, set e del. Eles usam CoreApiClient, que é gerado a partir do schema do seu workspace e totalmente tipado em relação ao objeto kvStore.
src/logic-functions/handlers/kv-store.ts
O índice exclusivo protege contra duplicatas, mas duas execuções gravando a mesma nova chave no mesmo instante ainda podem competir entre a busca e a criação. Trate uma criação que falhar na restrição de unicidade como “alguém mais venceu” — capture o erro e leia novamente, ou tente novamente como uma atualização.
Use-o: armazenar em cache uma chamada cara
Um uso típico é armazenar em cache uma resposta lenta ou com limite de taxa de terceiros, para que execuções repetidas a reutilizem em vez de pagar o custo todas as vezes.src/logic-functions/getExchangeRate.logic-function.ts
Padrões e dicas
- Namespacing. Prefixe chaves para manter diferentes responsabilidades separadas e facilitar buscas em lote —
sync-cursor:linear,cache:exchange-rate:USD:EUR,lock:nightly-report. Filtre comkey: { like: 'cache:%' }para listar ou limpar todo um namespace. - Expiração (TTL). O armazenamento não possui expiração integrada. Armazene um carimbo de data/hora dentro de
value(como no exemplo de cache) e verifique-o na leitura, ou adicione um campoDATE_TIMEe limpe periodicamente linhas obsoletas a partir de uma função acionada por cron. - O que armazenar.
RAW_JSONcomporta qualquer valor serializável em JSON — números, strings, arrays, objetos. Mantenha as entradas pequenas; isto é para coordenação e cache, não para blobs grandes ou arquivos. Para arquivos, use um campoFILESeuploadFile. - Visibilidade e permissões. As linhas vivem no banco de dados do workspace como qualquer outro registro, portanto podem ser consultadas pela API e respeitam a role do seu app. Para manter o armazenamento fora da interface principal, deixe-o de fora do seu menu de navegação.
- Escopo para um registro. Precisa de estado por registro em vez de chaves globais? Adicione uma relation do objeto de armazenamento para o objeto de destino em vez de codificar o id na chave.
Isto é uma convenção, não um recurso separado — o “KV Store” é apenas um objeto personalizado comum que você define e consulta com a API padrão. Isso significa que ele se beneficia da mesma sincronização, permissões e ferramentas que o restante dos dados do seu app.