NooBiToo
@NooBiToo

Как правильно поступить при создании приложения в плане запросов?

Доброго времени суток.
практикуюсь в написании SPA, за основу взял CMS Strapi и накидал REST API, за одно решил глянуть на graphql (strapi дает из коробки)
возник вопрос, к примеру у меня есть 3 модели:
Articles - статьи;
Categories - категории статьи;
Теги - что то типа хештегов, буду использовать как фильтр.
Так же я сделал следующее, в компоненте Navbar.vue я через запрос vue-apollo запрашиваю все пункты меню и вывожу, так же делаю с тегами, потом настает Articles, у меня есть баннер (компонент ArticlesBanner.vue), где выводятся свежие 8 записей, их я тоже получаю отдельным запросом, но так же на странице мне нужно выводить остальные записи, и так же у меня есть категории, где я должен выводить только записи которые содержат эту категорию.
Сам вопрос, правильно ли я поступаю делая запрос в каждом компоненте?
и должен ли я для вывода статей определенной категории делать запрос?
или же стоит получить все данные во vuex и от туда уже фильтровать по категориям и прочему?
Мне мой подход запроса кажется вполне уместным, так как в баннере я получаю не все статьи, а лишь первые 8 которые мне нужны
  • Вопрос задан
  • 665 просмотров
Решения вопроса 2
@Kitta
Если у вас уже есть на странице Vuex я бы посоветовал доверить ему работу с данными. Лучше чтобы компоненты занимающиеся отображением как можно меньше знали об инфраструктуре. В противном случае через какое-то время вы перестанете понимать откуда какие данные приходят и как их между собой согласовывать.

Но универсального решения конечно не существует и в некоторых случаях данные лучше получать не на уровне страницы (во Vuex или корневом компоненте), а непосредственно в каком-то отдельном компоненте. Например, если это просто независимый виджет на вашей странице или временный набор для выбора одного из значений (функция autocomplete).

Из данных изначально затягивать стоит необходимый для работы приложения минимум. Данные, которые в значительно количестве случаев никому могут и не понадобиться, лучше не тянуть.
Ответ написан
Комментировать
delphinpro
@delphinpro
frontend developer
Один ресурс — один запрос. Я тут уже недавно писал кому-то, что не должно быть у вас эндпойнтов типа
/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, и в том, если надумаете прикручивать серверный рендер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Vuex пусть думает, а компоненты только отображают. Ну и да получать больше данных чем нужно так себе идея. Максимум что можно сделать это префетч.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы