ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

グローバルノードIDの利用

REST APIを通じてオブジェクトのグローバルノードIDを取得し、それらをGraphQLの操作で利用できます。

ここには以下の内容があります:

GitHubのほとんどのオブジェクト(ユーザ、Issue、プルリクエストなど)には、REST APIを使っても、GraphQL APIを使ってもアクセスできます。 最近のアップデートで、多くのオブジェクトのグローバルノードIDをREST APIから見つけ、それらのIDをGraphQLの操作で使えるようになりました。

ノート: RESTでは、グローバルノードIDフィールドはnode_idという名前になっています。 GraphQLでは、nodeインターフェースのidフィールドです。 GraphQLで「ノード」が何を意味するかを再確認するため、「GraphQLの紹介」を参照してください。

グローバルノードIDを利用する

グローバルノードIDを効率的に利用するには、以下の3つのステップを踏んでください。

  1. オブジェクトのnode_idを返すRESTのエンドポイントを呼びます。
  2. GraphQLでのそのオブジェクトの型を見つけます。
  3. そのIDと型を使い、GraphQLでダイレクトにノードのルックアップを行います。

例を見ていきましょう。

1. オブジェクトのノードIDを返すRESTのエンドポイントの呼び出し

認証済みのユーザをリクエストした場合、

$ curl -i -u username:token https://api.github.com/user

その認証済みユーザのnode_idを含むレスポンスが返されます。

{
  "login": "octocat",
  "id": 1,
  "avatar_url": "https://github.com/images/error/octocat_happy.gif",
  "gravatar_id": "",
  "url": "https://api.github.com/users/octocat",
  "html_url": "https://github.com/octocat",
  "followers_url": "https://api.github.com/users/octocat/followers",
  "following_url": "https://api.github.com/users/octocat/following{/other_user}",
  "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
  "organizations_url": "https://api.github.com/users/octocat/orgs",
  "repos_url": "https://api.github.com/users/octocat/repos",
  "events_url": "https://api.github.com/users/octocat/events{/privacy}",
  "received_events_url": "https://api.github.com/users/octocat/received_events",
  "type": "User",
  "site_admin": false,
  "name": "monalisa octocat",
  "company": "GitHub",
  "blog": "https://github.com/blog",
  "location": "San Francisco",
  "email": "octocat@github.com",
  "hireable": false,
  "bio": "There once was...",
  "public_repos": 2,
  "public_gists": 1,
  "followers": 20,
  "following": 0,
  "created_at": "2008-01-14T04:33:35Z",
  "updated_at": "2008-01-14T04:33:35Z",
  "private_gists": 81,
  "total_private_repos": 100,
  "owned_private_repos": 100,
  "disk_usage": 10000,
  "collaborators": 8,
  "two_factor_authentication": true,
  "plan": {
    "name": "Medium",
    "space": 400,
    "private_repos": 20,
    "collaborators": 0
  },
  "node_id": "MDQ6VXNlcjU4MzIzMQ=="
}

2. GraphQLでのオブジェクトの型を見つける

この例では、node_idの値はMDQ6VXNlcjU4MzIzMQ==です。 この値を使って、同じオブジェクトをGraphQLでクエリできます。

ただし、まずオブジェクトのを知る必要があります。 シンプルなGraphQLクエリで、この型を調べることができます。

query {
  node(id:"MDQ6VXNlcjU4MzIzMQ==") {
     __typename
  }
}

この種のノードをIDで見つけるクエリは、「ダイレクトノードルックアップ」と呼ばれています。

このクエリを実行すると、__typenameUserであることが分かります。

3. GraphQLでダイレクトノードルックアップを行う

型が確認できたら、インラインフラグメントを使ってIDでオブジェクトにアクセスし、追加のデータを返させることができます。 この例では、クエリをかけたいUserのフィールドを定義しています。

query {
  node(id:"MDQ6VXNlcjU4MzIzMQ==") {
   ... on User {
      name
      login
    }
  }
}

この種のクエリは、オブジェクトをグローバルノードIDでルックアップする標準的なアプローチです。

移行におけるグローバルノードIDの利用

REST API または GraphQL API を使用するインテグレーションを構築する場合、API バージョン間にわたってオブジェクトを簡単に参照できるように、グローバルノード ID を保持すると良いでしょう。 RESTとGraphQL間の移行の扱いに関する詳細な情報については「RESTからGraphQLへの移行」を参照してください。

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.