Какова техническая причина того, что GraphQL позволяет определять массив с записями, допускающими значение NULL? - PullRequest
0 голосов
/ 10 июля 2020

В GraphQL вы можете определить массив, в котором любой / каждый член может иметь значение NULL, т.е. [Vote] или [Vote]!. Это требует, чтобы мы всегда использовали внутренний восклицательный знак ([Vote!]!).

declaration accepts: | null | []   | [null] | [{foo: 'BAR'}]
------------------------------------------------------------------------
[Vote!]!             | no   | yes  | no     | yes
[Vote]!              | no   | yes  | yes    | yes
[Vote!]              | yes  | yes  | no     | yes
[Vote]               | yes  | yes  | yes    | yes

Я не могу придумать допустимого варианта использования для [Vote]!.

Какой дизайн когда-либо мог бы иметь такой требование? Это для корректной обработки ошибок?

1 Ответ

1 голос
/ 10 июля 2020

Желательно, чтобы отдельный элемент в списке допускал значение NULL из-за способа обработки ошибок GraphQL и недопустимости NULL . В частности, в отношении списков:

Если тип List является оболочкой для типа, отличного от Null, и один из элементов этого списка разрешается в null, тогда весь список должен разрешаться в null. Если тип List также заключен в ненулевое значение, ошибка поля продолжает распространяться вверх.

Итак, мы можем представить сценарий, в котором ошибка возникает при разрешении какого-либо поля на отдельном Vote пункт. Поле, в котором возникает ошибка, не допускает значения NULL, поэтому сам элемент становится нулевым. Если тип родительского поля - [Vote] или [Vote]!, то на этом доллар останавливается, и как часть списка возвращается null (с ошибкой в ​​массиве errors, объясняющей, что пошло не так). Однако, если у нас есть [Vote!], то весь список будет обнулен. Если у нас есть [Vote!]!, то список не может быть нулевым, и ошибка будет продолжать всплывать, пока не попадет в поле, допускающее значение NULL.

Таким образом, если вы широко используете ненулевые значения, один ошибка в глубине дерева может привести к тому, что все значение data в ответе будет нулевым. Хотя в некоторых случаях это может быть нормально, часто лучше иметь возможность визуализировать хотя бы частичный результат, а не ничего вообще. По этой же причине, возможно, рекомендуется избегать ненулевых значений в целом, за исключением случаев, когда объект не может использоваться без определенного поля (например, поля id).

Вне обработки ошибок, Есть ли сценарий ios, в котором имеет смысл возвращать список, содержащий нули? Примером может быть операция, которая ищет список объектов на основе предоставленного массива идентификаторов. В этом случае может быть желательно, чтобы результирующий массив соответствовал длине (и порядку) массива идентификаторов, чтобы можно было использовать ноль, чтобы указать, что соответствующий объект не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...