Приветствую, Павел!
Во-первых, спасибо за видеолекции и статьи! Много нужного извлек оттуда.
И вроде разработка на графе идет нормально. Но вот обработка ошибок - это боль страшная.
И если введение union-типов для обозначения "проблем" решает одну часть боли. И на клиенте вроде удобно, и в документации отображается. Все хорошо.
Но вот другой момент, никак не дает покоя. А именно, ответы графа (ошибки), в случае несоответствия схемы присланной клиентом и той, что на сервере.
Например, отсутствие обязательного поля или неправильный тип данных поля. Это ж как бы одна из килер-фич графа. Проверять еще до резолверов присланные данные и реагировать. Но реакция странная)
Граф оформляет проблему в ошибке тупо в виде текстового описания. Например, забыли обязательное поле "name", получи - 'Field "login" argument "name" of type "String!" is required but not provided.'
И как тут на клиенте понимать, что произошло, на уровне логики, непонятно. Не парсить же этот текст)
И пока решение такое, убрал в схеме эти восклицательные знаки почти везде и проверяю обязательность полей на уровне резолверов, стандартными средствами валидации ларавеля. Оттуда уже прилетают нормальные ошибки валидации, которые более-менее научил клиент распознавать и решать что с ними делать. Но в этом случае пропадает эта фишка графа. И зачем тогда она нужна)
Может есть какие мысли на этот счет? Думаю не один я тут с такой заморочкой вожусь)
Все запросы на клиенте должны быть статичными и не составляться динамически. Если запросы статичные, то их можно проверять на этапе написания кода, всякими линтерами и компиляторами. Можно генерировать тайп-дефинишены для Тайпскрипта или Флоу (если клиент на JS). Т.е. то что у вас происходит, это “доведение греха до рантайма”. И часто это связано с тем что запросы составляются динамически на клиенте – в таком случае никаких тайпчеков не сделать. И надо мучиться с парсингом ошибок.