
Strapi или Headless Wordpress?
CMS (системы управления контентом) используют для во многих приложениях: от личного блога и лендингов до E-commerce и B2B решений. Согласно опросу Jamstack Community, WordPress используется в качестве headless CMS на 21% веб-сайтов. Strapi используют 17%. Все же Strapi или WordPress: что и когда использовать?
Согласно опросу Jamstack Community, в пятерку самых популярных CMS входят WordPress, Contentful, Strapi и Drupal.
Вкратце
Если у вас нет предварительного технического опыта (и не хочется разбираться, почему "2" + "2" = "22"
), используйте WordPress. В нем уже есть панель администратора и фронтенд (веб-сайт) для ваших пользователей. Очень легко загрузить тему или добавить дополнительные функции с помощью готовых плагинов (такие как карусель или конструктор форм). Вишенкой на торте будет то, что существует множество хостинг-провайдеров, которые установят и настроят сервер для WordPress.
Также можно использовать WordPress как headless, обращаясь только к API для создания своего фронтенда.
Strapi, будучи headless CMS, дает полный контроль над тем, как выглядит сайт. Она работает на идее "Collection type". "Collection type" как форма: имеет набор полей для заполнения и содержимое, которое заполняет эти поля. Для полей можно установить ограничения, как "текстовое поле не может быть длиннее 500 символов" или "поле обязательно" и т. д. Поля также могут содержать отношения "один к одному" или "один ко многим".
Strapi поддерживает плагины на сервере, такие как ezforms. Они позволяют расширять API Strapi, но не имеют элементов пользовательского интерфейса для посетителей.
Имея это в виду, Strapi можно использовать как готовый бэкенд больше, чем для блога: например, для интернет-магазина или сайта объявлений.
Сравнение API
В этой статье мы сравним только API для получения контента, поскольку управление пользователями иногда осуществляется с помощью сторонних сервисов.
У WordPress есть JS клиент для взаимодействия с API.
Он должен быть активирован на стороне сервера:
wp_enqueue_script('wp-api');
Затем его можно использовать на клиенте. Клиент придерживается шаблону объектной модели, в котором нужно сначала создать пустой объект, а затем заполнить его данными:
// создаем новый пост
var post = new wp.api.models.Post({ id: 1 });
// получаем данные для поста с id = 1
post.fetch();
Также можно получить данные, относящиеся к объекту:
// Получить коллекцию категорий поста (вернет promise)
// Использует _embedded данные, если возможно, в таком случае promise завершится сразу.
post.getCategories().done(function (postCategories) {
// ... что-нибудь сделать с категориями.
console.log(postCategories[0].name);
});
REST API Strapi предоставляет контент через API.
Есть пакеты для JavaScript/Typescript для взаимодействия с API Strapi, например @iamsamwen/strapi-api. Этот пакет предоставляет "обертку класса для вызовов API-интерфейса для упрощения кода управления данными и мультимедиа файлами".
Это оставляет разработчику выбор какие шаблоны проектирования и структуру проекта использовать.
API Strapi позволяет запрашивать любой тип коллекции:
// GET http://localhost:1337/api/restaurants
{
"data": {
"id": 1,
"attributes": {
"title": "Пироги у Прокофьи",
"description": "Пироги из говядины и креветок"
},
"meta": {
"availableLocales": []
}
},
"meta": {}
}
По умолчанию Strapi не заполняет относящиеся объекты и приложенные файлы. Но, в отличие от WordPress, их можно получить за один вызов. Параметр populate=*
позволяет заполнить все отношения объекта и приложения
// GET http://localhost:1337/api/restaurants?populate=%2A
{
"data": {
"id": 1,
"attributes": {
"title": "Пироги у Прокофьи",
"description": "Пироги из говядины и креветок",
// headerImage не было в ответе без параметра "populate"
"headerImage": {
"data": {
"id": 1,
"attributes": {
"name": "17520.jpg",
"alternativeText": "Здание \"Пироги у Прокофьи\"",
"formats": {
// ...
}
// ...
}
}
}
},
"meta": {
"availableLocales": []
}
},
"meta": {}
}
Также можно заполнить только определенные параметры, уменьшив размер ответа API.
Примечание: и WordPress, и Strapi API поддерживают GraphQL, но ни один из них не поддерживает его "из коробки", и в этой статье он не рассматривается. GraphQL + WordPress, GraphQL + Strapi
Управление пользователями (раздела admin)
Управление пользователями администрации сайта важно, если вы не единственный, кто ведет блог.
WordPress поддерживает 5 ролей пользователей: Administrator, Editor, Author, Contributor, и Subscriber.
Administrator имеет доступ ко всем функциям администрирования на сайте.
Editor может публиковать и управлять постами, включая посты других пользователей.
Author может публиковать и управлять только своими постами.
Contributor может писать и управлять свои посты, но не может их публиковать.
Subscriber это тот, кто может управлять только своим профилем. Эту роль можно использовать для веб-сайтов с подписками.
Существующие роли можно изменить, а дополнительные можно добавить только с помощью плагинов WordPress.
В бесплатной версии Strapi есть только 3 роли: Author, Editor и Super Admin. Поскольку Strapi использует Collection type, доступ на основе ролей можно настроить для каждого из полей коллекции. В бесплатной версия Strapi также можно указать, какие переводы может редактировать пользователь.
В платной версии Strapi можно добавить дополнительные роли администраторов, настроить доступ к полям для создания, чтения, обновления, удаления и указать условия доступа, такие как "только пользователь, создавший этот объект, может изменять его поля".
