🍂 Обзор безголовых CMS с открытым исходным кодом: Strapi, Directus и Payload

Рассмотрев дюжину безголовых систем управления контентом (headless CMS) для моего предстоящего блогфолио, я сузил выбор до Strapi v4, Directus v9 и Payload v1. В этой статье представлено сравнение между тремя безголовыми CMS, чтобы определить наиболее подходящее решение. Если вам интересно, почему я выбрал именно эти безголовые CMS, то в моей предыдущей статье «Как выбрать безголовую CMS для портфолио и блогов?» рассказывается о моем первоначальном исследовании.

Strapi, Directus и Payload, какая из безголовых CMS лучше? Чтобы принять окончательное решение, давайте проанализируем следующие аспекты этих решений.

  1. Настраиваемость
  2. Безопасность
  3. Опыт разработчиков

Настраиваемость

Помните, что все три CMS имеют открытый исходный код под разрешительной лицензией, поэтому вы можете самостоятельно изменять кодовую базу. Таким образом, возможности настройки технически безграничны. В случае с Payload, это CMS с конфигурацией как код, поэтому ее административный пользовательский интерфейс практически пуст из коробки. Учитывая это, давайте попробуем сравнить, что CMS поддерживает официально.

Доступные плагины

  • Победитель: Strapi

Сильной стороной Strapi является развитый рынок плагинов. Он доступен либо через интерфейс администратора, либо через веб-сайт market.strapi.io. Если вам нужна дополнительная функция, есть большая вероятность, что она уже доступна в виде плагина. При этом отсутствует функция установки одним кликом, установка осуществляется только через npm.

  • Рисунок: Directus и Payload

Несмотря на то, что и Directus, и Payload поддерживают плагины/расширения в своей модульной архитектуре, ни у одного из них нет рынка. Что касается Directus, то рынок расширений есть, но он все еще находится в стадии разработки. Вы можете ознакомиться с ним по адресу directus.market.

Между тем, торговая площадка Payload, вероятно, не будет доступна в ближайшее время, но она находится в дорожной карте.

Мы будем поддерживать список официальных и общественных плагинов Payload на нашем сайте в ближайшее время.

  • Из документации по плагинам Payload

База данных

  • Победитель: Directus

Directus поддерживает несколько различных вариантов SQL: PostgreSQL, MySQL, SQLite, OracleDB, CockroachDB, MariaDB и MS-SQL. Вы можете использовать Directus как обертку поверх существующей базы данных или использовать Directus для создания новой базы данных с нуля. В некотором смысле, Directus — это абстракция для вашей базы данных (как ORM, но с пользовательским интерфейсом), и безголовая CMS — лишь один из вариантов ее использования. Этот характер интроспекции базы данных дает вам чрезвычайную гибкость при миграции с помощью Directus, как внутри, так и снаружи.

  • Второе место: Strapi

В настоящее время Strapi v4 поддерживает SQLite, PostgreSQL, MySQL и MariaDB. Однако выполнять миграцию между базами данных и средами довольно сложно. По результатам моего исследования, это сводится к различным подходам между Strapi и Directus. Strapi придерживается «закрытого» подхода к контролю исходного кода (создание базы данных по собственному мнению, разработчики не имеют контроля), в то время как Directus — это платформа, ориентированная на базу данных. Если у вас есть опыт решения проблем миграции Strapi, пожалуйста, дайте мне знать в разделе комментариев ниже. Было бы здорово получить техническое объяснение того, почему миграция и резервное копирование всегда были недостатком Strapi.

  • Под вопросом: Payload

На данный момент Payload поддерживает только MongoDB. В зависимости от вашего сценария использования, это может быть плюсом или наоборот. Поскольку Payload — новый игрок на рынке, нет достаточного количества документов и тематических исследований, поэтому я не могу сделать вывод о его аспекте базы данных. Payload v1 (production-ready) был запущен 19 июля 2022 года.

Безопасность

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

Авторизация (контроль доступа)

  • Draw: Directus и Payload

И Directus, и Payload предлагают очень достойный контроль безопасности, по крайней мере, на один уровень выше Strapi, по моему мнению. Они имеют неограниченный гранулярный контроль доступа на основе ролей, вплоть до уровня полей базы данных. Разрешения настраиваются как для API, так и для доступа к функциям панели администратора.

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

В Directus, если у вас есть роль редактора, вы можете читать статью со статусом черновика (условие поля): if user.role == editor => read draft article.

В Payload каждая статья со статусом черновика (поле условие) доступна для чтения только пользователям с ролью редактора: if article.status == draft => allow editor role to read. Это то же разрешение, что и в примере Directus, только с другой точки зрения.

  • Второе место: Strapi

В отличие от двух других решений, Strapi имеет контроль доступа только на уровне API, поэтому он менее гранулярен. Это одно, но Strapi также блокирует добавление и изменение ролей в панели администратора за платной стеной. Когда такая важная функция CMS ограничена подобным образом, это, на мой взгляд, огромный минус.

Аутентификация

  • Winer: Payload

Payload поддерживает двухфакторную аутентификацию и широкий спектр стратегий, таких как OAuth 2 и LDAP, как для панели администратора, так и для внешнего приложения. Это возможно благодаря тому, что Payload использует passport.js под, очень популярную библиотеку аутентификации, которая поддерживает более 500 стратегий. Имейте в виду, что эта возможность появилась только в релизе Payload v1, и документации по ней было не так много, так что это недостаток, если вы собираетесь строить крупномасштабный проект.

  • Рисование: Directus и Strapi

Что касается аутентификации в админ-панели, Directus находится на одном уровне с Payload, но, очевидно, нет четкого способа реализовать публичную регистрацию пользователей. Между тем, Strapi не поддерживает двухфакторную аутентификацию или любые другие стратегии аутентификации панели администратора «из коробки». Единая регистрация в Strapi — это платная функция, доступная только в тарифном плане Gold. Однако Strapi предлагает аутентификацию на стороне пользователя с помощью множества различных поставщиков идентификационных данных. Например, если пользователь хочет зарегистрировать аккаунт в вашем магазине электронной коммерции, то процесс аутентификации будет выглядеть следующим образом.

  1. Пользователь регистрируется с помощью Google (или других провайдеров идентификации) в одностраничном приложении.
  2. Goole проверяет личность и возвращает маркер доступа одностраничному приложению.
  3. Одностраничное приложение делает запрос к Strapi API с маркером доступа Google в качестве полезной нагрузки.
  4. Strapi создает учетную запись конечного пользователя на основе предоставленной информации (предполагается, что вы предварительно настроили поставщика идентификационных данных в Strapi).
  5. Вы только что закончили регистрацию нового аккаунта конечного пользователя с помощью Google sign-in.

Тем не менее, Directus и Strapi прошли боевые испытания гораздо дольше, чем Payload. Будет разумно, если вы поставите Directus и Strapi выше Payload только по этому факту. В конце концов, безопасность всегда была важным аспектом разработки программного обеспечения, но в этот раз я доверюсь Payload.

Опыт разработчиков

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

Пользовательский интерфейс администратора

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

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

Payload, с другой стороны, является своего рода исключением. Вся природа этой CMS заключается в том, чтобы быть ориентированной на код, поэтому в некотором смысле она не очень удобна для новичков. Панель администратора Payload предназначена в основном для ввода контента (например, содержания статей блога), в то время как другие настройки, такие как разрешения, веб-крючки, определение полей и так далее, определяются в кодовой базе. Я полагаю, что вам либо нравится такой подход, либо нет, и нет ничего промежуточного.

Документация

Здесь не нужно много обсуждать. Strapi в настоящее время находится в 4-й версии, а Directus — в 9-й. Хотя некоторые утверждают, что у них обоих хуже документация по сравнению с их предыдущими версиями, оба проекта все еще зрелые, поэтому у них есть большое количество ресурсов сообщества. Между тем, Payload только несколько дней назад осуществил свой первый запуск, поэтому у него явный недостаток ресурсов и документации по сравнению с двумя другими решениями.

Ремонтопригодность (обновление, миграция, резервное копирование, развертывание)

Этот вопрос кратко обсуждается в разделе Настраиваемость/База данных. По результатам моего исследования, общее мнение таково, что Strapi имеет очень слабую поддержку ремонтопригодности. Почему это так? Я не знаю точно. Будет здорово, если вы поможете мне ответить на этот вопрос в разделе комментариев ниже. В отличие от него, Directus, похоже, легко поддерживать, поскольку он является лишь оберткой поверх базы данных SQL. Вы можете либо выполнять операции на уровне базы данных, либо использовать возможности Directus SDK для облегчения процесса сопровождения.

Тем не менее, и Strapi, и Directus — это решения без кода, и настройка всего через пользовательский интерфейс может потенциально создать проблемы с согласованностью в дальнейшем. В случае Payload конфигурации представлены в виде кода, поэтому все можно детально контролировать в конвейере CI/CD. Поскольку большинство настроек и схем фактически определены в кодовой базе, это также уменьшает проблемы, связанные с низкоуровневыми операциями в базе данных.

Хостинг

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

Payload отличается, это скорее плагин для вашего существующего приложения. Короче говоря, ваш Node.js теперь содержит и front-end, и Payload в качестве back-end. Тем не менее, если вы хотите полностью разделить проблемы, я полагаю, что их все еще можно разместить отдельно.

Заключение

Strapi, Directus и Payload, что из них подходит для создания моего блогфолио? После рассмотрения этих трех решений с точки зрения настраиваемости, безопасности и опыта разработчиков, Directus, по моему мнению, логически является победителем. Однако на этот раз я решил дать шанс Payload. В целом, Payload находится на одном уровне с Directus в плане функциональности, но его подход, основанный на коде, заставляет меня попробовать его. Будучи новичком на рынке и только недавно выпустив стабильный релиз, Payload потенциально может быть рискованным выбором, но это то, на что я готов пойти.

Эта статья — способ задокументировать мое исследование современного рынка безголовых CMS. Как новичку, мне еще многое предстоит узнать, поэтому я намеренно опускаю технические сравнения, такие как производительность, масштабируемость, крайние случаи и так далее. Если вы ищете решение для крупномасштабного проекта, надеюсь, эта статья даст вам хорошую отправную точку.


Эта статья была первоначально опубликована на Strapi vs Directus vs Payload, сравнение безголовых CMS.

Интересуетесь разработкой программного обеспечения и многим другим? Мои другие статьи могут быть вам полезны!

  • Расширенные действия GitHub — условный рабочий процесс ❓
  • Как выбрать лучшую безголовую CMS для вашего блогфолио?
  • Лучшая безопасность и конфиденциальность с помощью бесплатного программного обеспечения с открытым исходным кодом — заблуждение?

Найдите больше новостей для разработчиков на The Dev Report, и статьи о технологиях в моем блоге.

Кроме того, давайте общаться!

  • Twitter: @hunghvu_dev
  • LinkedIn @hunghvu
  • Hashnode: @hunghvu
  • Dev: @hunghvu
  • GitHub: @hunghvu
  • HackerNoon: @hungvu
  • Medium: @hunghvu_dev

Оцените статью
devanswers.ru
Добавить комментарий