2016-12-21 8 views
1

これは一般的な質問です。私が意味することをよりよく説明するために例を挙げています。GraphQL APIでフィールドを控えめにまたは寛大に追加する必要がありますか?

私はユーザーモデルとトーナメントモデルを持ち、トーナメントモデルにユーザーIDとそのスコアのキー/値マップがあるものとします。 GraphQLのAPIとして、これを露光したとき、私は直接そのように、多かれ少なかれ、それを公開することができます:

Schema { 
    tournament: { 
    scores: [{ 
     user: User 
     score: Number 
    }] 
    } 
    user($id: ID) { 
    id: ID 
    name: String 
    } 
} 

これは、すべてのデータへのアクセスを提供します。しかし、多くの場合、特定のトーナメントでユーザーの得点を得ることや、トーナメントから特定のユーザーの得点を得ることが有用な場合があります。言い換えれば、私が追加できることを便利なようで、多くのエッジがあります

Schema { 
    tournament: { 
    scores: [{ 
     user: User 
     score: Number 
    }] 
    userScore($userID: ID): Number # New edge! 
    } 
    user($id: ID) { 
    id: ID 
    name: String 
    tournamentScore($tournamentID: ID): Number # New edge! 
    } 
} 

これおそらく、便利な方法で、より多くのユースケースをカバーし、クライアントのために消費するより実用的になります。一方、私が公開するほど、私はより多くを維持する必要があります。

私の質問は:一般的に、それは「寛大」ことと(それがクライアントのために、それが容易になりますので)該当ノード間の多くのエッジが露出するように優れている、またはそれは控えめコードのみ公開することをお勧めしますデータを取得するのに必要なだけ多く(維持することが少ないため)

もちろん、この簡単な例ではどちらの点でも大きな違いはありませんが、より大きなAPIを設計する際にこれらが重要な疑問になるような気がします。

+0

私は混乱しています。 GraphQLで新しいフィールドのどこに_edge_という用語が見つかりましたか? –

+0

私は...それは彼らが呼ばれたものだと思ったが、今あなたが言うと、私はそれを作ったにちがいない。私は型がノードであり、フィールドがあなたのAPIであるグラフの辺であるように考えていました。それは理にかなっているように感じました。しかし、今では、それらの用語がサイトのどこにも使われていないことがわかりました。しかたがない。 – Ludwik

+1

お返事ありがとうございます。はい、各GraphQLオブジェクトタイプはノードを表し、GraphQLオブジェクトは1つ以上のフィールドで構成されます。 EdgeはGraphQL接続のコンテキストでより多く使用されます。 –

答えて

1

私はコメントとしてそれを書くことができますが、私は答えとして、次の点を強調して助けることができない。

は常に常にYAGNI principleに従ってください。維持することが少ないほど良い。優れたAPIデザインは、それがどれだけ大きいかということではなく、ニーズをどれだけ満たしているか、どの程度使いやすいかということです。

後で必要なときにいつでも新しいフィールド(例ではエッジと呼ぶもの)を追加することができます。 KISSが良いです。

1

それとも、この

Schema { 
    tournament: { 
    scores(user_ids: [ID]): [{ 
     user: User 
     score: Number 
    }] 
    } 
    user($id: ID) { 
    id: ID 
    name: String 
    tournaments(tournament_ids: [ID]): [{ 
     tournament: Tournament 
     score: Number 
    }] 
    } 
} 

を行うことができ、user_idstournament_idsは必須ではありませんから、ユーザーはすべてのエッジ、一部、または1つを取得するための意思決定を行うことができます。

+0

これは私が考えたよりも良いパターンですが、私の質問は一般的なケースであり、特にこの例ではありませんでした。 – Ludwik

関連する問題