Наконец-то это здесь. С 30 ноября 2021 года общедоступна версия V4 популярной безголовой CMS Strapi.

История

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

В настоящее время мы переносим наш производственный API версии 3 на только что инициализированный экземпляр версии 4. Это означает: перенесите и перепишите существующую бизнес-логику, которая больше не применима из-за изменений внутреннего API.

Новый уровень базы данных

Переработанный уровень базы данных должен стать одной из моих любимых функций новой версии. Почему это так? Позвольте мне показать вам пример, запросив список риторических пользователей с «-» или «_» в их именах пользователей:

Я заметил довольно сильное улучшение производительности при записи и чтении данных с обновлением уровня базы данных.

Удивительно, верно? Структура запросов очень удобочитаема, она почти напоминает мне синтаксис, который использует GraphQL. Это еще не все! Новый уровень базы данных разделен на два разных API. В документах страпи указаны следующие различия между ними:

API механизма запросов

Strapi предоставляет API Query Engine для взаимодействия со слоем базы данных на более низком уровне. В основном его следует использовать разработчикам плагинов и разработчикам, добавляющим пользовательскую бизнес-логику в свои приложения. API Query Engine Strapi предоставляет неограниченный внутренний доступ к уровню базы данных и не знает о сложных структурах данных, таких как компоненты и динамические зоны.

API службы сущностей

Strapi предоставляет Entity Service API, построенный поверх API Query Engine. Служба сущностей — это уровень, который обрабатывает сложные структуры данных Strapi, такие как компоненты и динамические зоны, и использует под капотом API Query Engine для выполнения запросов к базе данных.

Детально контролируйте, как заполняются отношения

Как упоминалось выше, уровень базы данных был полностью переработан. Теперь у вас также есть возможность контролировать, как ваши данные заполняются при запросе из базы данных, и по умолчанию отношения не заполняются.

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

Пример контролируемой реляционной популяции

Давайте возьмем предыдущий пример и представим, что у каждого пользователя есть так называемый «профиль», который содержит его имя и фамилию в компоненте «имя». Модель хотела бы что-то вроде этого:

Теперь давайте преобразуем наш предыдущий пример, чтобы он соответствовал возвращенной модели, не так ли?

И вуаля! Вот так просто мы заполнили не только отношение, но и компонент внутри отношения.

Единый формат ответа

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

Давайте посмотрим, как может выглядеть такой ответ, и разберем его на разные части:

Объект данных

Сами данные ответа, которые могут быть одной записью, в виде объекта со следующими ключами, списка записей в виде массива объектов или пользовательского ответа:

  • id (число)
  • attributes (объект)
  • meta (объект)

Мета-объект

Информация о нумерации страниц, состоянии публикации, доступных локалях и т. д.

Объект ошибки

Информация о любой ошибке, выброшенной запросом.

И раз уж мы говорим об ошибках…

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

Вы можете проверить доступные коды ошибок HTTP здесь. Единственная разница, здесь мы используем camelCase вместо PascalCase для описания названия ошибки. Не знаю, как вам, а мне лично нравится эта интеграция! Кажется, я никак не могу вспомнить какой-либо другой код состояния HTTP, кроме 200. *Винки-фейс*.

Краткое содержание

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

Производство V4 готово?

На самом деле зависит от вашего варианта использования, с точки зрения стабильности я бы сказал «да». Но не цитируйте меня по этому поводу.