GraphQL 1-GraphQLの概念

2483 ワード

参考資料1 https://youtu.be/9BIXcXHsj0A
参考資料2 https://www.yalco.kr/lectures/graphql-apollo/

従来のREST APIの欠点


Overfetching
1つの端点で1つの値を取得すると、不要な情報が一緒に多く発生します.このように情報を過度に取得することをOverfetchingと呼ぶ.
Underfetching
たとえば、チームの情報とチームメンバーの情報を取得するには、エンドポイントでチームを要求し、エンドポイントでチームInfoを要求する必要があります.overfetchingとは逆に,今回取得した情報はより少ない.この現象を欠取と呼ぶ.

グラフィックQLを用いてREST APIの欠点を解決する


GraphQLはgetの役割のように、情報を検索する際にquery~を使用してリクエスト、情報を送信、修正、削除する際にmutation~を使用します.
GraphQLは、必要な情報のみを取得することで、キャプチャの問題を解決します.
1.
query {
  teams { //팀들의 manager, office 정보만 가져오기
    manager
    office
  }
}

2.
query {
  team(id: 1) { //1번 팀의 manager, office 정보만 가져오기
    manager
    office
  }
}
また、次の情報を複数回要求することなく、1回の要求で未キャプチャ問題を解決することができる.
query {
  team(id: 1) {
    manager
    office
    members {
      first_name
      last_name
    }
  }
}
//1번 팀 정보와 해당 팀 멤버들의 정보 가져오기
//post
mutation {
  postTeam (input: {
    manager: "John Smith"
    office: "104B"
    extension_number: "#9982"
    mascot: "Dragon"
    cleaning_duty: "Monday"
    project: "Lordaeron"
  }) {
    manager
    office
    extension_number
    mascot
    cleaning_duty
    project
  }
}

//edit
mutation {
  editTeam(id: 2, input: {
    manager: "Maruchi Han"
    office: "105A"
    extension_number: "2315"
    mascot: "Direwolf"
    cleaning_duty: "Wednesday"
    project: "Haemosu"
  }) {
    id,
    manager,
    office,
    extension_number,
    mascot,
    cleaning_duty,
    project
  }
}

//delete
mutation {
  deleteTeam(id: 3) {
    id,
    manager,
    office,
    extension_number,
    mascot,
    cleaning_duty,
    project
  }
}
別のエンドポイントでは、post操作ですべてのリクエストを実行できます.