Почему тип подключения Postgraphile <X>допускает значения NULL в своем списке узлов?

Если у меня есть стол Xпочему генерируется Postgraphile схема для XConnection разрешить нули в возвращаемом списке?

type XConnection { nodes: [X]! }

вместо

type XConnection { nodes: [X!]! }

Я не мог придумать примеры, где либо allXs запрос или любое 1-N отношение к X будет иметь значимое использование null в списке. Это переводит в Option или же Maybe введите типизированный язык, что делает навигацию громоздкой, поэтому мне интересно, когда это будет null,

И почему allXs вернуть XConnection (разрешив нулевой список) вместо XConnection!? Был бы null здесь означают то же самое, что и пустой []?

Спасибо!

1 ответ

Причина в том, что create function x() returns setof my_table ... функции могут возвращать как нули, так и строки таблицы. На мой взгляд, это плохая практика. Если вы согласны и можете принять обязательство не делать этого, то вы можете использовать флаг "нет функций SETOF содержат пустые значения", чтобы добавить отсутствующие ненулевые значения, о которых вы спрашивали.

-N, --no-setof-functions-contain-nulls
if none of your RETURNS SETOF compound_type functions mix NULLs with the results 
then you may enable this to reduce the nullables in the GraphQL schema

(Я сопровождающий PostGraphile и добавил эту опцию.)

Что касается поля корневого уровня allXs; Хорошая практика в схеме GraphQL для всех полей корневого уровня - обнуляться, потому что если их нет и одно поле корневого уровня завершается неудачно (например, запрос SQL не выполнен или БД недоступна прямо сейчас), тогда весь результат GraphQL будет нулевым, скорее чем просто поле, которое не удалось. GraphQL отлично подходит для ограничения сбоев в небольших областях, поэтому используется подход "по умолчанию".

Другие вопросы по тегам