LINUX.ORG.RU

Формирование ответа на мутацию в graphql

 ,


0

2

Подскажите, как правильно задать ответ на мутацию в gql? Суть - есть некий объект User

type User {
  address: Address
  status: Status
  inventory: Inventory 
}

Все поля - комплексные типы, например в каждом есть поля x и y. Вложенность может быть уровней на 10-15, полей в жизни тоже не 3, а 33.

Есть мутация, которая изменяет например поля x и y из Address и поле x.x из Status.

type Mutation {
  updateAddress(...): ????
}

Как правильно написать тип ответа чтоб для фронтенда было очевидно что именно поменялось в объекте?

В плане я понимаю что можно просто вернуть объект и фронт может сам запросить что угодно, но запрашивать сразу 100500 полей чтоб понять что там поменялось им самим нафиг не надо. Хз, например указывать типом ответа интерфейс с нужным набором полей и потом указывать что User его имплементит? Или как-то вручную формировать ответ, но при этом на клиенте может влет сломаться кеш из-за несоответствия типов.

С интерфейсом вроде красиво, но плодить по интерфейсу на каждую мутацию и потом дружно пихать их в implements это как-то хз

В чатгпт пока не ходил, но в доке и best practices явного ответа не нашёл

Апд; потыкал чатгпт, он традиционно несёт чушь с передачей списка изменений в ответе прям текстовым полем, и на призывы что мутация блин меняет всегда один и тот же сабсет он не реагирует.

Пока самым логически корректным выглядит вариант с интерфейсами типа

Mutation updateAddress(...): UserWithAddressAndStatus

type User implements UserWithAddressAndStatus {
  ...
}

Из интерфейса сходу видно что именно поменялось, ну и понятен родитель. Но количество таких интерфейсов немного пугает. Да и перечислять в имени интерфейса изменения как-то больно

★★★★★

Последнее исправление: upcFrost (всего исправлений: 2)