Vous pouvez accĂ©der Ă la plupart des objets dans GitHub (utilisateurs, problĂšmes, demandes de tirage, etc.) Ă lâaide de lâAPI REST ou de lâAPI GraphQL. Vous pouvez trouver lâID de nĆud global de nombreux objets Ă partir de lâAPI REST et utiliser ces ID dans vos opĂ©rations GraphQL. Pour plus dâinformations, consultez Afficher un aperçu des ID de nĆud de lâAPI GraphQL dans les ressources de lâAPI REST.
Remarque
Dans REST, le champ ID de nĆud global est nommĂ© node_id
. Dans GraphQL, il sâagit dâun champ id
sur lâinterface node
. Pour un rappel de ce que signifie « nĆud » dans GraphQL, consultez PrĂ©sentation de GraphQL.
Placement des ID de nĆud globaux Ă utiliser
Vous pouvez suivre trois Ă©tapes pour utiliser efficacement les ID de nĆud globaux :
- Appelez un point de terminaison REST qui retourne lâobjet
node_id
. - Recherchez le type de lâobjet dans GraphQL.
- Utilisez lâID et le type pour effectuer une recherche de nĆud directe dans GraphQL.
Prenons un exemple.
1. Appeler un point de terminaison REST qui retourne lâID de nĆud dâun objet
Si vous demandez lâutilisateur authentifiĂ© :
curl -i --header "Authorization: Bearer YOUR-TOKEN" https://api.github.com/user
Vous obtenez une réponse qui inclut le node_id
de lâutilisateur authentifiĂ© :
{
"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. Rechercher le type dâobjet dans GraphQL
Dans cet exemple, la valeur de node_id
est MDQ6VXNlcjU4MzIzMQ==
. Vous pouvez utiliser cette valeur pour interroger le mĂȘme objet dans GraphQL.
Vous devez dâabord connaĂźtre le type de lâobjet, cependant. Vous pouvez vĂ©rifier le type avec une requĂȘte GraphQL simple :
query {
node(id:"MDQ6VXNlcjU4MzIzMQ==") {
__typename
}
}
Ce type de requĂȘteâla recherche du nĆud par IDâest appelĂ© « recherche de nĆud directe ».
Lorsque vous exĂ©cutez cette requĂȘte, vous verrez que lâobjet __typename
est User
.
3. Effectuer une recherche de nĆud directe dans GraphQL
Une fois que vous avez confirmĂ© le type, vous pouvez utiliser un fragment inline pour accĂ©der Ă lâobjet par son ID et retourner des donnĂ©es supplĂ©mentaires. Dans cet exemple, nous dĂ©finissons les champs sur User
que nous aimerions interroger :
query {
node(id:"MDQ6VXNlcjU4MzIzMQ==") {
... on User {
name
login
}
}
}
Ce type de requĂȘte est lâapproche standard pour rechercher un objet par son ID de nĆud global.
Utilisation des ID de nĆud globaux dans les migrations
Lors de la crĂ©ation dâintĂ©grations qui utilisent lâAPI REST ou lâAPI GraphQL, il est recommandĂ© de conserver lâID de nĆud global afin de pouvoir facilement rĂ©fĂ©rencer des objets entre les versions de lâAPI. Pour plus dâinformations sur la gestion de la transition entre REST et GraphQL, consultez Migration de REST vers GraphQL.