今日はGraphQLのクエリのスキーマを考えてた
いろんなデータが関連していて、原理的にはどんな入れ子の順番でも解決はできるんだけど、基本的にはデータの寿命が短い順に入れ子になっていくのが良さそうな気がする。
user { organizations {} }
はユーザーの所属する組織はそんな頻繁に変わるものじゃないから、たいてい userのほうが organizationより更新頻度が高い。
この場合userをクエリしたときのレスポンスをキャッシュできるかどうかはuserがボトルネックになる==ルートレベルなので、キャッシュ可能かどうかがわかりやすい気がする。なんというか、organizationsはuserのフィールドだってのはしっくりくる。
逆の関係の場合
organization { users {} }
は組織に紐付くユーザーは増えたり減ったりするから、たいていusersのほうがorganizationより更新頻度が高くなりそう。 このクエリは本質的にはorganizationを要求しているはずなんだけど、キャッシュはorganizationが変わってなくてもusersが変わるたびに捨てなきゃいけないので、あんまり頭良くない気がする。usersはorganizationのフィールドとはあんまり思えない感じ。
今は直感というか、嗅覚みたいなところでこれ考えてるんだけど、この辺の設計論を理論立てて書いてる本とかあったら誰か教えてください。