Collega un sito web all'API del CMS
L'API del CMS consente al tuo sito web di recuperare e renderizzare i contenuti pubblicati da Profound CMS. Puoi usarla per alimentare pagine di documentazione, pagine di marketing, blog, help center o qualsiasi altra esperienza basata sui contenuti.
L'integrazione tipica comprende tre parti:
Per collegare la tua applicazione al CMS, fornisci l'URL dell'API del CMS, l'ID del sito web e la chiave API.
const cmsConfig = {
cmsUrl: 'https://cms.dev.tryprofoun.com',
websiteId: 'your-website-id',
apiKey: process.env.PROFOUND_API_KEY,
};
Utilizza variabili di ambiente per i valori che cambiano tra gli ambienti:
NEXT_PUBLIC_CMS_API_URL=https://cms.dev.tryprofound.com
NEXT_PUBLIC_WEBSITE_ID=your-website-id
PROFOUND_API_KEY=your-api-key
Non esporre le chiavi API private nel codice lato client. Le chiavi API dovrebbero essere usate sul tuo server, nel processo di build o nelle tue rotte backend.
I contenuti nel CMS sono organizzati per schema. Ad esempio, il tuo progetto può avere schemi come post, category, page o section.
Utilizza il nome dello schema per recuperare i contenuti:
const posts = await cms.schema('post').fetchAll();
Per recuperare un singolo documento in base all'ID:
const post = await cms.schema('post').fetchSingleById('document-id');
Per recuperare contenuti localizzati, richiedi la versione tradotta dello schema:
const frenchPost = await cms
.schema('post')
.translation('fr')
.fetchSingleById('document-id');
Per i siti web che utilizzano pagine gestite dal CMS, puoi recuperare i contenuti in base al percorso URL corrente.
const route = await cms.route.getByPath({
websiteId: 'your-website-id',
path: '/docs/getting-started',
});
La risposta della route identifica la pagina e i blocchi da renderizzare. La tua applicazione può quindi recuperare i blocchi e renderizzarli con i propri componenti.
const blocks = await cms.block.getByIds({
websiteId: 'your-website-id',
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,
};
}
Puoi utilizzare i blocchi restituiti per renderizzare la pagina usando il sistema di componenti della tua applicazione.
I contenuti pubblicati del CMS possono essere memorizzati nella cache in modo sicuro. Per la maggior parte dei siti web, metti in cache le risposte dell'API per un breve periodo e rivalidale quando i contenuti cambiano.
Una configurazione comune è:
const content = await cache(
() => cms.schema('post').fetchAll(),
{
revalidate: 60,
tags: ['cms-posts'],
}
);
Comportamento di cache consigliato:
La modalità anteprima consente agli editor di visualizzare le modifiche non pubblicate prima della loro pubblicazione.
Uno schema comune consiste nell'utilizzare una route di anteprima separata, ad esempio:
/docs/getting-started
/cms-preview/docs/getting-started
Le pagine di produzione dovrebbero recuperare solo contenuti pubblicati. Le pagine di anteprima possono accettare parametri di anteprima, ad esempio:
?edit_mode=true
Le route di anteprima dovrebbero solitamente essere dinamiche e non dovrebbero essere memorizzate nella cache in modo statico.
I contenuti del CMS potrebbero non essere disponibili durante una build o una richiesta. La tua applicazione dovrebbe gestire la situazione in modo corretto.
Comportamento consigliato:
404 quando una route non esiste.async function getPost(id: string) {
try {
return await cms.schema('post').fetchSingleById(id);
} catch (error) {
console.error('Impossibile recuperare il post del CMS', error);
return null;
}
}
Mantieni private le chiavi API e utilizzale solo sul server. Non includere credenziali private nei bundle del browser o in JavaScript pubblico.
Utilizza variabili di ambiente pubbliche solo per valori non sensibili come:
Utilizza variabili di ambiente private per:
Utilizza l'API del CMS quando il tuo sito web deve recuperare contenuti strutturati, renderizzare route gestite dal CMS o supportare flussi di lavoro di anteprima per gli editor.
Un'integrazione standard dovrebbe: