Eine Website mit der CMS-API verbinden
Die CMS-API ermöglicht es Ihrer Website, veröffentlichte Inhalte aus Profound CMS abzurufen und darzustellen. Sie können sie nutzen, um Dokumentationsseiten, Marketingseiten, Blogs, Helpcenter oder jede andere inhaltsorientierte Erfahrung zu betreiben.
Die typische Integration besteht aus drei Teilen:
Um Ihre Anwendung mit dem CMS zu verbinden, geben Sie Ihre CMS-API-URL, die Website-ID und den API-Schlüssel an.
const cmsConfig = {
cmsUrl: 'https://cms.dev.tryprofoun.com',
websiteId: 'your-website-id',
apiKey: process.env.PROFOUND_API_KEY,
};
Verwenden Sie Umgebungsvariablen für Werte, die sich zwischen Umgebungen ändern:
NEXT_PUBLIC_CMS_API_URL=https://cms.dev.tryprofound.com
NEXT_PUBLIC_WEBSITE_ID=your-website-id
PROFOUND_API_KEY=your-api-key
Geben Sie private API-Schlüssel nicht im Client-Code preis. API-Schlüssel sollten auf Ihrem Server, in Ihrem Build-Prozess oder in Ihren Backend-Routen verwendet werden.
Inhalte im CMS sind nach Schemas organisiert. Ihr Projekt kann beispielsweise Schemas wie post, category, page oder section haben.
Verwenden Sie den Schema-Namen, um Inhalte abzurufen:
const posts = await cms.schema('post').fetchAll();
So rufen Sie ein einzelnes Dokument anhand der ID ab:
const post = await cms.schema('post').fetchSingleById('document-id');
Um lokalisierte Inhalte abzurufen, fordern Sie die übersetzte Version des Schemas an:
const frenchPost = await cms
.schema('post')
.translation('fr')
.fetchSingleById('document-id');
Für Websites, die CMS-verwaltete Seiten verwenden, können Sie Inhalte anhand des aktuellen URL-Pfads abrufen.
const route = await cms.route.getByPath({
websiteId: 'your-website-id',
path: '/docs/getting-started',
});
Die Routen-Antwort identifiziert die Seite und die zu rendernden Blöcke. Ihre Anwendung kann anschließend die Blöcke abrufen und mit den eigenen Komponenten rendern.
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,
};
}
Sie können die zurückgegebenen Blöcke verwenden, um die Seite mit dem Komponenten-System Ihrer Anwendung zu rendern.
Veröffentlichte CMS-Inhalte können bedenkenlos zwischengespeichert werden. Für die meisten Websites sollten Sie API-Antworten für einen kurzen Zeitraum cachen und sie erneut validieren, wenn sich Inhalte ändern.
Eine gängige Konfiguration ist:
const content = await cache(
() => cms.schema('post').fetchAll(),
{
revalidate: 60,
tags: ['cms-posts'],
}
);
Empfohlenes Cache-Verhalten:
Der Vorschaumodus ermöglicht es Redakteuren, unveröffentlichte Änderungen vor der Veröffentlichung zu sehen.
Ein gängiges Muster ist die Verwendung einer separaten Vorschaustrecke, zum Beispiel:
/docs/getting-started
/cms-preview/docs/getting-started
Produktionsseiten sollten nur veröffentlichte Inhalte abrufen. Vorschauseiten können Vorschauparameter akzeptieren, beispielsweise:
?edit_mode=true
Vorschaustrecken sollten in der Regel dynamisch sein und nicht statisch zwischengespeichert werden.
CMS-Inhalte können während eines Builds oder einer Anfrage nicht verfügbar sein. Ihre Anwendung sollte damit elegant umgehen.
Empfohlene Vorgehensweise:
404 zurück, wenn eine Route nicht existiert.async function getPost(id: string) {
try {
return await cms.schema('post').fetchSingleById(id);
} catch (error) {
console.error('Failed to fetch CMS post', error);
return null;
}
}
Bewahren Sie API-Schlüssel privat auf und verwenden Sie sie nur auf dem Server. Fügen Sie keine privaten Zugangsdaten in Browser-Bundles oder öffentliches JavaScript ein.
Verwenden Sie öffentliche Umgebungsvariablen nur für nicht sensible Werte wie:
Verwenden Sie private Umgebungsvariablen für:
Verwenden Sie die CMS-API, wenn Ihre Website strukturierte Inhalte abrufen, CMS-verwaltete Routen rendern oder Vorschau-Workflows für Redakteure unterstützen muss.
Eine Standardintegration sollte: