Conectar un sitio web a la API del CMS
La API del CMS permite que tu sitio web obtenga y renderice contenido publicado desde Profound CMS. Puedes usarla para impulsar páginas de documentación, páginas de marketing, blogs, centros de ayuda o cualquier otra experiencia impulsada por contenido.
La integración típica tiene tres partes:
Para conectar tu aplicación con el CMS, proporciona la URL de la API del CMS, el ID del sitio web y la clave API.
const cmsConfig = {
cmsUrl: 'https://cms.dev.tryprofoun.com',
websiteId: 'tu-id-de-sitio-web',
apiKey: process.env.PROFOUND_API_KEY,
};
Usa variables de entorno para valores que cambian entre entornos:
NEXT_PUBLIC_CMS_API_URL=https://cms.dev.tryprofound.com
NEXT_PUBLIC_WEBSITE_ID=tu-id-de-sitio-web
PROFOUND_API_KEY=tu-clave-api
No expongas claves API privadas en el código del lado del cliente. Las claves API deben usarse en tu servidor, en tu proceso de compilación o en tus rutas de backend.
El contenido en el CMS se organiza por esquema. Por ejemplo, tu proyecto puede tener esquemas como publicacion, categoria, pagina o seccion.
Utiliza el nombre del esquema para obtener contenido:
const posts = await cms.schema('publicacion').fetchAll();
Para obtener un solo documento por ID:
const post = await cms.schema('publicacion').fetchSingleById('id-del-documento');
Para obtener contenido localizado, solicita la versión traducida del esquema:
const frenchPost = await cms
.schema('publicacion')
.translation('fr')
.fetchSingleById('id-del-documento');
Para los sitios web que usan páginas administradas por el CMS, puedes obtener contenido basado en la ruta URL actual.
const route = await cms.route.getByPath({
websiteId: 'tu-id-de-sitio-web',
path: '/docs/primeros-pasos',
});
La respuesta de la ruta identifica la página y los bloques que se deben renderizar. Tu aplicación puede entonces obtener los bloques y renderizarlos con tus propios componentes.
const blocks = await cms.block.getByIds({
websiteId: 'tu-id-de-sitio-web',
ids: route.blockIds,
});
async function getDocsPage(path: string) {
const route = await cms.route.getByPath({
websiteId: process.env.WEBSITE_ID,
path,
});
const blocks = await cms.block.getByIds({
websiteId: process.env.WEBSITE_ID,
ids: route.blockIds,
});
return {
title: route.label,
path: route.path,
blocks,
};
}
Puedes usar los bloques devueltos para renderizar la página con el sistema de componentes de tu aplicación.
El contenido publicado del CMS es seguro para almacenar en caché. Para la mayoría de los sitios web, almacena en caché las respuestas de la API por un breve periodo y revalídalas cuando el contenido cambie.
Una configuración común es:
const content = await cache(
() => cms.schema('publicacion').fetchAll(),
{
revalidate: 60,
tags: ['cms-publicaciones'],
}
);
Comportamiento de caché recomendado:
El modo de vista previa permite que los editores vean los cambios no publicados antes de publicarlos.
Un patrón común es usar una ruta de vista previa separada, por ejemplo:
/docs/primeros-pasos
/cms-preview/docs/primeros-pasos
Las páginas de producción deben obtener solo contenido publicado. Las páginas de vista previa pueden aceptar parámetros de vista previa, como:
?modo_edicion=true
Las rutas de vista previa generalmente deben ser dinámicas y no deben almacenarse en caché de manera estática.
El contenido del CMS puede no estar disponible durante una compilación o una solicitud. Tu aplicación debe manejar esto de manera adecuada.
Comportamiento recomendado:
404 cuando una ruta no existe.async function getPost(id: string) {
try {
return await cms.schema('publicacion').fetchSingleById(id);
} catch (error) {
console.error('No se pudo obtener la publicación del CMS', error);
return null;
}
}
Mantén las claves API privadas y úsalas solo en el servidor. No incluyas credenciales privadas en paquetes del navegador ni en JavaScript público.
Usa variables de entorno públicas solo para valores no sensibles como:
Usa variables de entorno privadas para:
Usa la API del CMS cuando tu sitio web necesite obtener contenido estructurado, renderizar rutas administradas por el CMS o admitir flujos de trabajo de vista previa para editores.
Una integración estándar debe: