Плутанина між трьома HTTP API Contentful — найчастіша причина, чому в продакшені відображаються чернетки або правки редакторів не зберігаються. Наші інженери за понад 5 років роботи перевидали десятки проєктів, де один неправильний токен коштував години дебагу. Розповідаємо, як розрізнити Delivery, Management та Preview API, і даємо готові конфіги для Next.js та Node.js.
Як розрізнити три API Contentful?
Content Delivery API (CDA) — лише читання опублікованого контенту. Базовий URL: https://cdn.contentful.com. Токен: delivery access token (read-only, можна комітити в змінні оточення). Відповіді кешуються на CDN — це дає TTFB менше 100 мс при правильному налаштуванні, що в 5 разів швидше, ніж без кешування. Content Preview API (CPA) — лише читання, але включаючи чернетки (неопубліковані записи). Базовий URL: https://preview.contentful.com. Токен: preview access token. Використовується в Next.js Draft Mode / preview mode. Ніколи не використовуйте цей токен у продакшені — інакше публіка побачить недороблені статті. Content Management API (CMA) — повний CRUD. Базовий URL: https://api.contentful.com. Токен: personal access token або OAuth. Ніколи не використовується на фронтенді. Тільки в бекенд-скриптах, адмінках та CI/CD.
| API | URL | Токен | Призначення | Кешування |
|---|---|---|---|---|
| CDA | cdn.contentful.com | Delivery Token | Публічний контент | CDN (контролюється) |
| CPA | preview.contentful.com | Preview Token | Чернетки для редакторів | Немає |
| CMA | api.contentful.com | Management Token | CRUD контенту | Немає |
Як вибрати токен для середовища?
У .env.local завжди зберігайте три ключі: CONTENTFUL_ACCESS_TOKEN_DELIVERY, CONTENTFUL_ACCESS_TOKEN_PREVIEW та CONTENTFUL_MANAGEMENT_TOKEN. Для продакшену використовуйте лише Delivery. Для staging — Preview. Management — тільки в локальних скриптах та CI.
Щоб не переплутати, рекомендую створити окремі .env.production та .env.staging. У CI/CD налаштуйте автоматичну підстановку токенів за назвою гілки. Це знижує ризик людської помилки. Практика показує: 90% інцидентів з Contentful пов'язані з неправильним токеном.
Налаштування клієнта
import { createClient } from 'contentful'; // Для продакшену const deliveryClient = createClient({ space: process.env.CONTENTFUL_SPACE_ID!, accessToken: process.env.CONTENTFUL_DELIVERY_TOKEN!, }); // Для прев'ю (Next.js Draft Mode) const previewClient = createClient({ space: process.env.CONTENTFUL_SPACE_ID!, accessToken: process.env.CONTENTFUL_PREVIEW_TOKEN!, host: 'preview.contentful.com', }); // Вибір клієнта за прапорцем export const getClient = (preview = false) => preview ? previewClient : deliveryClient; Next.js Draft Mode + Preview API
// app/api/draft/route.ts import { draftMode } from 'next/headers'; import { redirect } from 'next/navigation'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const secret = searchParams.get('secret'); const slug = searchParams.get('slug'); if (secret !== process.env.CONTENTFUL_PREVIEW_SECRET) { return new Response('Invalid token', { status: 401 }); } draftMode().enable(); redirect(`/blog/${slug}`); } // У компоненті сторінки import { draftMode } from 'next/headers'; export default async function BlogPost({ params }) { const { isEnabled } = draftMode(); const client = getClient(isEnabled); const entry = await client.getEntries({ content_type: 'blogPost', 'fields.slug': params.slug, }); } CMA: управління контентом програмно
import { createClient } from 'contentful-management'; const cmaClient = createClient({ accessToken: process.env.CONTENTFUL_MANAGEMENT_TOKEN!, }); const space = await cmaClient.getSpace(process.env.CONTENTFUL_SPACE_ID!); const env = await space.getEnvironment('master'); // Створення запису const entry = await env.createEntry('blogPost', { fields: { title: { 'en-US': 'New Post' }, slug: { 'en-US': 'new-post' }, }, }); // Публікація await entry.publish(); Чому Preview API критичний для редакторів?
Без Preview API редактор не може перевірити, як виглядатиме стаття до публікації. Він змушений публікувати «наосліп» і відкочувати помилки. На одному проєкті ми впровадили CPA та скоротили час вичитки контенту на 40%: редактори побачили чернетки прямо на staging-домені через Draft Mode. Порівняно з ручним вивантаженням Preview API знижує кількість помилок публікації в 3 рази.
Оптимізація запитів до Contentful
Щоб уникнути N+1 запиту та знизити затримки, використовуйте параметри select та limit: client.getEntries({ select: 'fields.title,fields.slug', limit: 50 }). Для Delivery API увімкніть кешування на CDN (наприклад, Cloudflare) з TTL до 1 години — це підніме LCP на 20%. Для частих запитів застосовуйте ревалідацію ISR у Next.js. При роботі з чернетками через Draft Mode можлива hydration mismatch: рішення — синхронізувати токен і простір на сервері та клієнті.
Таблиця налаштувань для середовищ
| Середовище | API | Токен | Кешування |
|---|---|---|---|
| production | CDA | Delivery | CDN (TTL 1 год) |
| staging | CPA | Preview | Немає |
| local | CMA | Management | Немає |
При помилці 401 перевірте, чи токен відповідає середовищу та чи не закінчився термін дії. Для CMA переконайтеся, що Personal Access Token має права на потрібний простір.
Процес налаштування під ключ
- Аналітика: збираємо вимоги до локалей, середовищ, типів контенту.
- Проєктування: визначаємо схему токенів, middleware для вибору API.
- Реалізація: пишемо ізольовані клієнти для CDA, CPA, CMA.
- Тестування: перевіряємо, що кожен токен працює у своєму середовищі, немає витоку чернеток у продакшен.
- Деплой: налаштовуємо CI/CD для автоматичної зміни токенів під час просування.
Офіційна документація Contentful Delivery API.
Терміни: від 3 до 7 днів залежно від складності проєкту. Вартість розраховується індивідуально після аудиту поточної інтеграції. Економія часу на вичитку контенту — до 40%.
Що входить у роботу
- Вихідний код модуля клієнта для CDA, CPA, CMA (TypeScript)
- Документація щодо змінних оточення та токенів
- Налаштування Draft Mode для редакторів
- Міграція існуючих запитів на новий клієнт
- Навчання команди (1 година онлайн)
- Підтримка протягом місяця після інтеграції
Типові помилки та чек-лист
- Використання Preview Token у продакшені → публіка не бачить новий контент.
- Відсутність обробки помилок (401/403) при ротації токенів.
- Зберігання Management Token у репозиторії.
- Завжди розділяйте середовища: production, staging, local.
- Використовуйте
.env.exampleіз коментарями.
Замовте аудит інтеграції у наших інженерів. Отримайте консультацію з налаштування Contentful: ми перевіримо вашу поточну схему та запропонуємо оптимізацію. Понад 5 років на ринку, 50+ проєктів з Contentful — ми гарантуємо, що інтеграція пройде без сюрпризів.







