masalibの日記

システム開発、運用と猫の写真ブログです

GraphQL:用語について

専門用語があるのでメモとして残す

Learning GraphQL: Declarative Data Fetching for Modern Web Apps

Learning GraphQL: Declarative Data Fetching for Modern Web Apps

  • Query
    SQLでいう「Select」に分類されるもの。データを取得するためだけのものです(Read Only)

Queryの例

{
  hero {
    name
  }
}

結果の例

{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}
  • Mutation
    SQLでいう「insert,update,delete」に分類されるもの。データを作成、変更、削除するための操作。 単純に翻訳すると「突然変異」ですが「作成、変更、削除」の総称とおぼえてください
mutation AddTodo($type: String!) {
  addTodo(type: $type) {
    id
    type
  }
}
  • Argument(引数) SQLでいう「Whereの条件」に分類されるもの。
{
  human(id: "200") {
    weight(unit: "pounds")
    height
  }
}

上記の例の「id: "200"」がArgument(引数)になります

競合を避けるためにフィールドの結果に別名です。 SQLだと微妙にちがうのですが「AS句」になります

GraphQLの例

{
  admin: human(id: "200") {
    name
    email
  }
  user: human(id: "400") {
    name
    email
  }
}

SQLの例

SELECT name AS alias_name, email FROM human WHRE id='200';
  • Fragments(フラグメント)

列名を繰り返し使う場合に別名にできる機能。SQL機能だと・・・ない??

上記のエイリアスの例でも

    name
    email

を2回ほど同じ列を記載しています。 2つ程度なら問題ないですが、100件とかあると大変なので列の別名で対応したほうが、送信するときのクエリーのバイト数が減ります

Fragments(フラグメント)を使っていない場合の例

{
  admin: human(id: "200") {
    name
    email
  }
  user: human(id: "400") {
    name
    email
  }
}

Fragments(フラグメント)を使った場合の例

{
  admin: human(id: "200") {
    ...humanFields
  }
  user: human(id: "400") {
    ...humanFields
  }
}

fragment humanFields on Character {
  name
  appearsIn
}
  • Variables(変数)

今までの例ではパラメータを直接記載(ハードコード)していますが 何回も使う場合などはVariables(変数)を宣言して対応します。 単純なSQLではないですが、ストアドの変数に該当します。

Variables(変数)を使っていない例

{
  human(id: "200") {
    name
    email
  }
  book(auth_id: "200") {
    book_name
    price
  }
}

Variables(変数)を使った例

{
  human(id: user_id) {
    name
    email
  }
  book(auth_id: user_id) {
    book_name
    price
  }
}

{
  "user_id": "200"
}