Upgrade to Pro — share decks privately, control downloads, hide ads and more …

graphql-rdb-mismatch

Avatar for majimaccho majimaccho
June 25, 2024
36

 graphql-rdb-mismatch

Avatar for majimaccho

majimaccho

June 25, 2024
Tweet

Transcript

  1. 1+1クエリになる usersに紐づく postsを取得するには、下のようなクエリがそれぞれ発行される -- まずusersを取得 SELECT * FROM users; --

    usersのidを使ってpostsを取得 SELECT * FROM posts WHERE user_id in ({user_ids}); 2回 RDBに問い合わせすることになる
  2. そもそもネストが深いオブジェクトをフロントエンドに押しつけたくな い イミュータブルなモデルそのまま露出するとこんな感じになる type UserResponse = { id: string; latestName:

    { name: string; // 変更履歴を残してるからテーブルが別 } posts: { id: string; latestTitle: { title: string; // 変更履歴を残してるからテーブルが別 } comments: { id: string; latestComment: { body: string; // 変更履歴を残してるからテーブルが別 } ...
  3. GraphQLはクライアント中心の API As we saw in the introduction, GraphQL is

    a client-centric API. This philosophy affects how we should design our GraphQL APIs too. While it's tempting to be designing APIs in terms of backend resources or entities, it's very important to design GraphQL APIs with client use cases in mind first, before anything else. (序章で見たように、 )GraphQLはクライアント中心の APIである。この哲学は私たちが GraphQL APIをどのように設計すべきかにも影響を与える。 APIの設計はバックエンドのリソ ースやエンティティを元に実装される誘惑に駆られるが、最初に GraphQL APIクライアント のユースケースを考慮して設計することが重要である。 Production Ready GraphQL (P.24 GraphQL Schema Design: Client first) - Marc-André Giroux