Как эффективно работать с Strapi?

Как можно эффективно интегрировать фронт-энд с CMS Strapi и упростить работу с запросами и получением данных?
  • 4 ноября 2023 г. 19:19
Ответы на вопрос 2
Для эффективной работы с Strapi и интеграции с фронт-эндом рекомендуется следующие подходы:

1. Используйте GraphQL: Strapi поддерживает как REST API, так и GraphQL API. GraphQL позволяет вам выбирать только необходимые поля и связи для запросов, что упрощает получение и модификацию данных. GraphQL также облегчает работу с реляционными данными и позволяет избежать проблемы "запроса на запрос".

2. Используйте GraphQL Code Generator: Для генерации типов и запросов на клиентской стороне можно использовать инструменты, такие как GraphQL Code Generator. Он позволяет автоматически сгенерировать типы и хуки запросов на основе схемы GraphQL, что упрощает работу с данными.

3. Используйте библиотеку Apollo Client: Если вы используете GraphQL, то рекомендуется воспользоваться библиотекой Apollo Client. Она предоставляет мощные инструменты для работы с GraphQL API, включая кэширование, управление состоянием и интеграцию с фреймворками, такими как React.

4. Используйте компоненты-обертки: Если вы работаете с React, можно создать компоненты-обертки, которые обращаются к Strapi API и предоставляют удобные методы для получения данных или выполнения запросов. Это позволит абстрагироваться от деталей работы с API и сделает ваш код более модульным.

5. Используйте запросы на стороне сервера: Если ваш фронт-энд и Strapi развернуты на одном сервере, то вы можете выполнять запросы напрямую с серверной стороны. Это позволит уменьшить задержку и улучшит производительность.

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

7. Оптимизируйте запросы: Если у вас есть множество запросов на получение данных, рассмотрите возможность объединения запросов или использования batch-запросов, чтобы уменьшить задержку и количество запросов к серверу.

Это не полный список рекомендаций, но следуя этим подходам, вы сможете эффективно работать с Strapi и упростить интеграцию фронт-энда с CMS.
У меня есть пет-проект Exact, который может быть полезен для вас. Он представляет собой безголовую CMS и может быть использован для вашей ситуации. Идея заключается в том, чтобы запустить его в докер контейнере или просто через uvicorn exact:app. Затем вы можете добавлять JSON файлы с данными в его каталог и получать доступ к этим данным с фронтенда через fetch запросы. 

Вы можете посмотреть демо-сайт по этому проекту на https://shinhub.ru/, который обращается к exact серверу на https://exact.www-security.com. Данный сайт имеет оценку 100/100/100/100 от Google PageSpeed. 

Вот примеры запросов из консоли с использованием httpie:

1. Удобный вариант с использованием фильтра:
http POST https://exact.www-security.com/ds/tires filter[width]=235 filter[price__lt]=8000

2. "Низкоуровневый" вариант с использованием выражений:
http POST https://exact.www-security.com/ds/tires expr='width==235 and price<8000'

Это даст вам ответ в формате JSON с информацией о шинах, у которых цена меньше 8000 и ширина равна 235. Поиск с помощью evalidate очень быстрый, вы можете посмотреть цифры на GitHub.

Примеры с использованием javascript fetch можно найти на работающем сайте по адресу https://shinhub.ru/js/exact.js, где вы можете увидеть, что сам поиск (exact_search) занимает всего 20 строк кода.

Важно отметить, что exact работает только с публичными данными. Вы можете просто загрузить данные в формате JSON, вам не нужно парсить сайты и извлекать данные из HTTP. Если у вас есть какие-либо вопросы, я с удовольствием помогу. Проект имеет лицензию на свободное использование, так что вы можете форкнуть его и настроить под свои нужды. Если вам кажется, что проект не подходит в каких-то аспектах, дайте знать, и мы можем обсудить, какие функции можно добавить или как можно получить желаемый результат.
Похожие вопросы