# ๐ 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 ํํ์ ๋ฐ์ดํฐ์ด๋ค.