@DeniSidorenko

Надо ли делать повторный запрос в базу если использую GraphQL?

Начал активно использовать GraphQL в новом проекте. Сделал весь функционал обращения к базе данных и теперь начал думать как более коректно его использовать.

Есть задача, рестораны и категории. Изначально выводяться все рестораны так как категория не выбрана. А при клике на категорию получая ID делается запрос к базе данных дабы получить рестораны что имеют категорию с таким ID.

Запрос на клиенте
const { loading, data = {} } = useQuery(RESTAURANTS, {
    variables: { category: "" }
  })


И на сервере
Restaurants: async (parent, args) => {
      const { category } = args
      if(category !== ''){
        return await Restaurant.find({ categories: category })
      } else{
        return await Restaurant.find()
      }
    },


Касаемо вопроса , почему сразу не получить все рестораны на клиенте и потом лишь фильтровать с помощью Реакта. На данный момент ресторанов мало и для тестов я получаю их сразу все на странице изначально. Но их будет больше и изначально мы получим не все сразу , а лимитированно 10 . Поэтому такой вариант отпадает

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

К примеру для данного кода мне надо менять ID категории, и тогда снова делеть обращения к базе
Т.е вызывать данный кусок кода с нужной переменной?
const { loading, data = {} } = useQuery(RESTAURANTS, {
    variables: { category: "" }
  })
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
Вытаскивать все рестораны оправдано если вы будете делать PWA и их будет не так много, а потом просто кидать запрос с датой последней синхронизации на поиск изменений. Однако если вы делаете публичное API, то лучше сразу реализовать поиск через аргументы в query, со временем к категориям добавятся сортировки и другие фильтры. Это придётся реализовывать на каждом клиенте отдельно.

Так скажем ваш GraphQL API сейчас работает только с вашей БД, а потом придётся делать скажем REST запросы на чужой API и вот уже вытаскивать все рестораны не так уже выгодно для сервера. Произвести всякие оптимизации будет сложно, так как мы не знаем какие данные нужны клиенту и каждый раз тащим мегабайты ради скажем ресторана с одной категорией, так как человек каждый раз заходит в инкогнито и никакого кэша там снова не будет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы