Как правильно поступить при создании приложения в плане запросов?
Доброго времени суток.
практикуюсь в написании SPA, за основу взял CMS Strapi и накидал REST API, за одно решил глянуть на graphql (strapi дает из коробки)
возник вопрос, к примеру у меня есть 3 модели:
Articles - статьи;
Categories - категории статьи;
Теги - что то типа хештегов, буду использовать как фильтр.
Так же я сделал следующее, в компоненте Navbar.vue я через запрос vue-apollo запрашиваю все пункты меню и вывожу, так же делаю с тегами, потом настает Articles, у меня есть баннер (компонент ArticlesBanner.vue), где выводятся свежие 8 записей, их я тоже получаю отдельным запросом, но так же на странице мне нужно выводить остальные записи, и так же у меня есть категории, где я должен выводить только записи которые содержат эту категорию.
Сам вопрос, правильно ли я поступаю делая запрос в каждом компоненте?
и должен ли я для вывода статей определенной категории делать запрос?
или же стоит получить все данные во vuex и от туда уже фильтровать по категориям и прочему?
Мне мой подход запроса кажется вполне уместным, так как в баннере я получаю не все статьи, а лишь первые 8 которые мне нужны
Если у вас уже есть на странице Vuex я бы посоветовал доверить ему работу с данными. Лучше чтобы компоненты занимающиеся отображением как можно меньше знали об инфраструктуре. В противном случае через какое-то время вы перестанете понимать откуда какие данные приходят и как их между собой согласовывать.
Но универсального решения конечно не существует и в некоторых случаях данные лучше получать не на уровне страницы (во Vuex или корневом компоненте), а непосредственно в каком-то отдельном компоненте. Например, если это просто независимый виджет на вашей странице или временный набор для выбора одного из значений (функция autocomplete).
Из данных изначально затягивать стоит необходимый для работы приложения минимум. Данные, которые в значительно количестве случаев никому могут и не понадобиться, лучше не тянуть.
Один ресурс — один запрос. Я тут уже недавно писал кому-то, что не должно быть у вас эндпойнтов типа /api/please-give-me-all-data-for-homepage
Статьи вы можете получать с эндпойта articles
GET /api/articles/
Можете использовать параметры
GET /api/articles/?page=2
Можете с помощью параметров добавить к общему списку популярные
GET /api/articles/?page=2&with=popular
Можно даже сделать возможность получения статьи с ее комментами (две связанные сущности одним запросом)
GET /api/articles/123/?comments=true
Но не следует получать одним запросом и меню, и статьи, и еще черт знает что там может быть на странице.
В плане использования стора, да — это будет определенно удобнее. И в том случае, если будете использовать подобные возможности /api/articles/123/?comments=true, и в том, если надумаете прикручивать серверный рендер.