Sync
Última actualización: 22 de junio de 2026
Sync es el endpoint de CDA que sincroniza los recursos publicados de un Space de forma incremental (delta). En lugar de volver a recibir cada vez la totalidad del Content, el Media y el Content Type publicados, el cliente recibe el conjunto completo una vez y lo almacena en caché localmente; a partir de ahí solo recibe lo que ha cambiado y lo que se ha eliminado desde la última sincronización para actualizar esa caché. Se usa para reducir el volumen de transferencia en aplicaciones que necesitan tener todo el material publicado a mano (caché sin conexión, índices de búsqueda, compilaciones de sitios estáticos, etc.).
La sincronización funciona en dos fases. Primero se recibe la totalidad con la sincronización inicial y se guarda el nextSyncUrl que viene en la respuesta. A partir de entonces se llama a la sincronización delta con el sync-token contenido en esa URL para recibir solo lo modificado y lo eliminado; la respuesta devuelve de nuevo un nuevo nextSyncUrl, así que se guarda ese valor y se repite el proceso.
Flujo de sincronización
- Sincronización inicial: llame con
?initial=true&type=Allpara recibir la totalidad del material publicado. Al final de la respuesta viene elnextSyncUrl. - Guardar el
nextSyncUrl: guarde tal cual el valornextSyncUrlrecibido. Dentro de esta URL está elsync-tokenque se usará en la siguiente llamada. - Sincronización delta: vuelva a llamar con el
sync-tokendelnextSyncUrlque guardó. La respuesta solo contiene lo que ha cambiado y lo que se ha eliminado desde la última sincronización, y al final viene un nuevonextSyncUrl. - Repetir: guarde el nuevo
nextSyncUrlrecibido y repita el paso 3 cada vez que necesite sincronizar.
El sync-token no es un valor que usted construya, sino un cursor opaco. No interprete su formato ni lo arme a mano; pase a la siguiente llamada, tal cual, el valor que recibió en el nextSyncUrl de la respuesta anterior.
Estructura de la respuesta
A continuación se muestra la respuesta de la sincronización inicial (type=All) de un Space de demostración. En items vienen mezcladas las entidades publicadas y los marcadores de eliminación, y al final viene el nextSyncUrl que se usará en la siguiente sincronización delta.
{
"sys": { "type": "PageResponse" },
"limit": 15,
"items": [
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7OGhwhlqvAvq",
"type": "Content",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"createdAt": "2026-06-15T15:16:12.151Z",
"updatedAt": "2026-06-16T14:31:20.073Z",
"revision": 3
},
"fields": {
"price": { "ko-KR": 18000 },
"description": { "ko-KR": "이중 진공 단열로 보온·보냉이 오래갑니다. 500ml 대용량." },
"photo": {},
"productName": { "ko-KR": "스테인리스 텀블러 500ml" }
}
},
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7O7vFALWs1GJ",
"type": "DeletedContent",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"createdAt": "2026-06-15T07:34:41.522Z",
"updatedAt": "2026-06-15T07:41:57.198Z",
"revision": 1
}
}
],
"links": {},
"nextSyncUrl": "/v1/spaces/HnQ32YiH/sync?sync-token=165rWhDiuLNoYOwjVQQAYXMA7makztXnhAV3qamYU75jFldqtvaEhMnr29PqsKTAbcoy6xs0iKpafM0KsKfZ2OHtA6pmbpx2pgx5jJ6bFzrkrBvoSvXF8tYZPkbw4X7B2EpCr95lgkQv4UJVCu1SSZIeH2ewzF"
}Claves principales:
sys.type: el tipo de envoltorio que envuelve la respuesta de sincronización; siempre es"PageResponse".limit: el número de elementos incluidos por entrega.items: el array en el que vienen mezcladas las entidades publicadas y los marcadores de eliminación. El primer elemento del ejemplo anterior es un Content vivo (con su cuerpo) y el segundo es un marcador de eliminación (DeletedContent) que viene solo consys, sin cuerpo. Los tipos de elemento se tratan en Tipos de elemento más abajo.links: el objeto de enlaces de paginación. Como Sync encadena la siguiente página y el siguiente delta mediantenextSyncUrl, este objeto puede estar vacío.nextSyncUrl: la ruta que se llamará en la siguiente sincronización delta. Elsync-tokende esta URL se usa tal cual en la siguiente llamada.
Los fields de items vienen como un mapa de Locales sin filtrar por un único idioma. Tal como el productName del ejemplo anterior es { "ko-KR": "스테인리스 텀블러 500ml" }, el valor de cada campo viene como un mapa que contiene los valores por Locale. A diferencia de las consultas de CDA Content y CDA Media, que con el parámetro locale seleccionan el valor como un único valor, Sync no filtra por un solo idioma y baja el mapa completo tal cual. El cliente recibe este mapa, lo almacena en caché localmente y selecciona el valor del idioma que quiera cuando lo necesite. Por eso Sync no tiene parámetro locale.
Que el photo del ejemplo anterior sea {} (mapa vacío) se debe a que el Media vinculado no existe en ningún Locale.
Tipos de elemento
En items vienen mezclados elementos con distinto sys.type. A grandes rasgos hay dos vertientes: entidades vivas y marcadores de eliminación.
sys.type | Cuerpo (fields) | Significado |
|---|---|---|
Content | Presente | Content publicado vivo. Viene con el cuerpo completo. |
Media | Presente | Media publicado vivo. Viene con el cuerpo completo. |
ContentType | Presente | Content Type publicado vivo. Viene con el cuerpo completo. |
DeletedContent | Ausente | Marcador de un Content eliminado. Viene solo con sys, sin cuerpo. |
DeletedMedia | Ausente | Marcador de un Media eliminado. Viene solo con sys, sin cuerpo. |
Un marcador de eliminación es la señal de que ese recurso ya no está en el material publicado. El cliente, al ver el sys.id del marcador, borra el elemento correspondiente de su caché local.
En la sincronización inicial, el parámetro type selecciona qué se recibe.
type | Lo que se recibe |
|---|---|
All | Los Content, Media y Content Type vivos y todos los marcadores de eliminación |
Content | Los Content vivos (junto con Content Type y Media) |
Media | Los Media vivos (junto con Content y Content Type) |
Deletion | Todos los marcadores de eliminación (DeletedContent y DeletedMedia) |
DeletedContent | Los marcadores de Content eliminados |
DeletedMedia | Los marcadores de Media eliminados |
Cuando type es Content o DeletedContent, con el parámetro content-type puede limitar a solo los elementos que pertenecen a un Content Type concreto.
API
La URL base de los dos endpoints siguientes es https://cda.weegloo.com/v1, y se requiere un token Bearer que autentique en CDA en la cabecera Authorization. Ambos comparten la misma ruta GET /spaces/{spaceId}/sync y distinguen la sincronización inicial de la delta mediante parámetros de consulta. A diferencia de las consultas de Content y Media, Sync no tiene parámetro locale. Los valores vienen como un mapa de Locales tal cual.
Un items vacío significa que no ha habido cambios desde la última sincronización. También en ese caso viene un nuevo nextSyncUrl, así que guarde ese valor y úselo tal cual en la siguiente sincronización.
Documentos relacionados
- Resumen de CDA: CDA en su conjunto y el comportamiento de entrega común.
- CDA Content: Content publicado recibido seleccionando el valor de un solo idioma mediante consulta individual.
- CDA Locale: la lista de Locales que se usa al seleccionar valores del mapa de Locales recibido por sincronización.
- Multilingüe (concepto): selección de valores por Locale y fallback.
