Интеграция Directus с React и Next.js: преимущества SDK, ISR и real-time

Когда контент и интерфейс живут в разных ритмах, страницы устаревают быстрее, чем обновляется база. Мы настраиваем интеграцию Directus с React и Next.js под ключ: связываем данные, права и режимы обновления так, чтобы контент появлялся на сайте без ручной пересборки. Вы получаете управляемую систему, где редактор меняет данные, а сайт остаётся актуальным.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Интеграция Directus с React и Next.js: преимущества SDK, ISR и real-time
Средний
~3-5 дней
Часто задаваемые вопросы

Интеграция Directus с React ломается на кэше и правах доступа

Интеграция Directus с React почти никогда не ломается на этапе «получили данные и отрисовали». Первый отказ приходит позже: контент-редактор правит материал в админке, а фронтенд ещё сутки отдаёт старую версию из кэша. Причина — данные тянут напрямую из браузера и кэшируют на уровне CDN или сборщика, не привязывая инвалидацию к событию изменения записи. В итоге рассинхрон между админкой и сайтом живёт до следующего релиза, а не до следующей правки.

Вторая типовая поломка — права доступа. Когда запросы к Directus уходят из клиентского кода, в сборку попадает статический токен с широкими правами: он виден в исходниках страницы и открывает доступ к коллекциям, которые пользователю видеть не положено. Публичная роль в Directus должна отдавать только разрешённые поля и записи, а всё, что требует авторизации, идёт через серверный слой приложения, где токен не покидает инфраструктуру.

Третья проблема — дубли запросов. Компоненты React при гидратации и повторном монтировании дёргают один и тот же эндпоинт по несколько раз, а прямые вызовы из браузера не проходят через общий слой кэширования. При активном трафике это превращается в лишнюю нагрузку на Directus и в разное состояние у компонентов, которые ждут одни и те же данные.

Все три отказа лежат в одной плоскости: граница между клиентом и сервером проведена не там, где нужно. Разбираем, как это закрывается на уровне архитектуры, а не точечными заплатками.

Что даёт связка Directus и Next.js на практике

Скорость сборки и время до первого контента

Directus отдаёт контент через API, а Next.js забирает его на этапе сборки: страницы каталога, статей и лендингов собираются в статику и раздаются с границы сети. На практике это даёт время до первого контента в пределах десятых долей секунды вместо секунд при запросе к базе на каждый показ. Инкрементальная регенерация меняет картину: при правке материала пересобирается только затронутая страница, а не весь сайт, поэтому публикация занимает секунды, а не минуты.

Класс отказов, который уходит

Когда фронтенд ходит в базу напрямую, падение хранилища или тяжёлый запрос роняют весь сайт. С разделением слоёв отказ ограничен: готовая статика продолжает отдаваться из кеша, а сбой касается только обновления контента. Это переводит аварию из «сайт лежит» в «правки подождут» — принципиально другой класс инцидентов и другой объём работ для дежурной смены.

Производительность под нагрузкой

Статические страницы не нагружают приложение при пиковых заходах: рост трафика упирается в раздачу файлов, а не в запросы к базе. Модель данных и права доступа описываются в Directus один раз, а фронтенд получает уже готовые структуры — меньше кода на разбор ответов и меньше расхождений между админкой и сайтом. Обновление контента не требует выката новой версии приложения, поэтому маркетинг и редакция работают независимо от релизного цикла разработки.

Режимы работы: статика, инкрементальная пересборка, живой поток

Directus отдаёт контент через API, но способ доставки этого контента на фронт определяет, как быстро правка в редакции становится видна посетителю и сколько нагрузки ложится на сервер. На практике выбирают между тремя режимами — и часто комбинируют их на одной странице: каталог собирается статически, карточка товара обновляется инкрементально, а блок наличия подтягивается живым потоком.

Режим Когда подходит Ограничения
Статика Лендинги, документация, страницы с редкими правками Полная пересборка при каждом изменении; контент устаревает между сборками
Инкрементальная пересборка Каталоги, блоги, страницы с частым, но не мгновенным обновлением Нужны вебхуки из Directus; задержка между правкой и публикацией; сложнее отлаживать кэш
Живой поток Счётчики, статусы, чаты, остатки на складе Требует постоянного соединения; не индексируется поисковиками; дороже по нагрузке

Статика даёт минимальное время отклика и предсказуемую нагрузку, но каждая правка означает пересборку всего сайта. Инкрементальная пересборка снимает это ограничение: вебхук из Directus по событию публикации пересобирает только затронутые страницы, а остальные остаются в кэше. Живой поток закрывает сценарии, где данные меняются между пересборками, — но его нельзя делать основой для страниц, которые должны попадать в поиск.

Выбор режима — это компромисс между свежестью контента, нагрузкой и сложностью поддержки. Ошибка на этом этапе проявляется позже: либо редактор ждёт публикации часами, либо сервер не выдерживает пересборок при каждом сохранении. Разбираем, как подобрать режим под конкретный раздел сайта.

Как мы внедряем интеграцию: от аудита до передачи

Внедрение начинается с аудита, а не с кода. На этом этапе мы разбираем текущий стек, смотрим, где живут данные и как они попадают на фронтенд, какие разделы обновляются чаще остальных и кто из команды заказчика будет работать с контентом. Аудит даёт карту узких мест: дублирование данных между сервисами, ручная выгрузка, страницы, которые пересобираются целиком из-за одной правки. Без этой карты любая интеграция превращается в переписывание наугад.

Дальше проектируем схему данных — коллекции, связи, права доступа по ролям, поля с валидацией. Схема фиксируется до настройки, потому что менять её после подключения фронтенда дороже в разы.

  1. Аудит. Инвентаризация источников данных, точек интеграции и сценариев редактора. На выходе — перечень узких мест с приоритетами.
  2. Схема данных. Модель коллекций, типы связей, роли и политики доступа, правила валидации на стороне API.
  3. Настройка. Подключение слоя данных к приложению, режимы отдачи контента, кеширование и инвалидация по событиям изменения.
  4. Проверка. Тесты на выборку, права, поведение при недоступности источника; прогон сценариев редактора от черновика до публикации.
  5. Передача. Доступы, окружения, инструкции для контент-команды и разработчиков, разбор типовых операций.
  6. Сопровождение. Мониторинг ошибок интеграции, обновления схемы под новые разделы, реакция на изменения нагрузки.

Каждый шаг заканчивается артефактом, который можно проверить: карта интеграций, описание схемы, конфигурация окружений, отчёт по тестам. Это снимает главный риск — когда после запуска никто не понимает, почему страница показывает устаревшие данные. Передача включает не только документацию, но и совместный разбор: ваша команда должна уметь добавить поле или раздел без нас.

Опишите задачу — вернёмся с оценкой и планом по этим этапам.

Артефакты на выходе: конфигурации, схемы, регламенты

Интеграция Directus с фронтендом — это не «настроили и забыли»: конфигурация коллекций, роли, права на поля и вебхуки живут в репозитории и меняются вместе с продуктом. Поэтому на выходе вы получаете не набор разрозненных настроек в админке, а воспроизводимый комплект, по которому интеграцию можно развернуть заново, передать другой команде или расширить без археологии.

  • Конфигурация схемы Directus — коллекции, поля, связи и типы в виде декларативных файлов в репозитории: схема поднимается на чистом окружении одной командой, а не собирается руками.
  • Схемы данных и связей — диаграмма коллекций, направлений связей и каскадов удаления: видно, что произойдёт с записью при удалении родителя, до того как это случится в проде.
  • Политики доступа — роли, права на коллекции и отдельные поля, правила фильтрации на уровне строк: редактор видит только свои материалы, публичный API отдаёт только опубликованное.
  • Конфигурация сборки и кеша — правила инкрементальной регенерации страниц и то, какие изменения контента её запускают: правка в Directus обновляет нужные страницы, а не весь сайт.
  • Настройки вебхуков и real-time — какие события публикации дёргают фронтенд, с какой задержкой контент доходит до посетителя и как обрабатывается недоставленное событие.
  • Регламент работы с контентом — какие поля обязательны, что проверяется перед публикацией, как заводится новая сущность: редактор не ломает вёрстку, потому что правила зашиты в схему.
  • Документация интеграции — карта эндпоинтов, переменные окружения, порядок развёртывания и откат на предыдущую версию схемы.
  • Инструкция по эксплуатации — что делать при рассинхроне кеша, как добавить поле без простоя и куда смотреть при ошибке доступа.

Каждый артефакт версионируется вместе с кодом: изменение прав или схемы проходит ревью и откатывается так же, как обычный релиз. Опишите вашу задачу — вернёмся с оценкой и планом, какие из этих документов и конфигураций нужны именно вам.

Кейс: как мы убрали рассинхрон контента и ускорили сборку

Что было до изменений

Проект — медийный портал с каталогом и редакционным разделом: контент-менеджеры правили материалы в админке, фронтенд собирался по расписанию. Правки не попадали на прод до следующего цикла — в среднем 40 минут ожидания, а при срочных публикациях редакция дублировала материал вручную. Рассинхрон между тем, что видел редактор в интерфейсе, и тем, что отдавал сайт, доходил до 15% правок за неделю: часть изменений терялась при перезаписи, часть уезжала в прод в неполном виде.

Сборка занимала 11 минут и пересобирала весь сайт целиком из-за одной правки в карточке товара. Откаты случались 2-3 раза в неделю: контент-команда не могла предсказать, что именно попадёт в релиз, и просила вернуть предыдущее состояние.

Что изменили

Мы перевели фронтенд на инкрементальную пересборку: правка в коллекции помечается тегом, и пересобираются только страницы, которые её используют. Полная сборка осталась для изменений в шаблонах и навигации. Параллельно настроили поток обновлений от админки к фронтенду — редактор видит результат сразу после сохранения, без ожидания цикла.

Добавили правило отката: каждый релиз привязан к снимку контента, вернуться к предыдущему состоянию можно одной операцией. Логи сборки и публикаций сведены в одну панель — видно, какая правка вызвала пересборку и сколько она заняла.

Что стало

Метрика До После
Время сборки после правки 11 мин 40-60 сек
Доля рассинхрона правок до 15% менее 1%
Откаты в неделю 2-3 единичные, по плановым релизам
Задержка публикации до 40 мин секунды

Сборка ускорилась за счёт отказа от полного пересбора: теперь пересобирается только затронутый участок. Рассинхрон ушёл, потому что источник правды один — админка, а фронтенд получает изменения потоком, а не пакетом по расписанию. Отказы перестали быть аварийными: снимок контента позволяет вернуться к рабочему состоянию без ручной сверки.

Стек здесь вторичен — важна схема: единый источник контента, точечная пересборка и предсказуемый откат. Такой подход переносится на каталоги, лендинги и личные кабинеты, где контент меняется чаще, чем код.

Чем отличается инкрементальная пересборка от живого потока?

Инкрементальная пересборка и живой поток решают одну задачу — доставить свежий контент в готовую страницу — но по-разному устроены и по-разному ломаются. Инкрементальная пересборка работает на стороне сервера: при изменении материала помечается только та страница, которая от него зависит, и она перестраивается в фоне, пока посетители получают предыдущую версию из кеша. Живой поток держит соединение между браузером и источником данных открытым и подменяет блок прямо в интерфейсе, без перезагрузки и без участия серверного кеша.

Отсюда главное отличие — в моменте обновления. Инкрементальная пересборка даёт задержку от нескольких секунд до минуты: контент меняется редко, зато страница отдаётся статикой и держит нагрузку. Живой поток обновляет данные мгновенно, но каждое открытое соединение — это ресурс, который надо сопровождать, а при обрыве связи интерфейс должен корректно показать устаревшие данные, а не пустоту.

Выбор режима определяется природой контента, а не удобством разработчика. Каталог, блог, лендинг, документация — это инкрементальная пересборка: материал меняется по расписанию, важна скорость отдачи и устойчивость к пикам. Панели мониторинга, чаты, статусы заказов, совместное редактирование — живой поток: здесь устаревшее значение на экране дороже, чем стоимость соединения.

На практике режимы почти всегда сосуществуют на одном сайте. Статическая часть собирается инкрементально, а отдельные блоки подписываются на живой поток через клиентский компонент — так страница остаётся быстрой, а критичные данные не отстают. Мы разводим эти зоны на этапе проектирования схемы данных, чтобы не перестраивать всю страницу ради одного счётчика и не тянуть живое соединение туда, где хватит пересборки.

Частые технические сомнения при интеграции Directus

Перед стартом проекта почти всегда всплывают одни и те же вопросы: не станет ли внешняя система точкой отказа, выдержит ли она пиковую нагрузку, реально ли уйти с неё без переписывания фронтенда. Ниже — разбор по каждому, с инженерной стороны.

Безопасность: не получит ли внешний сервис доступ к нашим данным?

Доступ разграничивается на уровне ролей и коллекций: публичной роли выдаются только те поля, которые реально нужны фронтенду, остальное закрыто. Токены для серверных запросов живут в переменных окружения и не попадают в клиентский бандл — браузер их не видит. Пишем на данные правила доступа, а не «доверяем всему, что пришло с фронта».

Нагрузка: выдержит ли система пики и рост контента?

Статику и редко меняющиеся страницы отдаём из кэша, к источнику идём только за свежими данными — при росте трафика это снимает основную часть запросов. Тяжёлые выборки закрываем индексами и ограничением полей в ответе. Если контента станет в разы больше, узкое место видно заранее по метрикам, а не по жалобам пользователей.

Миграция: что будет с текущим сайтом и данными?

Переносим данные пакетно, с проверкой целостности на каждом шаге, и держим старую систему рабочей до подтверждённого переключения. Схему описываем декларативно — её можно поднять в новой среде одной командой. Откат возможен на любом этапе, пока не отключили прежний контур.

Поддержка: не останемся ли мы одни с чужой системой?

Отдаём конфигурации, схему данных, описание ролей и доступов, инструкции по типовым операциям. Наши инженеры остаются на связи по сопровождению: обновления, разбор инцидентов, доработка моделей контента. Система остаётся управляемой, даже если задачи ведёт другая команда.

Опишите вашу задачу — вернёмся с оценкой и планом по интеграции.

Обсудим вашу задачу и вернёмся с оценкой

Чтобы оценка была предметной, а не «средней по рынку», нам нужен контекст по задаче: как устроена текущая система, какие данные она хранит и какие сценарии критичны. Ниже — что уточняем на первом разговоре и какие материалы помогают посчитать объём работ точно.

  • Цель и границы. Что должно измениться: новый раздел, интеграция Directus с фронтендом, ускорение выдачи или переезд на другую схему данных. Фиксируем, что входит в первый этап, а что осознанно откладываем.
  • Текущий стек и состояние. Какие фреймворки и версии в проде, где хостятся сервисы, как устроена сборка и выкладка. Если проект уже живёт — нужен доступ к репозиторию или краткое описание архитектуры.
  • Модель данных и контент. Какие сущности и связи есть сейчас, кто и как их редактирует, какие поля обязательны. Это определяет схему коллекций в Directus и объём миграции.
  • Сценарии и нагрузка. Какие страницы кэшируются, где нужен real-time, сколько пользователей и запросов ожидается в пике. От этого зависит выбор между статической генерацией и обновлением по запросу.
  • Ограничения и доступы. Требования к ролям и правам, работа с внешними сервисами, правила хранения персональных данных, окружения для тестов и приёмки.
  • Сроки и приоритеты. Что нужно к конкретной дате и что можно выпускать частями. Так мы предложим план, который не блокирует остальные направления.

В ответ вы получите оценку по этапам с трудозатратами, черновик плана работ с порядком выпуска и список рисков, которые стоит закрыть до старта. Если данных пока мало — опишите задачу словами, остальное уточним в переписке или на созвоне.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060