key y un campo value te ofrece un almacén de clave-valor duradero, con alcance al espacio de trabajo, consultable a través del mismo cliente de API tipado que ya utilizas para los registros.
Definir el objeto de almacenamiento
Declara un objeto personalizado con dos campos:key (un TEXT único) y value (un RAW_JSON para que puedas almacenar cualquier carga útil serializable en JSON). Consulta Objetos para ver la referencia completa de defineObject.
src/objects/kv-store.object.ts
Aplicar la unicidad de la clave
Añade un índice único enkey para que la misma clave nunca pueda tener dos filas. Esta es la primitiva recomendada para la unicidad; consulta Datos → Índices únicos.
src/indexes/kv-store-key.index.ts
Leer y escribir desde una función de lógica
Envuelve el objeto tras unos pequeños helpers para que el resto de tu código se lea como una API de clave-valor:get, set y del. Utilizan CoreApiClient, que se genera a partir del esquema de tu espacio de trabajo y está completamente tipado contra el objeto kvStore.
src/logic-functions/handlers/kv-store.ts
El índice único protege contra duplicados, pero dos ejecuciones que escriben la misma clave nueva en el mismo instante aún pueden competir entre la búsqueda y la creación. Trata una creación que falle por la restricción de unicidad como “alguien más ganó”: captúrala y vuelve a leer, o inténtalo de nuevo como una actualización.
Úsalo: almacena en caché una llamada costosa
Un uso típico es almacenar en caché una respuesta lenta o limitada por rate limiting de un tercero para que ejecuciones repetidas la reutilicen en lugar de pagar el coste cada vez.src/logic-functions/getExchangeRate.logic-function.ts
Patrones y consejos
- Espacios de nombres. Añade un prefijo a las claves para mantener separadas las distintas responsabilidades y facilitar las búsquedas masivas:
sync-cursor:linear,cache:exchange-rate:USD:EUR,lock:nightly-report. Filtra conkey: { like: 'cache:%' }para listar o limpiar todo un espacio de nombres. - Caducidad (TTL). El almacén no tiene caducidad integrada. Almacena una marca de tiempo dentro de
value(como en el ejemplo de caché) y revísala al leer, o añade un campoDATE_TIMEy borra periódicamente las filas obsoletas desde una función activada por cron. - Qué almacenar.
RAW_JSONcontiene cualquier valor serializable en JSON: números, cadenas, arreglos, objetos. Mantén las entradas pequeñas; esto es para coordinación y almacenamiento en caché, no para blobs grandes o archivos. Para archivos, utiliza un campoFILESyuploadFile. - Visibilidad y permisos. Las filas residen en la base de datos del espacio de trabajo como cualquier otro registro, por lo que se pueden consultar a través de la API y respetan el rol de tu aplicación. Para mantener el almacén fuera de la interfaz principal, déjalo fuera de tu menú de navegación.
- Ámbito por registro. ¿Necesitas estado por registro en lugar de claves globales? Añade una relación desde el objeto de almacenamiento al objeto de destino en lugar de codificar el id en la clave.
Esto es una convención, no una característica independiente: el “KV Store” es solo un objeto personalizado normal que defines y consultas con la API estándar. Eso significa que se beneficia de la misma sincronización, permisos y herramientas que el resto de los datos de tu aplicación.