Size: a a a

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

2017 August 18

S

Sergey in GraphQL — русскоговорящее сообщество
Игорь Богомолов
Всем привет, пытаюсь реализовать у себя CRUD и столкнулся с проблемой - не могу найти толковых примеров с ним. Я хочу одним запросом выполнить сразу несколько действий.  Так как мутации выполняются последовательно, я попытался получить результат выполнения одной функции (id созданной записи) и использовать его в другой (для обновления этой записи). Но передать его я могу только через переменную, которая видна во всех резолверах. Как это обычно вообще делается?
https://gist.github.com/anonymous/07f37dfa44e50dc19331a10804512ab7
export default compose(
 graphql(query, configObject1),
 graphql(query2, configObject2)
)(Component)
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Sergey
export default compose(
 graphql(query, configObject1),
 graphql(query2, configObject2)
)(Component)
const configObject1 = {
 options: props => ({

 })
}
источник

S

Sergey in GraphQL — русскоговорящее сообщество
т.е.  сверху вниз будут запросы выполняться  и в нижних будут видны данные из верхних
источник

S

Sergey in GraphQL — русскоговорящее сообщество
в configObject можно обработать данные из выполненных запросов
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Вот рабочий пример, правда тут вместо верхнего запроса используется connect redux,  но смысл тот же самый, в данном случае из redux передается searchValue

const mapStateToProps = ({ navBar, auth }) => ({
 searchValue: navBar.searchValue,
 userId: auth.userId
})

const configObject = {
 options: ({ endCursor, searchValue = '', ...props }) => ({
   variables: {
     first: 16,
     after: endCursor || null,
     searchValue
   }
 }),
 force: true,
 props
}

export default compose(
 connect(mapStateToProps),
 graphql(ALL_POSTS, configObject)
)(PostsList)
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
Ну т.е. это предлагается уже не на серверной строне делать, а чисто в  js?
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
т.е. на сервере достаточно просто уметь обрабатывать мутации по одной?
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Игорь Богомолов
Ну т.е. это предлагается уже не на серверной строне делать, а чисто в  js?
Смотря что требуется, если между мутациями нужны данные с клиента, то на клиенте последовательно
источник

S

Sergey in GraphQL — русскоговорящее сообщество
А если данные клиента не нужны, тогда на сервере это можно реализовать выставив клиенту одну мутацию
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Игорь Богомолов
т.е. на сервере достаточно просто уметь обрабатывать мутации по одной?
На сервере можно сделать сколько угодно вариантов мутаций
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
Ну вот мой вопрос был в том, можно ли (нужно?) эту мутацию разбить на несколько? Просто у меня много операций, и мне нужно их в разном порядке выполнять, делать под каждый варианрт отдельную мутацию - плодить классы и функции
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
У меня много операций и я не могу получается сделать из них комбинацию любую, не слив их в одну мутацию
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
или правильный подход - всегда делать такую мутацию?
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Игорь Богомолов
У меня много операций и я не могу получается сделать из них комбинацию любую, не слив их в одну мутацию
Если независимые мутации то их вроде можно одновременное выполнять
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Или собираются добавить эту возможность
источник

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
Я хочу зависимые сделать
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Игорь Богомолов
Я хочу зависимые сделать
Значит придётся плодить варианты мутаций на сервере
источник

S

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

ИБ

Игорь Богомолов in GraphQL — русскоговорящее сообщество
Просто я могу легко результат первой мутации класть в контекст, и доставать его во второй. Тогда я смогу выполнять две мутации подряд без пинг-понга и 50+ мутаций на сервере. Но, как я понял, 1) так не делают 2) будут проблемы с возвратом ошибок (даже если 1 мутация выдаст ошибку, вторая начнет выполняться зачем-то)
источник

S

Sergey in GraphQL — русскоговорящее сообщество
Игорь Богомолов
Просто я могу легко результат первой мутации класть в контекст, и доставать его во второй. Тогда я смогу выполнять две мутации подряд без пинг-понга и 50+ мутаций на сервере. Но, как я понял, 1) так не делают 2) будут проблемы с возвратом ошибок (даже если 1 мутация выдаст ошибку, вторая начнет выполняться зачем-то)
может я не понимаю, но с клиента получится только сделать сначала одну мутацию, получить ответ, потом сделать следующую опять получтиь ответ и т.д. это и есть пинг понг
источник