ํด๋ง ๋ฐฉ์ง
๋ฐ์ดํฐ์ ๋ํ API๋ฅผ ํด๋งํ๋ ๋์ ์นํํฌ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํตํฉ์ด API ํธ๋ํฝ๋ฅ ์ ํ ๋ด์์ ์ ์ง๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์นํํฌ ์ค๋ช ์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์์ฒญ ์ธ์ฆํ๊ธฐ
์ธ์ฆ๋ ์์ฒญ์ ์ธ์ฆ๋์ง ์์ ์์ฒญ๋ณด๋ค ๊ธฐ๋ณธ ์๋ ์ ํ์ด ๋์ต๋๋ค. ์๋ ์ ํ์ ์ด๊ณผํ์ง ์๋๋ก ํ๋ ค๋ฉด ์ธ์ฆ๋ ์์ฒญ์ ์ํํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ REST API์ ๋ํ ํธ๋ํฝ๋ฅ ์ ํ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋์ ์์ฒญ ๊ธ์ง
๋ณด์กฐ ์๋ ์ ํ์ ์ด๊ณผํ์ง ์๋๋ก ํ๋ ค๋ฉด ๋์์ ์์ฒญํ์ง ์๊ณ ์ง๋ ฌ๋ก ์์ฒญํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์์ฒญ์ ๋ํ ํ ์์คํ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ์์ฒญ ๊ฐ ์ผ์ ์ค์ง
๋ง์ ์์ POST
, PATCH
, PUT
๋๋ DELETE
์์ฒญ์ ๋ง๋๋ ๊ฒฝ์ฐ ๊ฐ ์์ฒญ ์ฌ์ด์ 1์ด ์ด์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด๋ฅผ ํตํด ๋ณด์กฐ ์๋ ์ ํ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์๋ ์ ํ ์ค๋ฅ๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌ
ํธ๋ํฝ๋ฅ ์ ํ ์ค๋ฅ๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ๋ค์ ์ง์นจ์ ๋ฐ๋ผ ์ผ์์ ์ผ๋ก ์์ฒญ์ ์ค์งํด์ผ ํฉ๋๋ค.
retry-after
์๋ต ํค๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ช ์ด๊ฐ ๊ฒฝ๊ณผํ ๋๊น์ง ์์ฒญ์ ๋ค์ ์๋ํ๋ฉด ์ ๋ฉ๋๋ค.x-ratelimit-remaining
ํค๋๊ฐ0
์ธ ๊ฒฝ์ฐx-ratelimit-reset
ํค๋๋ก ์ง์ ๋ ์๊ฐ๊น์ง ๋ค๋ฅธ ์์ฒญ์ ์๋ํด์๋ ์ ๋ฉ๋๋ค. ํค๋๋x-ratelimit-reset
UTC Epoch ์ด ๋จ์์ ๋๋ค.- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์๋ํ๊ธฐ ์ ์ 1๋ถ ์ด์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ณด์กฐ ํธ๋ํฝ๋ฅ ์ ํ์ผ๋ก ์ธํด ์์ฒญ์ด ๊ณ์ ์คํจํ๋ ๊ฒฝ์ฐ ์ฌ์๋ ์ฌ์ด์ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋ ์๊ฐ์ ๊ธฐ๋ค๋ฆฐ ํ ํน์ ํ์์ ์ฌ์๋ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํธ๋ํฝ๋ฅ ์ด ์ ํ๋ ๋์ ์์ฒญ์ ๊ณ์ํ๋ฉด ํตํฉ์ด ๊ธ์ง๋ ์ ์์ต๋๋ค.
๋ฆฌ๋๋ ์ ๋ฐ๋ฅด๊ธฐ
GitHub REST API๋ ์ ์ ํ ๊ฒฝ์ฐ HTTP ๋ฆฌ๋๋ ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ์ฉ์๋ ๋ชจ๋ ์์ฒญ์ด ๋ฆฌ๋๋ ์ ์ ์ด๋ํ ์ ์๋ค๊ณ ๊ฐ์ ํด์ผ ํฉ๋๋ค. HTTP ๋ฆฌ๋๋ ์ ์ ๋ฐ๋ ๊ฒ์ ์ค๋ฅ๊ฐ ์๋๋ฉฐ ์ฌ์ฉ์๋ ํด๋น ๋ฆฌ๋๋ ์ ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
301
์ํ ์ฝ๋๋ ์๊ตฌ ๋ฆฌ๋๋ ์
์ ๋ํ๋
๋๋ค. location
ํค๋์ ์ง์ ๋ URL์ ๋ํ ์์ฒญ์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๋ํ ์ดํ ์์ฒญ์ ์ด URL์ ์ฌ์ฉํ๋๋ก ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
302
๋๋ 307
์ํ ์ฝ๋๋ ์์ ๋ฆฌ๋๋ ์
์ ๋ํ๋
๋๋ค. location
ํค๋์ ์ง์ ๋ URL์ ๋ํ ์์ฒญ์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ดํ ์์ฒญ์ ์ด URL์ ์ฌ์ฉํ๋๋ก ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํด์๋ ์ ๋ฉ๋๋ค.
๋ค๋ฅธ ๋ฆฌ๋๋ ์ ์ํ ์ฝ๋๋ HTTP ์ฌ์์ ๋ฐ๋ผ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
URL์ ์๋ ๊ตฌ๋ฌธ ๋ถ์ ๊ธ์ง
๋ง์ API ์๋ํฌ์ธํธ๋ ์๋ต ๋ณธ๋ฌธ์ ํ๋์ ๋ํ URL ๊ฐ์ ๋ฐํํฉ๋๋ค. ์ด๋ฌํ URL์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ฑฐ๋ ํฅํ URL์ ๊ตฌ์กฐ๋ฅผ ์์ธกํด์๋ ์ ๋ฉ๋๋ค. ์ด๋ก ์ธํด GitHub์ด(๊ฐ) ๋์ค์ URL์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ํตํฉ์ด ์ค๋จ๋ ์ ์์ต๋๋ค. ๋์ ํ์ํ ์ ๋ณด๊ฐ ํฌํจ๋ ํ๋๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฌธ์ ๋ฅผ ๋ง๋๋ ์๋ํฌ์ธํธ๋ https://github.com/octocat/Hello-World/issues/1347
๊ณผ ๊ฐ์ ๊ฐ์ด ์๋ html_url
ํ๋์ 1347
๊ณผ ๊ฐ์ ๊ฐ์ด ์๋ number
ํ๋๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฌธ์ ์ ์๋ฅผ ์์์ผ ํ๋ ๊ฒฝ์ฐ html_url
ํ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋์ number
ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ํ์ด์ง๋ฅผ ๋งค๊ธด ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํด์๋ ์ ๋ฉ๋๋ค. ๋์ ๋งํฌ ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญํ ์ ์๋ ๊ฒฐ๊ณผ์ ํ์ด์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ REST API์์ ํ์ด์ง ๋งค๊น ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ ์ ํ ๊ฒฝ์ฐ ์กฐ๊ฑด๋ถ ์์ฒญ ์ฌ์ฉ
๋๋ถ๋ถ์ ์๋ํฌ์ธํธ๋ etag
ํค๋๋ฅผ ๋ฐํํ๊ณ ๋ง์ ์๋ํฌ์ธํธ๋ last-modified
ํค๋๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ฌํ ํค๋์ ๊ฐ์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด๋ถ GET
์์ฒญ์ ์ํํ ์ ์์ต๋๋ค. ์๋ต์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ 304 Not Modified
์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ํํ์ ๋, 304
์๋ต์ด ๋ฐํ๋๊ณ Authorization
ํค๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ฆ๋ ์ํ์์ ์์ฒญ์ด ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ, ํด๋น ์์ฒญ์ ๊ธฐ๋ณธ ์๋ ์ ํ์ ํฌํจ๋์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ด์ ์์ฒญ์ด 644b5b0155e6404a9cc4bd9d8b1ae730
์ etag
ํค๋ ๊ฐ์ ๋ฐํํ ๊ฒฝ์ฐ ์ดํ ์์ฒญ์์ if-none-match
ํค๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
curl -H "Authorization: Bearer YOUR-TOKEN" https://api.github.com/meta --include --header 'if-none-match: "644b5b0155e6404a9cc4bd9d8b1ae730"'
์๋ฅผ ๋ค์ด ์ด์ ์์ฒญ์ด Wed, 25 Oct 2023 19:17:59 GMT
์ last-modified
ํค๋ ๊ฐ์ ๋ฐํํ ๊ฒฝ์ฐ ์ดํ ์์ฒญ์์ if-modified-since
ํค๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
curl -H "Authorization: Bearer YOUR-TOKEN" https://api.github.com/repos/github/docs --include --header 'if-modified-since: Wed, 25 Oct 2023 19:17:59 GMT'
ํน์ ์๋ํฌ์ธํธ์ ๋ํ ์ค๋ช
์์ ๋ฌ๋ฆฌ ๋ช
์๋์ง ์๋ ํ POST
, PUT
, PATCH
, DELETE
๋ฑ์ ์์ ํ์ง ์์ ๋ฉ์๋์ ๋ํ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ง์๋์ง ์์ต๋๋ค.
์ค๋ฅ ๋ฌด์ ๊ธ์ง
๋ฐ๋ณต๋๋ 4xx
๋ฐ 5xx
์ค๋ฅ ์ฝ๋๋ฅผ ๋ฌด์ํด์๋ ์ ๋ฉ๋๋ค. ๋์ API์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํธ ์์ฉํ๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋ํฌ์ธํธ๊ฐ ๋ฌธ์์ด์ ์์ฒญํ๊ณ ์ฌ์ฉ์๊ฐ ์ซ์ ๊ฐ์ ์ ๋ฌํ๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ๊ฐ ์์ ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ถํ์ด ์๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ์๋ํฌ์ธํธ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด 4xx
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ณต๋ ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ๋ฅผ ์๋์ ์ผ๋ก ๋ฌด์ํ๋ฉด ๋จ์ฉ์ผ๋ก ๊ฐ์ฃผํ์ฌ ์ฑ์ด ์ผ์ ์ค๋จ๋ ์ ์์ต๋๋ค.