Size: a a a

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

2020 July 24

S

Steve in GraphQL — русскоговорящее сообщество
Alexander Podkidyshev
Ну и самый простой - вызвать первую асинхронную в useEffect(), записать в стейт, а useQuery() скипнуть, если в стейте ничего нет
Переделал вот так и с useQuery, спасибо. Так лучше)
источник

AP

Alexander Podkidyshe... in GraphQL — русскоговорящее сообщество
Хорошо (-:
источник
2020 July 25

A

Albert in GraphQL — русскоговорящее сообщество
всем привет! Кто-нибудь использует Union типы для кастомных результатов вместо выбрасывания исключений?
источник

A

Albert in GraphQL — русскоговорящее сообщество
я сначала вообще всё заменил на union-ы и перестал выкидывать ошибки, но это вроде как не комильфо. Знаю что следует распределять на бизнес ошибки, тогда возвращать union результат, а с ошибками сервера уже бросать исключения. Но есть пограничные случаи. Например при валидации сложности пароля, правильности емэйла - ошибки валидации это ошибка бизнеса или сервера?
источник

A

Albert in GraphQL — русскоговорящее сообщество
Есть такая задачка. Функция регистрации возвращает либо true, либо объект с массивом ошибок. Я сделал union тип Boolean | CustomErrorsResult, но прикол в том, что у Boolean нету typename, и вообще мы не можем использовать скалярные типы в Unions. Получается нужно или наш boolean завернуть в BooleanResult и сделать объектом, но это уже оверкилл, либо возвращать только CustomErrorsResult, причем изменить его на CustomResult, в котором кроме поля errors[] будет поле ok: boolean.
источник

A

Albert in GraphQL — русскоговорящее сообщество
Или оно того не стоит вообще? отказаться от unions и просто бросать исключения везде и всюду, даже на бизнес ошибки?
источник

A

Albert in GraphQL — русскоговорящее сообщество
@nodkz дядь Паш, есть мысли?
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Можно просто оставить errors: [CustomError!]!. Если фронту удобно ещё ok: Boolean! иметь, то вычислять его как пустой ли массив errors.
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Albert
Есть такая задачка. Функция регистрации возвращает либо true, либо объект с массивом ошибок. Я сделал union тип Boolean | CustomErrorsResult, но прикол в том, что у Boolean нету typename, и вообще мы не можем использовать скалярные типы в Unions. Получается нужно или наш boolean завернуть в BooleanResult и сделать объектом, но это уже оверкилл, либо возвращать только CustomErrorsResult, причем изменить его на CustomResult, в котором кроме поля errors[] будет поле ok: boolean.
Из своей практики - юнионами не очень удобно.

Возвращай RegisterPayload с полями
ok: Boolean!
errorMsg: String
errorCode: String или Enum

Плюс если не боишься 4го аргумента в резолвере. То если поля ошибки запросили в запросе, то ошибку возвращаешь в ResultPayload.

А если запросили только поле ok, то в резолвепе в случае ошибки выкидываешь исключение. Чтоб ошибка вывалилась на самом верхнем уровне в errors.

Т.е. если клиент просит вернуть ошибку в пейлоаде, он ее там получает. А если не просит, то на верхнем уровне. Получается, что клиент через запрос управляет тем, как вернуть ошибку.
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Из своей практики - юнионами не очень удобно.

Возвращай RegisterPayload с полями
ok: Boolean!
errorMsg: String
errorCode: String или Enum

Плюс если не боишься 4го аргумента в резолвере. То если поля ошибки запросили в запросе, то ошибку возвращаешь в ResultPayload.

А если запросили только поле ok, то в резолвепе в случае ошибки выкидываешь исключение. Чтоб ошибка вывалилась на самом верхнем уровне в errors.

Т.е. если клиент просит вернуть ошибку в пейлоаде, он ее там получает. А если не просит, то на верхнем уровне. Получается, что клиент через запрос управляет тем, как вернуть ошибку.
errorMsg: String не удобно, если ошибки в нескольких полях.
источник

A

Albert in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Из своей практики - юнионами не очень удобно.

Возвращай RegisterPayload с полями
ok: Boolean!
errorMsg: String
errorCode: String или Enum

Плюс если не боишься 4го аргумента в резолвере. То если поля ошибки запросили в запросе, то ошибку возвращаешь в ResultPayload.

А если запросили только поле ok, то в резолвепе в случае ошибки выкидываешь исключение. Чтоб ошибка вывалилась на самом верхнем уровне в errors.

Т.е. если клиент просит вернуть ошибку в пейлоаде, он ее там получает. А если не просит, то на верхнем уровне. Получается, что клиент через запрос управляет тем, как вернуть ошибку.
🖤
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Возвращай массив. Тут нет универсального решения. Надо исходить из задачи и из удобства пользования.
источник

A

Albert in GraphQL — русскоговорящее сообщество
@nodkz подскажите ещё пожалуйста такую вещь. Apollo Client всегда хочет id, чтобы стор нормализовать. Мне эти объекты ошибок при инициализации приложения сразу создать с айдишниками? А то получается неудобно, что каждый раз одна и та же ошибка прилетает с новым ID. Начинают в хранилище копиться
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Id для чего-то кроме entity это мягко странно.
источник

A

Albert in GraphQL — русскоговорящее сообщество
Без id крэшится стор :(
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Нормализация нужна для обновления данных. Ошибки же никак не обноаляются.

Так сказать, каждый раз новые прилетают. Хоть и с одним и тем же текстом.
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Albert
Без id крэшится стор :(
Аполло3?
источник

A

Albert in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Аполло3?
Да-да
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Я бы подождал еще месяцок
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Это самый убогий баг у них сейчас
источник