Регулярно обновляемый и настраиваемый контент — это сердце любого сайта. Headless CMS привносят необходимую гибкость в управление контентом и удобный способ его доставки до целевой аудитории, что уже сложно себе представить как раньше мы обходились классическими монолитными CMS. На рынке более сотни CMS и все больше новых платформ придерживаются Headless подхода. Какая подойдет вашему проекту? Ответить на этот вопрос поможет сравнительный анализ. В этом материале проведем детальное сравнение Strapi и Directus. В предыдущих статьях мы провели сравнительный анализ Sanity и Contentful.
CMS (система управления контентом) — это коробочное решение для создания, редактирования и публикации цифрового контента через единый интерфейс. С Headless CMS можно отделить фронтенд от бэкенда. Это позволит управлять контентом в одном месте и распространять его на несколько устройств, чтобы все фрагменты правильно отображались на каждом девайсе, с которым взаимодействуют пользователи.
Strapi
Strapi — это headless CMS с открытым исходным кодом, написанная на Node.js и React в 2015 году. Ее представили как улучшенную альтернативу WordPress. Система поддерживает схему базы данных в коде, при этом автоматически синхронизирует изменения с основной БД. Архитектура Strapi опирается на локальные файлы. Это решает проблему с конфиденциальностью и доступом к данным третьих лиц, т.к. устанавливается на сервер владельца.
Основные характеристики
- Полностью настраиваемое API: автоматически генерирует RESTful API и GraphQL endpoints;
- Система плагинов: легкое расширение функциональности через плагины;
- Удобная административная панель: интуитивный интерфейс с возможностью кастомизации;
- Поддержка различных баз данных: MySQL, SQLite, PostgreSQL;
- Встроенная аутентификация и авторизация: детальный контроль доступа через RBAC, продвинутая система ролей и разрешений;
- Локальное размещение: полный контроль над данными и инфраструктурой.
Пример использования Strapi
Этот код демонстрирует, как легко система автоматически генерирует api для CRUD операций над коллекциями. Расширить базовую логику можно через strapi.entityService.
Directus
Directus — позиционируется как открытая платформа данных, предоставляющая API и интуитивно понятный интерфейс администратора для работы с базами данных SQL. Система хранит большинство компонентов в БД, за исключением пользовательских плагинов. Административный интерфейс построен на Vue.js.
Основные характеристики Directus
- Агностицизм к базам данных: работает с любой SQL базой данных;
- Автоматическая генерация API: REST и GraphQL API создаются на лету;
- Настраиваемый интерфейс администратора: возможность кастомизации под нужды проекта;
- Расширяемость: система хуков и расширений для добавления функциональности;
- Локализация: встроенная поддержка мультиязычности.
Пример использования Directus
Пример показывает, как создать новую запись в Directus с помощью JavaScript SDK.
Обработка схемы базы данных
В Strapi обработка схемы базы данных происходит в коде, а в Directus непосредственно в БД.
Миграция с существующей системы
Directus позволяет быстро начать работу с существующей базой данных: достаточно указать параметры подключения, и система готова к использованию. Однако такая простота может обернуться проблемами при дальнейшем развитии проекта.
Strapi требует предварительного моделирования схемы через schema.json, что хотя и занимает больше времени изначально, но обеспечивает:
- Четкую документацию структуры данных;
- Контроль над миграцией данных;
- Предсказуемое поведение системы.
Зависимость от вендора платформы
Directus работает напрямую с базой данных, что создает иллюзию меньшей зависимости. Можно просто перестать использовать платформу и данные останутся такими как были. В случае со Strapi для этого скорее всего потребуется написание скриптов миграции данных.
Совместимость с другими системами
Directus может работать с отдельными таблицами в большой БД, что кажется преимуществом. Однако это может привести к проблемам с целостностью данных и усложнить поддержку. Strapi в этом вопросе менее гибок, поскольку контролирует схему базы данных.
Внесение изменений в схему в разных средах
Обе системы позволяют переносить изменения между средами разработки, но с разным подходом. В Directus перенос изменений схемы из одной среды в другую потребует выполнения дополнительных шагов. С подходом Strapi перенос изменений схемы например из тестового окружения в продакшн просто требует запуска обновленного кода в целевой среде.
Загрузка файлов
Обе CMS предоставляют возможность для загрузки в различные места назначения (локальный путь, бакет, S3 и т.д.). Однако есть некоторые различия, которые могут иметь значение для некоторых реализаций:
- Страпи позволяет писать собственные пользовательские провайдеры для загрузки файлов (код будет фактически загружать файлы). В результате, если служба хранения по нашему выбору не поддерживается Strapi из коробки, мы можем просто написать наш пользовательский провайдер, чтобы заставить его работать. Directus сейчас уже работает в том же направлении, но функция не была приоритетной более года;
- Обе системы позволяют нам организовывать наши медиа-загрузки в папки. Strapi предоставляет детальный контроль доступа через свою функцию RBAC (контроль доступа на основе ролей), которая работает для медиа-загрузок. Directus также позволяет ограничивать загрузки для определенных таблиц, помещая их в папки медиа-галереи.
Контроль доступа для функций администратора
Со Strapi пользователи интерфейса администратора поддерживаются отдельно от пользователей API CMS. Это дает возможность нам организовать пользователей в различные роли и настроить контроль доступа к конкретным экранам пользовательского интерфейса администратора, коллекциям, плагинам, отдельным строкам данных внутри коллекций.
Фактически, контроль доступа на основе ролей Strapi можно настроить на основе определенных пользовательских правил. Это нужно для ограничения доступа пользователей интерфейса администратора к определенным данным. Например, мы можем создать правила, чтобы определенные пользователи интерфейса администратора не могли просматривать строки данных в таблице зарплат для других сотрудников.
С Directus единственный доступный контроль доступа для функциональности пользовательского интерфейса администратора — это либо разрешить, либо запретить пользователю доступ к нему полностью. Например: Strapi позволяет нам создавать пользователей-администраторов, которые имеют доступ ко всей настройке административной панели, при этом ограничить доступ к медиа-библиотеке или конкретным плагинам и контент-типам, а также можем ограничить права на создание, редактирование и удаление контента.
Настройка поведения CRUD API
Обе CMS предоставляют хуки для написания пользовательского кода, который выполняется при вызове CRUD API для нашего контента. Таким образом, с обоими можно реализовать такие настройки, как:
- Модификация запросов / ответов API по мере необходимости;
- Создание пользовательских проверок ввода;
- Отправка электронного письма кому-либо, когда определенная запись имеет заданное значение.
Однако есть важное расхождение между ними:
- Strapi предоставляет глобальный объект везде, который можно использовать для доступа к любым данным;
- С Directus нам нужно вызывать API для доступа к любым данным.
В некоторых ситуациях подход Directus может быть менее гибким и заставлять нас предоставлять определенные данные через API для реализации конкретных настроек. Хотя мы можем обеспечить безопасность таких API за счет аутентификации, это все же менее безопасно, чем подход Strapi, который избавляет от необходимости предоставлять API для доступа к данным для реализации хуков или других настроек.
Расширение функциональности CMS
Обе headless CMS позволяют нам создавать:
- Пользовательские поля;
- Пользовательские экраны интерфейса администратора;
- Пользовательские конечные точки API.
С помощью перечисленного мы можем расширить функциональность CMS по желанию. Однако UI-фреймворки, используемые обеими CMS, различаются. Directus требует от нас написания кода пользовательского интерфейса администратора с использованием vue.js, тогда как Strapi с использованием react.js.
Документация
Обе CMS имеют обширную документацию. У Strapi два вида документации для — для контент-менеджеров и для разработчиков. Также есть документация для разных версий и выпусков программного обеспечения, каждая с соответствующими руководствами по миграции.
У Directus общее руководство «Начало работы» для быстрой настройки, которое помогает понять основные концепции и более продвинутые функции.
Популярность
Показатель | Directus | Strapi |
---|---|---|
Еженедельные загрузки | ~59 тыс. | ~116 тыс. |
Github | 27,7 тыс. звезд | 63,5 тыс. звезд |
Форки | 3,9 тыс. | 8 тыс. |
Привлеченные инвестиции | $8 млн | $45 млн |
Доля рынка CMS | 0.06% | 4.95% |
Год основания | 2004 | 2016 |
Из таблицы видно, что по популярности Strapi с большим отрывом обгоняет Directus по всем показателям, несмотря на то, что последний старше на 12 лет. Дело в том, что все эти годы платформа не могла предложить те преимущества, которые были у конкурента вплоть до выхода 9 версии в 2021 году.
Что же такого привнесла 9 версия Directus в 2021 году? Тогда как создатели лидирующей платформы сразу сделали ставку на моностек и выбрали Node.js, Directus очень долго развивался на Zend, устаревшем и больше не поддерживаемом PHP фреймворке. Переход на Node.js был вынужденным, а не спланированным. Ему предшествовала неудачная попытка переписывания кодовой базы на Laravel. Поэтому совершенно справедливо считать, что именно Strapi заслужено первым предложил все ключевые преимущества такого подхода, а конкурентная платформа потеряла 12 лет в этой гонке.
Strapi vs Directus: краткий обзор
Directus | Strapi |
---|---|
Бесплатный селф-хост и платное облако | Бесплатный селф-хост и платное облако |
Бесплатное, но лимиты Pro-подписки подходят скорее для малого бизнеса. Коробочная лицензия (для своего сервера) запрашивается индивидуально | Бесплатная версия без ограничений. Оплата может потребоваться за корпоративную редакцию, которая предполагает приоритетную техподдержку |
Для расширения функциональности необходимы знания Vue.js, Node.js, Typescript | Для расширения функциональности необходимы знания React.js, Node.js, Typescript |
Чтобы настроить связь с имеющимися CMS-системами, нужны профильные знания, а нестандартные запросы будет настроить еще сложнее | Легко подключить статичные интерфейсы. В том числе созданные с помощью популярных фреймворков и конструкторов (список интеграций впечатляет) |
Нет возможности гибкой настройки контроля доступами. Полностью либо запрещает, либо разрешает доступ к интерфейсу администратора | Позволяет настроить контроль доступа к конкретным экранам пользовательского интерфейса администратора и даже строкам таблицы |
Когда выбрать Strapi
- Вам нужна гибкая система с широкими возможностями кастомизации: Strapi предоставляет больше свободы в настройке как backend, так и административной панели;
- Ваш проект построен на Node.js: CMS отлично интегрируется с Node.js экосистемой;
- Вам важна производительность: благодаря оптимизациям на уровне Node.js, система может обеспечить высокую производительность;
- Вы планируете создавать сложные структуры данных: система типов контента в данной CMS очень гибкая и позволяет создавать сложные взаимосвязи;
- Вам нужна система с активным сообществом: большое сообщество означает больше ресурсов, плагинов и поддержки.
Когда выбрать Directus
- У вас уже есть существующая SQL база данных: Directus может работать с любой SQL БД без необходимости миграции;
- Вам нужна встроенная поддержка локализации: CMS предоставляет встроенные инструменты для управления многоязычным контентом;
- Вам важно управление версиями контента: система предоставляет встроенные инструменты для отслеживания изменений и откатов.
Заключение
Обе системы — это мощные инструменты для создания современных веб-приложений. Strapi подходит для проектов с высокой нагрузкой и требованиями к масштабируемости производительности. Directus оптимален для многоязычных проектов, работающих с существующими базами данных.
Выбор в пользу той или иной CMS зависит от требований вашего проекта. Поэтому сначала необходимо провести аналитику, выявить требуемые функции, какие типы данных используется, есть ли ограничения. У команды Work Solutions большой опыт работы с headless CMS. Описание реальных кейсов можно посмотреть, например, здесь и здесь. Оставляйте заявку на сайте, и мы поможет вам с выбором оптимального технологического стека для вашего продукта.