๋ฐฐ๊ฒฝ
GitHub GraphQL API๋ ํ์ฌ ๋ ๊ฐ์ง ์ ํ์ ์ ์ญ ๋ ธ๋ ID ํ์์ ์ง์ํฉ๋๋ค. ๋ ๊ฑฐ์ ํ์์ ๋ซ๊ธฐ์ด๊ณ ์ ํ์์ผ๋ก ๋ฐ๋๋๋ค. ์ด ๊ฐ์ด๋์์๋ ํ์ํ ๊ฒฝ์ฐ ์ ํ์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ค๋๋ค.
์ ํ์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด ์์ฒญ์ ์๋ต ์๊ฐ์ ์ผ๊ด์ฑ ์๊ณ ์งง๊ฒ ์ ์งํ ์ ์์ต๋๋ค. ๋ํ ๋ ๊ฑฐ์ ID๊ฐ ๋ซ๊ธฐ์ด๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ์ ์๋ํ๋์ง ํ์ธํ์ธ์.
๋ ๊ฑฐ์ ์ ์ญ ๋ ธ๋ ID ํ์์ด ๋ซ๊ธฐ์ธ ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ GraphQL์ ์๋ก์ด ์ ์ญ ID ํ์ ์ ๊ณต์ ์ฐธ์กฐํ์ธ์.
์กฐ์น๋ฅผ ์ทจํด์ผ ํ๋์ง ํ์ธ
GraphQL ์ ์ญ ๋
ธ๋ ID์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ์๋ง ๋ง์ด๊ทธ๋ ์ด์
๋จ๊ณ๋ฅผ ์ํํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ID๋ ์คํค๋ง์ ์๋ ๊ฐ์ฒด์ ๋ํ id
ํ๋์ ๋์ํฉ๋๋ค. ์ ์ญ ๋
ธ๋ ID๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฉด ๋ณ๊ฒฝ ์์ด API์ ๊ณ์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
๋ํ ํ์ฌ ๋ ๊ฑฐ์ ID๋ฅผ ๋์ฝ๋ฉํ์ฌ ํ์ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ฒฝ์ฐ(์: ๊ฐ์ฒด๊ฐ ๋์ด์ค๊ธฐ ์์ฒญ์ธ์ง ํ์ธํ๋ ๋ฐ PR_kwDOAHz1OX4uYAah
์ ์ฒ์ ๋ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ID์ ํ์์ด ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก ์๋น์ค๊ฐ ์ค๋จ๋ฉ๋๋ค. ์ด๋ฌํ ID๋ฅผ ๋ถํฌ๋ช
๋ฌธ์์ด๋ก ์ฒ๋ฆฌํ๋๋ก ์๋น์ค๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ID๋ ๊ณ ์ ํ๋ฏ๋ก ์ฐธ์กฐ๋ก์ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ ์ญ ID๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ID ํ์์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ์ฉ์ดํ๊ฒ ํ๋ ค๋ฉด GraphQL API ์์ฒญ์์ X-Github-Next-Global-ID
ํค๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. X-Github-Next-Global-ID
ํค๋์ ๊ฐ์ 1
๋๋ 0
์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ๊ฐ์ 1
๋ก ์ค์ ํ๋ฉด ์๋ต ํ์ด๋ก๋๊ฐ id
ํ๋๋ฅผ ์์ฒญํ ๊ฐ์ฒด์ ๋ํด ํญ์ ์ ID ํ์์ ์ฌ์ฉํ๋๋ก ๊ฐ์ ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ 0
์ผ๋ก ์ค์ ํ๋ฉด ๊ฐ์ฒด ์์ฑ ๋ ์ง์ ๋ฐ๋ผ ๋ ๊ฑฐ์ ID ๋๋ ์ ID๋ฅผ ํ์ํ๋ ๊ธฐ๋ณธ ๋์์ผ๋ก ๋๋์๊ฐ๋๋ค.
curl
๋ช
๋ น์ ์ฌ์ฉํ๋ ์์ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ curl \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-Github-Next-Global-ID: 1" \
https://api.github.com/graphql \
-d '{ "query": "{ node(id: \"MDQ6VXNlcjM0MDczMDM=\") { id } }" }'
์ฟผ๋ฆฌ์๋ ๋ ๊ฑฐ์ ID MDQ6VXNlcjM0MDczMDM=
๊ฐ ์ฌ์ฉ๋์์ง๋ง ์๋ต์๋ ์ ID ํ์์ด ํฌํจ๋ฉ๋๋ค.
{"data":{"node":{"id":"U_kgDOADP9xw"}}}
X-Github-Next-Global-ID
ํค๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฐธ์กฐํ๋ ๋ ๊ฑฐ์ ID์ ๋ํ ์ ID ํ์์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ต์์ ๋ฐ์ ID๋ก ํด๋น ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๋ ๊ฑฐ์ ID์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ๊ณ API์ ๋ํ ํ์ ์์ฒญ์ ๋ํด ์ ID ํ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๋ ์์
์ ์ํํ๋ ค๋ฉด ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ํ๋์ API ํธ์ถ์์ ์ฌ๋ฌ ๋
ธ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ GraphQL ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
ํญ๋ชฉ์ ์ปฌ๋ ์ ์ ๋ํด ์ ID๋ฅผ ์ป์ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์กฐ์ง์ ๋ง์ง๋ง 10๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ ID๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
{
organization(login: "github") {
repositories(last: 10) {
edges {
cursor
node {
name
id
}
}
}
}
}
X-Github-Next-Global-ID
๋ฅผ 1
๋ก ์ค์ ํ๋ฉด ์ฟผ๋ฆฌ์ ์๋ ๋ชจ๋ id
ํ๋์ ๋ฐํ ๊ฐ์ ์ํฅ์ ์ค๋๋ค. ์ฆ, node
๊ฐ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ถํ๋ ๊ฒฝ์ฐ์๋ id
ํ๋๋ฅผ ์์ฒญํ๋ฉด ์ ํ์ ID๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
ํผ๋๋ฐฑ ๊ณต์
์ฑ์ ์ํฅ์ ์ฃผ๋ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์์ ๋ํด ์ฐ๋ ค ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ GitHub ์ง์ ํฌํธ ์ฌ์ฉ์ ๋ฌธ์ํ๊ณ ์ฑ ์ด๋ฆ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ฉด ๋ ๋์ ์ง์์ ๋ฐ์ ์ ์์ต๋๋ค.