В нашем примере приложения у нас есть два запроса верхнего уровня
{
onlyCake(msg: "cake")
generateNumber
}
Если я запускаю этот код, он возвращает случайное число, а onlyCake
возвращает строку <3
. Однако, если я изменю ввод onlyCake
на что-то, что не является строкой cake
, я получу ошибку. Это ожидается, потому что поле onlyCake
имеет директиву для реализации этого поведения.
https://github.com/ExpediaDotCom/graphql-kotlin/blob/2961b64d6e4cceb4034aec198d667e5f965decd2/example/src/main/kotlin/com/expedia/graphql/sample/directives/CakeOnlyDirectiveWiring.kt#L18-L19
Вопрос в том, что если я захочу вернуть данные еще для generateNumber
, могу ли я это сделать, и в ответе есть и errors
, и data
?
Ответ возможен, но не с текущей схемой. Проблема заключается в том, что наша схема для onlyCake
и generateNumber
являются необнуляемыми полями. Поэтому, как клиент, если я вижу, что есть поле data
, я должен ожидать увидеть оба поля, иначе у меня возникнет проблема с анализом в моем коде. Вот почему у нас не может быть такого поведения со схемой как есть. Если вы хотите реализовать это поведение, разработчик схемы должен решить, где он может вернуть значение null для некоторого ответа, и соответствующим образом изменить поле ошибок с помощью DataFetcherExceptionHandler
Или другой вариант - мы поддерживаем поведение в graphql-java
, чтобы возвращать DataFetcherResult<T>
вместо T
из функций kotlin. См. Раздел Returning data and errors
здесь: https://www.graphql -java.com / Документация / v13 / Выполнение /
Я создал проблему для продолжения этого обсуждения с другими членами команды: https://github.com/ExpediaDotCom/graphql-kotlin/issues/244