Size: a a a

GraphQL — русскоговорящее сообщество

2021 May 20

EV

Eugene Visotskiy in GraphQL — русскоговорящее сообщество
Кто понимает мёрж политику аполло?
Есть 2 запроса:
query GetMenuCategoriesQuery($menuId: ID!) {
   menu(id: $menuId) {
     categories {
       ...CategoryEssentialData
     }
   }
 }

и
query GetCategoryQuery($categoryId: ID!) {
   category(id: $categoryId) {
     ...CategoryEssentialData
   }
 }

как мне данные из 2-го запроса записывать в кэш 1-го? Чтоб если я взял readQuery 1-го запроса - то там уже были данные, полученные из 2-го запроса?
источник

el

eden lane in GraphQL — русскоговорящее сообщество
спасибо за направление, буду изучать
источник

el

eden lane in GraphQL — русскоговорящее сообщество
кажется, это немного не то
источник

AD

Alex Derbenev in GraphQL — русскоговорящее сообщество
А, я понял. Речь про один запрос с фронтенда к бэкенду вместо N?
В одном запросе можно в теле подряд написать несколько квери, все будет работать, и в data параметре результата можно будет увидеть результаты всех запросов
источник

el

eden lane in GraphQL — русскоговорящее сообщество
да, именно.
проблема в том, что у нас есть один query:
getUsers()
getPosts()


и вот этот один query работает, но, если тебе нужно загрузить все посты для конкретного юзера, то тебе нужна лишь часть из этого запроса - getPosts(). А если вызывать этот квери, то он и пользователей запросит и посты
источник

AD

Alex Derbenev in GraphQL — русскоговорящее сообщество
Так это два разные запросы с разной семантикой. Даже если они повторяют содержимое друг друга, не значит, что они обязательно должны быть в одном месте описаны
источник

el

eden lane in GraphQL — русскоговорящее сообщество
вот, я хотел спросить, используется ли практика объединять в одном месте несколько query? или из-за этой проблемы (описанной выше) так не делают?
источник

AD

Alex Derbenev in GraphQL — русскоговорящее сообщество
И как-то странно выглядит отдельный getPosts квери. В типе пользователя должно быть поле posts в данном случае, на мой взгляд
источник

el

eden lane in GraphQL — русскоговорящее сообщество
да, это просто что в голову пришло, не самый удачный пример
источник

C

Calculon in GraphQL — русскоговорящее сообщество
dataloader-ы добавляют латенси :с
источник

C

Calculon in GraphQL — русскоговорящее сообщество
и это не единственный способ решения проблемы n+1
источник

V

Vladlen (Negezor) in GraphQL — русскоговорящее сообщество
Какие ещё варианты решения существуют?
источник

EV

Eugene Visotskiy in GraphQL — русскоговорящее сообщество
ещё есть директивы, типа @include(if: $someCondition), и ты можешь использовать её, чтоб в одном случае получались все данные, в другом - лишь часть

например:
```
getUsers() @include(if: $oneCondition)
getPosts() @include(if: $anotherCondition)
```
источник

AD

Alex Derbenev in GraphQL — русскоговорящее сообщество
ну это вроде как один из самых распространенных и легко применяемых способов
источник

el

eden lane in GraphQL — русскоговорящее сообщество
ооооооо, звучит как то что надо, спасибо
источник

VB

Vlad Boreyko in GraphQL — русскоговорящее сообщество
фрагменты разве не подходят?
источник

C

Calculon in GraphQL — русскоговорящее сообщество
батчинг запросов по полям (пример)
сборка SQL запроса посредством анализа запроса graphql (вроде такой подход использует hasura)
источник

C

Calculon in GraphQL — русскоговорящее сообщество
2 способ самый клевый, и наверняка есть ORMки поддерживающие такую интеграцию с graphql
Либо они появятся в ближайшем будущем
источник

AD

Alex Derbenev in GraphQL — русскоговорящее сообщество
Это прикольно, но у них ведь принцип работы разный, поэтому кажется не совсем корректным сравнивать их лоб-в-лоб
источник

AD

Alex Derbenev in GraphQL — русскоговорящее сообщество
Да, второй выглядит действительно наиболее интересно
источник