Все поля и параметры, отмеченные как ненулевые в Graphiql: Sangria, scala

Я не могу использовать почтальон для запроса сервера graphql, написанного на scala, с использованием его библиотеки sangria. Я получаю сообщение об ошибке неправильного формата в почтальоне, если я использую тип содержимого как «application-json», и если я использую простой текст, я получаю неподдерживаемый тип содержимого. Я использую версию почтальона 6.2.4. Код довольно прост, я читаю данные из hbase. Я использую макрос-функцию сангрии deriveObjectTypeUnit, myCaseClass для определения объекта. Однако я могу использовать консоль graphiql, объединив файл graphiql.html из ресурсов в созданный маршрут. Проблема с консолью graphiql заключается в том, что она помечает все аргументы и поля как не допускающие значения NULL, чего не должно быть, поскольку по умолчанию все поля в graphql допускают значение NULL. Я проверил это на вкладке документации консоли graphiql, где я могу видеть все свои поля, а параметры отмечены как не допускающие значения NULL (с ​​восклицательным знаком !). Пример запроса выглядит следующим образом:

{
  hBaseTable(date: "2019-11-21", key: "10100003071234") {
    RowKey
    DateOfInt
  }
}

Мой вопрос в том, как установить значение NULL по умолчанию в сангрии и как graphql java поддерживает версию 6 почтальона, но не реализацию scala.


person Shaggy1755    schedule 08.05.2020    source источник


Ответы (1)


Поле может быть обнуляемым по умолчанию в схемах GraphQL, но в Scala nulls почти всегда являются ошибками программирования (и, конечно, всегда, если вы передаете или возвращаете их как параметры) - вы хотите обнуляемые, вы явно моделируете их с помощью Option. Если вы хотите придерживаться соглашения GraphQL, просто напишите все поля в ваших классах case как Optional.

person Mateusz Kubuszok    schedule 08.05.2020
comment
Я попробую пометить поля и аргументы как опции. Но, аналогично реализации java, есть ли у нас что-то вроде добавления восклицательного знака к типу поля (например, column: String!) В файле .graphqls только тогда, когда мы хотим пометить поле как не допускающее значения NULL. Также не следует, чтобы все поля по умолчанию допускали значение NULL, как в java и других реализациях GraphQl. Есть ли альтернативный подход к определению схемы, отличный от объекта спецификации схемы? Использовать схему файла .graphqls намного проще. Спасибо ! - person Shaggy1755; 12.05.2020
comment
В Scala никто никогда не предполагает, что это поле допускает значение NULL. nulls в основном используются только при взаимодействии с Java, поэтому никто не создает инструменты с возможностью обнуления по умолчанию. - person Mateusz Kubuszok; 12.05.2020
comment
Вы можете сгенерировать схему из кода (github.com/muuki88/sbt-graphql), но я не осознавая, что делать это наоборот. - person Mateusz Kubuszok; 12.05.2020
comment
Спасибо @Mateusz !!! Пометка полей как параметров сработала. Теперь я получаю в ответ требуемые нули. Но как схема консоли graphiql по-прежнему отображает эти поля как не допускающие значения NULL и по-прежнему отправляет значения NULL в ответе. - person Shaggy1755; 12.05.2020