Size: a a a

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

2019 November 22

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
фронты любят разделение мутаций, потому что удобно делать атомарные мутации – одно действие в интерфейсе соответствует одной мутации
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Короче, все объекты, что возвращаются с сервера имеют идентификатор, вида __typename + ID
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
так что вообще пофигу где они были получены, в следствии квери или мутаций
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
фронты любят разделение мутаций, потому что удобно делать атомарные мутации – одно действие в интерфейсе соответствует одной мутации
и как изменится их "любовь", если убрать кейворд "mutation" у запроса?)))
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Потому что сейчас получается просто невероятное количество копипасты кода, который переиспольузется и в мутациях, и в квери (+ в аргументах)
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
В реальной жизни подобное в CQRS только бывает, которое редко где действительно нужно
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
много вопросов:
1.  query и mutation по разному процессятся (query –  параллельно, mutation – строго сверху вниз)
2. какой синтаксис использовать для обновления вложенных данных?
3. как пометить поля, которые нельзя обновить в mutation?
4. я тут приводил пример со сложной мутацией “завершить оплату заказа”, когда мы меняем статус сущности “заказ”, создаем сущность “транзакция на счете” и заводим сущность “посылка на складе”, в твоей схеме клиент должен будет это все описать сам, так?
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Обычно в языках методы мутаций видно семантически
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Однако я приводил в пример руби
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
2. Так что получаем (если бы такое было возможно):

type User {
   name: String!
   email: Email
   rename!(name: String!): User
   changeEmail!(email: Email!): User
}
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Ну и плюс директивы, которые по неведомой причине сейчас не являются частью интроспекции
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Если отвечать на первый вопрос, то это всё ненужная хрень
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Это должно быть частью реализации, а не спеки
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
так, то есть у каждого поля есть поле-мутация, верно?
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
не обязательно
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
В программировании некоторые методы проектируются как read + write одновременно
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Например:
type User {
   name(newValue: String = null): String!
}
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
а вот такое как реализовать?
type User {
 name: String!
 rename!(name: String!): User
 orders: [Order]!
 writeOrders!(orders: [Order]!): User
}
источник

KN

Kirill Nesmeyanov in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
а вот такое как реализовать?
type User {
 name: String!
 rename!(name: String!): User
 orders: [Order]!
 writeOrders!(orders: [Order]!): User
}
А в чём проблема?
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
1. каждый раз пересылать список заказов и мучать сеть
2. на бэке сверять что там добавилось/изменилось/удалилось
3. если заказ новый – не надо ли какие-то еще сущности обновить
4. если клиент прислал что-то плохое (например статус заказа) – надо это заметить и ругнуться
источник