0

table がある場合X、Postgraphile で生成されXConnectionたスキーマが返されるリストで null を許可するのはなぜですか?

type XConnection { nodes: [X]! }

それ以外の

type XConnection { nodes: [X!]! }

allXsクエリまたは に対する 1-N 関係のいずれかが、リスト内でX意味のある使用法を持つ例を思いつくことができませんでした。これは型付き言語のor型にnull変換され、ナビゲーションが煩雑になるので、いつになるのだろうかと思っています。OptionMaybenull

ではなく (null リストを許可する) をallXs返すのはなぜですか? here は empty と同じ意味ですか?XConnectionXConnection!null[]

ありがとう!

4

1 に答える 1

3

その理由は、create function x() returns setof my_table ...関数がテーブルの行だけでなく NULL を返す可能性があるためです。私の意見では、そうすることは悪い習慣です。同意し、そうしないことにコミットできる場合は、「SETOF 関数に null が含まれていない」フラグを使用して、不足している not null を追加できます。

-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 スキーマでは、すべてのルート レベル フィールドを null 可能にすることをお勧めします。そうでなく、1 つのルート レベル フィールドが失敗した場合 (たとえば、SQL クエリが失敗した、または DB が現在利用できない場合)、GraphQL の結果全体が null になるためです。失敗したフィールドだけではありません。GraphQL は、失敗を小さな領域に制限することに重点を置いているため、「デフォルトで null 可能」なアプローチになっています。

于 2018-07-04T09:12:31.727 に答える