Гид по технологиям

Headless CMS и Contentful: интеграция с React

8 min read Web Development Обновлено 11 Apr 2026
Contentful + React: быстрый старт
Contentful + React: быстрый старт

Код React в редакторе кода

Headless CMS отделяет управление контентом от его отображения. Contentful — популярный headless CMS с API (Delivery и Preview), который легко интегрировать в приложение на React через официальный пакет contentful. В статье — пошаговая инструкция: моделирование контента, наполнение, получение API-ключей, создание хука useContentful и отображение данных в React. Также — лучшие практики, чек-листы ролей, критерии приёмки и рекомендации по безопасности и развертыванию.

Important: никогда не публикуйте секретные ключи в публичных репозиториях и не используйте Preview API в продакшне.

Что такое headless CMS

Headless content management system (headless CMS) — это система для создания и управления контентом, где хранение и API доступа отделены от логики представления. Контент хранится централизованно и отдаётся через API (REST, GraphQL). Это позволяет многократно переиспользовать одни и те же данные в веб-приложениях, мобильных приложениях, цифровых табло и других каналах.

Ключевая идея: разделение ответственности. Редакторы работают с контентом в CMS, а разработчики контролируют, как этот контент форматируется и отображается в приложении.

Определение: Headless CMS — система, предоставляющая CRUD и API для контента без встроенной части рендеринга.

Почему выбрать headless CMS

  • Мультиканальность: один источник правды для разных фронтендов.
  • Гибкость: фронтенд не зависим от шаблонов CMS.
  • Быстрая итерация: дизайнеры и разработчики работают независимо.
  • Лёгкая интеграция: API-first под разные стеки.

Когда это не подходит: если нужен сайт «из коробки» с минимальной кастомизацией и готовыми шаблонами (тогда лучше классический CMS типа WordPress).

Начало работы с Contentful

Contentful — cloud-ориентированный headless CMS. Последовательность действий:

  1. Создать аккаунт на сайте Contentful и войти в нужное пространство (space). Пространство (space) служит контейнером для проекта, контента и ассетов.

Главная страница Contentful

  1. В левом верхнем углу пространства откройте вкладку Content model.

Вкладка модели контента в Contentful

  1. На странице настроек модели контента нажмите Add content type.

Кнопка добавления типа контента

  1. В появившемся модальном окне введите имя и описание типа контента. Поле Api Identifier заполнится автоматически на основе имени.

Форма создания нового типа контента

  1. Определите структуру: нажмите Add field и добавьте нужные поля. Пример полей:
user_ID = type 
first_name = type 
role = type 

Кнопка добавления поля в модель контента

  1. При добавлении поля выбирайте типы данных из всплывающего окна типов.

Окно выбора типа поля с доступными типами данных

  1. Укажите имя поля и нажмите Add and configure для дополнительной настройки.

Страница настроек поля модели контента

  1. Проверьте свойства поля на странице подтверждения. Здесь можно добавить валидации.

Страница подтверждения настроек поля модели контента

  1. Нажмите Confirm, чтобы добавить поле в модель.

  2. После добавления всех полей сохраните модель нажатием Save. Поля отобразятся списком.

Список полей в модели контента

Notes: думайте об именах полей и Api Identifier заранее — их использование в коде должно быть стабильным.

Добавление контента в Contentful

  1. На панели пространства перейдите в Content.

  2. Выберите нужный Content type в выпадающем меню и нажмите Add entry.

Вкладка контента в пространстве Contentful

  1. Заполните поля в редакторе и нажмите Publish для публикации записи.

Редактор контента в Contentful

Совет: используйте черновики для промежуточных изменений и Preview API для проверки контента до публикации.

Получение API-ключей

  1. Откройте Settings → API keys в верхнем правом меню.

Меню настроек Contentful с пунктом API keys

  1. Нажмите Add API key.

  2. Contentful сгенерирует ключи автоматически; укажите имя для набора ключей.

Страница настроек API ключей в Contentful

Нужны два параметра для запросов: space ID и access token. Существует два ключевых типа токенов:

  • Content Delivery API (CDA) — для продакшн-запросов, только опубликованный контент.
  • Content Preview API — для разработки и предпросмотра не опубликованного контента.

Important: в продакшне используйте CDA (Delivery). Preview API даёт доступ к черновикам, поэтому не храните его в публичных местах.

Исходный код проекта и зависимость

Репозиторий проекта доступен на GitHub (в исходной статье ссылка указывала на репозиторий). Для клиента Contentful установите официальный пакет:

npm install contentful

Создайте файл .env в корне проекта и добавьте ключи (пример для Vite):

VITE_REACT_APP_CONTENTFUL_SPACE_ID=""
VITE_REACT_APP_CONTENT_PREVIEW_API_ACCESS_TOKEN=""

Security: не коммитьте .env в репозиторий. Добавьте .env в .gitignore и используйте секреты в CI/CD для продакшна.

Хук useContentful: получение данных из Contentful

Создайте папку src/hooks и файл useContentful.jsx. Ниже — пример готового хука:

import { createClient } from "contentful";

export default useContentful = () => {

  const accessToken = import.meta.env.VITE_REACT_APP_CONTENT_PREVIEW_API_ACCESS_TOKEN;
  const spaceID =  import.meta.env.VITE_REACT_APP_CONTENTFUL_SPACE_ID;

  const client = createClient({
    space: spaceID,
    accessToken: accessToken,
    host: "preview.contentful.com",
    environment: 'master',
  });

  const getUsers = async () => {

    try {
      const data = await client.getEntries({
        content_type: "users",
        select: "fields"
      });
      const sanitizedData = data.items.map((item) => {
        return {
          ...item.fields      
        };
      });   
      return sanitizedData;
    } catch (error) {
      console.log(`Error fetching users ${error}`);
    }

  };
  return { getUsers };
};

Пояснения:

  • createClient устанавливает соединение с пространством через space ID и токен.
  • Опция host: “preview.contentful.com” указывает на Preview API; замените на дефолтный хост для Delivery API в продакшне.
  • getEntries фильтрует по content_type и возвращает только fields.
  • sanitize: хук возвращает массив объектов с полями, удобными для фронтенда.

Security Note: храните Production Delivery token в безопасном окружении на сервере или в переменных CI, особенно если в ключе — полном доступ к пространству.

Обновление App.jsx: отображение пользователей

Откройте App.jsx и замените шаблонный код на следующий:

import { useEffect, useState } from "react";
import useContentful from "./hooks/useContentful";

const App = () => {
  const [users, setUsers] = useState([]);
  const { getUsers} = useContentful();

  useEffect(() => {
    getUsers().then((response) => response && setUsers(response));
  }, []);
  return (
       <>
        

Contentful CMS With React Tutorial

{users.map((user, index) => (

{user.userId}

{user.firstName}

{user.role}

))} ); }; export default App

Важно: добавлена пустая зависимость [] в useEffect, чтобы запрос выполнялся один раз при монтировании компонента.

Запуск разработки:

npm run dev

Если вы используете create-react-app, команда может быть npm start.

Совет по стилю: используйте Tailwind CSS или любой другой CSS-фреймворк для быстрой стилизации.

Практические советы и лучшие практики

  1. Модель данных

    • Думайте о повторном использовании полей.
    • Разделяйте контент и презентацию. Храните структуру как можно более декларативной.
  2. Именование

    • Используйте консистентные Api Identifier и ключи полей (camelCase или snake_case — придерживайтесь выбранного стиля).
  3. Локализация

    • Contentful поддерживает локали. Проектируйте поля с учётом переводов, если приложение многоязычное.
  4. Кеширование

    • Кешируйте ответы API на уровне клиента или CDN. Delivery API подходит для кешируемого контента.
  5. Производительность

    • Используйте select и include при getEntries, чтобы запрашивать только нужные поля и связанные сущности.
  6. Безопасность

    • Разграничивайте права доступа на уровне пространства и сред (environments).
    • Не храните секреты в публичных репозиториях.
  7. Работа с Preview API

    • Preview API полезен для редакторов и для тестирования изменений перед публикацией. Не используйте его в публичном продакшне.

Частые проблемы и способы их решения

  • Пустой ответ от getEntries: проверьте content_type и наличие опубликованных записей (для Delivery API).
  • Неправильные имена полей: Api Identifier чувствителен к регистру — сверяйтесь с моделью.
  • Ошибки CORS: при прямом запросе из браузера проверьте настройки CORS в вашем хостинге и используйте серверный прокси при необходимости.

Подходы альтернативы

Если Contentful по каким-то причинам не подходит, рассмотрите другие headless CMS:

  • Strapi — self-hosted, много гибкости и плагинов.
  • Sanity — реальное время и сильная модель данных.
  • Prismic — ориентирован на маркетинговые сайты.

Выбор зависит от требований: хостинг, бюджет, набор фич и простота управления.

Мини-методология развертывания (Rollout)

  1. Разработать модель контента в staging-пространстве.
  2. Наполнить тестовый контент и прогнать QA, используя Preview API.
  3. Провести интеграционные тесты фронтенда.
  4. Перенести конфигурацию в продакшн (создать production space/environment).
  5. Переключить приложение на Delivery API и запустить мониторинг.

Роль‑базированные чек-листы

Developer:

  • Настроить API клиент и переменные окружения.
  • Написать тесты для интеграции с Contentful.
  • Настроить кеширование и обработку ошибок.

Content Editor:

  • Создать и протестировать записи в Preview.
  • Проверить локализации и валидации полей.
  • Подготовить план публикаций.

DevOps:

  • Секреты хранятся в менеджере секретов CI/CD.
  • Настроить environment для stage/prod.
  • Обеспечить резервное копирование и мониторинг.

Product Manager:

  • Утверждение структуры контента и бизнес-полей.
  • Согласовать модель переводов и версионности.
  • План релиза контента.

Критерии приёмки

  • Приложение корректно получает и отображает записи из пространства.
  • Поля соответствуют спецификации модели контента.
  • Ошибки API корректно обрабатываются и логируются.
  • Preview-режим позволяет просматривать черновики, а продакшн использует Delivery API.

Тесты и приёмочные сценарии

  • Интеграционный тест: мокировать client.getEntries и проверить рендер списка пользователей.
  • E2E: создать запись в Preview и убедиться, что её видно в приложении в Preview-режиме.
  • Нагрузочный тест: симулировать частые запросы и убедиться в работе кеша и лимитов API.

Простая схема принятия решения (Mermaid)

flowchart TD
  A[Нужно ли многофронтендов?] -->|Да| B[Использовать headless CMS]
  A -->|Нет| C[Рассмотреть классический CMS]
  B --> D{Нужно self-host?}
  D -->|Да| E[Strapi или похожее]
  D -->|Нет| F[Contentful / Sanity / Prismic]

Краткий глоссарий (1 строка)

  • space: контейнер для контента и ассетов в Contentful.
  • environment: среда внутри space (dev, staging, master).
  • CDA: Content Delivery API — для продакшн-запросов.
  • Preview API: API для предварительного просмотра черновиков.

Меры безопасности и конфиденциальность

  • Храните ключи в защищённых переменных окружения и секрет-менеджерах.
  • Ограничивайте права доступа пользователей в Contentful по ролям.
  • Для чувствительных данных используйте серверный слой между приложением и Contentful.

Локальные рекомендации для русскоязычных команд

  • Учитывайте разные форматы дат и чисел при отображении.
  • При импорте контента из внешних источников проверяйте кодировку (UTF-8).
  • Если планируется хостинг в России, убедитесь в соответствии политики хранения данных и инфраструктуры организации.

Социальная превью и анонс

OG Title: Contentful + React: быстрый старт OG Description: Инструкция по интеграции Contentful с React: моделирование, получение ключей, useContentful-хук и лучшие практики.

Короткий анонс (100–200 слов):

Headless CMS позволяет разделить управление контентом и фронтенд. В этой пошаговой инструкции вы узнаете, как создать модель контента в Contentful, добавить записи, получить API-ключи и подключить Contentful к React через кастомный хук. Также представлены проверенные практики безопасности, чек-листы для ролей и критерии приёмки, чтобы развернуть интеграцию безопасно и предсказуемо.

Заключение

Интеграция headless CMS с фронтендом упрощает масштабирование и многоканальное использование контента. Contentful даёт удобный интерфейс для редакторов и мощные API для разработчиков. Следуйте лучшим практикам по безопасности, кешированию и моделированию данных, чтобы интеграция была надёжной и управляемой.

Summary:

  • Разделяйте контент и представление.
  • Используйте Preview API для тестирования и Delivery API для продакшна.
  • Защищайте токены и автоматизируйте развертывание через CI/CD.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Калибровочные кадры в астрофотографии — руководство
Астрофотография

Калибровочные кадры в астрофотографии — руководство

Проверить число циклов зарядки iPhone
Гайды

Проверить число циклов зарядки iPhone

SPI и I2C на Raspberry Pi: включение и использование
Raspberry Pi

SPI и I2C на Raspberry Pi: включение и использование

Как подписать PDF: 6 проверенных способов
Документы

Как подписать PDF: 6 проверенных способов

Alt-Tab не работает в Windows — как исправить
Windows

Alt-Tab не работает в Windows — как исправить

Noisli — звуки для фокуса и снижения стресса
Продуктивность

Noisli — звуки для фокуса и снижения стресса