Search
๐Ÿ“–

RESTful API

๐Ÿง‘๐Ÿผโ€๐Ÿš€ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ 

โ—์›น์„œ๋ฒ„๋กœ ์ž์› ์š”์ฒญ์„ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด

๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ์ด ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ๋‚˜๋ฉด

ํด๋ผ์ด์–ธํŠธ์—์„œ ์›น์„œ๋ฒ„๋กœ ์ž์›์„ ์š”์ฒญ ํ•˜๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

RESTful API

2010๋…„๋„์ฏค๋ถ€ํ„ฐย Mashupย (opens new window)์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ์ง€๋„๋ฅผ ๋น„๋กฏํ•œ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ, ๋‚ ์”จ ์ •๋ณด ๋“ฑ ๊ด€์ธก ์‹œ์Šคํ…œ์—์„œ ๋ณด๋‚ด๋Š” ์‹ค์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ทจ๊ธ‰ํ•˜๋Š” ์›น์„œ๋น„์Šค๋“ค์ด ๋งŽ์ด ๋งŒ๋“ค์–ด์กŒ๋Š”๋ฐ์š”. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ, API๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด ์›น ์„œ๋น„์Šค๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ์„œ๋น„์Šค๋ฅผ ๊ฒฐํ•ฉํ•ด ์ƒˆ๋กœ์šด ๋ถ€๊ฐ€๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ '๋งค์‹œ์—…'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์›น ์„œ๋น„์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์„œ HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ†ต์‹ ์ด ๋„๋ฆฌ ์ด์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
REST(Representational State Transfer)๋Š” ๋ฏธ๊ตญ ์ปดํ“จํ„ฐ ๊ณผํ•™์ž Roy Thomas Fielding์ด 2000๋…„์— ๋„คํŠธ์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋…ผ๋ฌธ์—์„œ ๋ฐœํ‘œํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Š” HTTP ์ฑ…์ •์—๋„ ๊ด€์—ฌํ–ˆ๊ณ , ์•„ํŒŒ์น˜ ์›น ์„œ๋ฒ„ ํ”„๋กœ์ ํŠธ์˜ ๊ณต๋™ ์„ค๋ฆฝ์ž ์ค‘ ํ•œ ์‚ฌ๋žŒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. REST๋Š” ๋งค์‹œ์—…์ด ํ™œ๋ฐœํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋˜๊ณ , ์›น์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์—ฐ๊ณ„๋ฅผ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ์šฉ๋„๊ฐ€ ๋„“์–ด์ง€๋ฉด์„œ ์•Œ๋ ค์ง€๊ณ  ์‚ฌ์šฉ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€์˜ย ๋””์ž์ธ ๊ฐ€์ด๋“œย (opens new window)์— ๋”ฐ๋ฅด๋ฉด 2010๋…„์—๋Š” ์ „ ์„ธ๊ณ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๊ณต๊ฐœ๋œ API์˜ 74%๊ฐ€ REST API๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
REST๋Š” HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋žต์ ์œผ๋กœ ์•„๋ž˜์˜ ํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
API๊ฐ€ ์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋œ๋‹ค.
โ€ข
GET/users/[์‚ฌ์šฉ์ž id]/repositories์ฒ˜๋Ÿผ ๊ฒฝ๋กœ์— ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด๋‚ด ์„œ๋น„์Šค๋ฅผ ์–ป๋Š”๋‹ค.
โ€ข
API๊ฐ€ ์„ฑ๊ณตํ–ˆ๋Š”์ง€ status code๋กœ ํด๋ผ์ด์–ธํŠธ์— ์•Œ๋ ค์ค€๋‹ค.
โ€ข
URL์€ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
โ€ข
ํ•„์š”์— ๋”ฐ๋ผ GET ๋งค๊ฐœ๋ณ€์ˆ˜, POST์˜ ๋ฐ”๋”” ๋“ฑ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.
โ€ข
์„œ๋ฒ„์—์„œ ์˜ค๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ๋Š” JSON ๋˜๋Š” XML๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์™€ ํ…์ŠคํŠธ๋‚˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ๋“ฑ์ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
ํด๋ผ์ด์–ธํŠธ ๊ด€์ ์—์„œ๋Š” ์„œ๋ฒ„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
URL์€ ๋ฆฌ์†Œ์Šค์˜ ๊ณ„์ธต์„ ๋‚˜ํƒ€๋‚ธ ๊ฒฝ๋กœ๋กœ ๋˜์–ด ์žˆ๋‹ค. ๋ช…์‚ฌ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ๋‹ค.
โ€ข
๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด HTTP ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด๋‚ด ๋ฆฌ์†Œ์Šค ์ทจ๋“, ๊ฐฑ์‹ , ์ถ”๊ฐ€ ๋“ฑ์˜ ์ž‘์—…์„ ํ•œ๋‹ค.
โ€ข
status code๋ฅผ ๋ณด๊ณ  ์š”์ฒญ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋๋Š”์ง€ ํŒ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
GET ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•ด๋„ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
โ€ข
ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์ƒํƒœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๋งค๋ฒˆ ์š”์ฒญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐœํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ REST ์›์น™๋“ค์„ ์ค€์ˆ˜ํ•œ ๊ฒƒ์„ RESTful์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Github REST API

๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์—์„œ API๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ๋Š”ย Github APIย (opens new window)๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Github API์˜ ๊ฒฝ์šฐ ๊ณต๊ฐœ ์ •๋ณด๋ผ๋ฉด ๋กœ๊ทธ์ธ๊ณผ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”. ๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ž˜์˜ ํ•ญ๋ชฉ๋“ค์„ย Postmanย (opens new window)์„ ํ†ตํ•ด ์ง์ ‘ ์กฐํšŒํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.ย Postmanย (opens new window)์€ ์‹ค์ œ ์›นํŽ˜์ด์ง€์— REST API๋ฅผ ์š”์ฒญํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„, API ๋ช…์„ธ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์š”์ฒญ์„ ํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ณผ์ •๋“ค์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
Github์—์„œ ์ž์‹ ์˜ ๊ณต๊ฐœ ํ”„๋กœํ•„ ์ •๋ณด
์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ ๋ฏธ์…˜์˜ PR ์ •๋ณด ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
woowacourse organization์— ๋Œ€ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

๐Ÿ“˜ ์ •๋ฆฌ

โ€ข
REST๋Š” URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•œ๋‹ค
โ€ข
ํด๋ผ์ด์–ธํŠธ๋Š” status code๋ฅผ ํ†ตํ•ด API์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
โ€ข
์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๋กœ JSON ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ์ด๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ