2017-08-08 4 views
0

私はGraphQLが新しく、2つの異なる方法のいずれかで関連するフィールドを選択できることに気付きました。 droidsテーブルとhumansテーブルがあり、droidsのテーブルがhumansownerであるとします。GraphQL:これらの2つのパターンのどちらが良い/悪いですか?

query DroidsQuery { 
    id 
    name 
    owner { 
    id 
    } 
} 

か:あなたはこれを表現するには2つの方法(少なくとも)あります一見

query DroidsQuery { 
    id 
    name 
    ownerId # this resolves to owner.id 
} 

は、前者はより多くの慣用的なようだ、とあなたは複数のフィールドを選択している場合、明らかにそれは(の利点がありますowner { id name }と新しいownerNameを作成する必要がありますのでownerId ownerNameを実行できます)。しかし、具体的には、ownerIdのスタイルにはっきりとした説明があります。

また、実装の観点から、ownerIdフィールド対humansテーブル(のid列としてowner { id }を翻訳と同じように、不要なJOIN作るリゾルバに自分自身を貸すだろうowner { id }のように思える、独自でいます、レゾルバは、droidsテーブルのowner_id列を取得するためにJOINが必要ないことを知っています)。

私が言ったように、私はGraphQLを初めて使いました。だから、この質問にはニュアンスがたくさんあると思います。したがって、私はGraphQLをどちらのアプローチの悪い/弱い側面に使っている人からの洞察を期待していました。そして、私は明白に "ここで客観的に悪い/優れているアプローチは他のアプローチよりも優れています"と主観的な "私は1つのアプローチを好む"答えを探しています。

答えて

1

GraphQLは単なるクエリ言語+実行セマンティクスであることを理解する必要があります。データの表示方法とデータの解決方法には制限がありません。

あなたが説明することをやめ、所有者オブジェクトと所有者IDの両方を返すことを止めるものはありません。

type Droid { 
    id: ID! 
    name: String! 
    owner: Human! # use it when you want to expand owner detail 
    ownerId: ID! # use it when you just want to get id of owner 
} 

あなたはすでに主要な問題を指摘した:かつての実装はより慣用的なようです。いいえ、慣用コードを作ってはいけません。実用的なコードを作ってください。あなたはGraphQLのフィールド改ページデザインとして

現実世界の例:

type Droid { 
    id: ID! 
    name: String! 
    friends(first: Int, after: String): [Human] 
} 

初めて、あなたは+ドロイド友人を照会し、それは結構です。

{ 
    query DroidsQuery { 
    id 
    name 
    friends(first: 2) { 
     name  
    } 
    } 
} 

次に、さらに多くの友だちを追加するには、をクリックします。それは次の友人を解決する前に、以前のドロイドオブジェクトを照会するDroidsQuery 1つのより多くの時間を打つ:

{ 
    query DroidsQuery { 
    id 
    friends(first: 2, after: "dfasdf") { 
     name  
    } 
    } 
} 

だから、直接ドロイドIDからの友人を解決するために、別のDroidFriendsQueryクエリを持つことが実用的です。

+0

詳細な回答をありがとうございますが、「あなたはどちらにでもできる」と言っているような気がします。事は、私はすでに私がそれをどちらかの方法で行うことができることを知っています。私が本当に理解しようとしていることは、それを一方向に行うことの長所/短所(すなわち、トレードオフ)です。 – machineghost

関連する問題