New Score :0
High Score :0
Run Best
NICE BUSINESS TYPE INDICATOR
3. ๊ธ์ ์ ์น๊ตฌ์๊ฒ ๋น๋ ธ๋๋ฐ ์ค๋์ด ๋์ ์ฃผ๊ธฐ๋ก ํ๋ .. ๊ทธ๋ฐ๋ฐ ์นด๋๊ฐ์ ๋ด์ผํ๋ ๋ ๋ ์ค๋์ธ๋ฐ... ์ด๊ฑธ ์ด์ฉ๋...
4. ์ฐ๋ฆฌ ํ์ฌ๋ ์ค์ํ ์์ฌ ๊ฒฐ์ ์ ํ ๋?
5. ์ด์ฌํ ์ผํ ๋๋ฅผ ์ํ ์ ๋ฌผ์ ์ฃผ๊ณ ์ถ๋ค. ์ด๋ค๊ฒ ์ข์๊น?
6. ์ํ์์ ํฌ์์ํ์ ์ถ์ฒ๋ฐ์๋ค. ์ด๋ค๊ฑธ ๊ฐ์ ํ์ง?
7. ํ์ฌ์์์ ๋๋?
8. ๊ฟ์์ ๊นจ์ด๋๋ 20๋ ์ ์ผ๋ก ๋์๊ฐ๋ค. ๋น์ ์ด ์ ์ผ ๋จผ์ ํ๋์ผ์?
9. ๋ด๊ฐ ์ธ์ฌ ๋ด๋น์๋ผ๋ฉด ์ ๊ท ์ ์ฌ์ ์ฑ์ฉ ์ ์ ์ผ ์ค์ํ๊ฒ ๋ณด๋๊ฒ์?
10. ํ์ฌ์ ์ ๋ง ์ซ์ดํ๋ ๋๋ฃ๊ฐ ์๋ค๋ฉด?
11. ๊ฐ๋ํ ์ง์ ๊ฐ์ฅ์ด ๋์๋ค.. ์๋ ์ ์์ผ ๋ ์ ๋ฌผ์?
12. ํ์ ํ์ฌ ์ถ๊ทผ ์คํ์ผ์?
13.ํ์ฌ ์ฒด์ก๋ํ ํ๋ ๋ ์ด๋ค. ์ค๋ ๋ญํ์ง?
14. ๋์ ์ ๋ฌด ์คํ์ผ์?
REST API URI ๋์์ธ์ ๋ํ 7๊ฐ์ง ๊ท์น
REST API URI ๋์์ธ์ ๋ํ ๊ท์น์ ์ดํด๋ณด๊ธฐ ์ ์ ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ๋ช ๊ฐ์ง ์ฉ์ด์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค. URI
REST API๋ URI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ค๋๋ ์ ์น์์ URI ๋์์ธ์ ๋ค์๊ณผ ๊ฐ์ด API์ ๋ฆฌ์์ค ๋ชจ๋ธ์ ๋ช ํํ๊ฒ ์ ๋ฌํ๋ ๊ฑธ์ http://api.example.com/louvre/leonardo-da-vinci/mona-lisa ๋ถํฐ ์ฌ๋๋ค์ด ์ดํดํ๊ธฐ ํจ์ฌ ์ด๋ ค์ด ๊ฒ ๊น์ง ๋ค์ํฉ๋๋ค. http://api.example.com/68dd0-a9d3-11e0-9f1c-0800200c9a66
Tim Berners-Lee๋ "์น ์ํคํ ์ฒ์ ๊ณต๋ฆฌ"๋ชฉ๋ก์ URI์ ๋ถํฌ๋ช ๋์ ๋ํ ๋ฉ๋ชจ๋ฅผ ํฌํจ ์์ผฐ์ต๋๋ค.
์๋ณ์๋ฅผ ์ฌ์ฉํ ์์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ๋๋ค. ์ญ์ฐธ์กฐํ์ง ์๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด URI ๋ฌธ์์ด์ ๋ด์ฉ์ ํ์ธํด์๋ ์ ๋ฉ๋๋ค.
- Tim Berners-Lee
ํด๋ผ์ด์ธํธ๋ ์น์ ์ฐ๊ฒฐ ํจ๋ฌ๋ค์์ ๋ฐ๋ผ์ผ ํ๋ฉฐ URI๋ฅผ ๋ถํฌ๋ช ์๋ณ์๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
REST API ๋์์ด๋๋ REST API์ ๋ฆฌ์์ค ๋ชจ๋ธ์ ์ ์ฌ์ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์์๊ฒ ์ ๋ฌํ๋ URI๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ REST API URI์ ๋ํ ์ผ๋ จ์ ๋์์ธ ๊ท์น์ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
๊ท์น์ ์ดํด๋ณด๊ธฐ ์ ์ ์ด ์น์
์ ์ ๊ณต๋ ๊ท์น๊ณผ ๊ฐ์ URI ํ์์ ๋ํ ๋จ์ด๋ URI ํ์๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
RFC 3986์ ์๋์ ๊ฐ์ด ์ผ๋ฐ URI ๊ตฌ๋ฌธ์ ์ ์ํฉ๋๋ค.
URI = scheme "://" authority "/" path [ "?" query ] [ "#" fragment ]
๊ท์น #1: ํํ ์ฌ๋์(/)๋ URI์ ํฌํจ๋์ด์๋ ์ ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ฐ๋ผ์ผ ํ ๊ฐ์ฅ ์ค์ํ ๊ท์น ์ค ํ๋์ด๋ฉฐ URI ๊ฒฝ๋ก์ ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ ์๋ฏธ ์ฒด๊ณ ๊ฐ์ ์ถ๊ฐํ์ง ์์ผ๋ฉฐ ํผ๋์ ์ผ์ผํฌ ์ ์์ต๋๋ค. REST API๋ ํํ ์ฌ๋์๋ฅผ ์์ํด์๋ ์ ๋๋ฉฐ ํด๋ผ์ด์ธํธ์ ์ ๊ณตํ๋ ๋งํฌ์ ํฌํจํ์ง ์์์ผ ํฉ๋๋ค.
๋ง์ ์น ๊ตฌ์ฑ ์์์ ํ๋ ์์ํฌ๋ ๋ค์ ๋ URI๋ฅผ ๋์ผํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
http://api.canvas.com/shapes/
http://api.canvas.com/shapes
๊ทธ๋ฌ๋ URI ๋ด์ ๋ชจ๋ ๋ฌธ์๋ ๋ฆฌ์์ค์ ๊ณ ์ ID์ ํฌํจ๋ฉ๋๋ค.
๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ URI๊ฐ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค์ ๋งคํ๋ฉ๋๋ค. URI๊ฐ ๋ค๋ฅด๋ฉด ๋ฆฌ์์ค๋ ๋ค๋ฅด๊ณ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ฐ๋ผ์ REST API๋ ๊นจ๋ํ URI๋ฅผ ์์ฑํ๊ณ ์ ๋ฌํด์ผ ํ๋ฉฐ ๋ฆฌ์์ค๋ฅผ ๋ถ์ ํํ๊ฒ ์๋ณํ๋ ค๋ ํด๋ผ์ด์ธํธ์ ์๋๋ฅผ ํ์ฉํ์ง ์์์ผ ํฉ๋๋ค.
๋ ๊ด๋ํ API๋ ํด๋ผ์ด์ธํธ๋ฅผ ํํ ์ฌ๋์ ์์ด URI๋ก ๋ฆฌ๋๋ ์ ํ ์ ์์ต๋๋ค(๋ฆฌ์์ค๋ฅผ ์ฌ๋ฐฐ์นํ๋ ๋ฐ ์ฌ์ฉ๋๋ 301 – "์๊ตฌ์ ์ผ๋ก ์ด๋๋จ"์ ๋ฐํํ ์๋ ์์).
๊ท์น #2: ์ฌ๋์ ๊ตฌ๋ถ ๊ธฐํธ(/)๋ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฌ๋์(/) ๋ฌธ์๋ URI์ ๊ฒฝ๋ก ๋ถ๋ถ์์ ๋ฆฌ์์ค ๊ฐ์ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ
๊ฐ์ต๋๋ค http://api.canvas.com/shapes/polygons/quadrilaterals/squares
๊ท์น #3: URI์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ํ์ดํ(-)์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
URI๋ฅผ ์ฝ๊ฒ ์ค์บํ๊ณ ํด์ํ ์ ์๋๋ก ํ๋ ค๋ฉด ํ์ดํ(-) ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ธด ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ์์ ์ด๋ฆ์ ๊ฐ๋ ์ฑ์ ๋์ ๋๋ค. ์์ด๋ก ๊ณต๋ฐฑ์ด๋ ํ์ดํ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ URI์ ํ์ดํ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ
๊ฐ์ต๋๋ค http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post
๊ท์น #4: URI์ ๋ฐ์ค(_)์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค.
ํ ์คํธ ๋ทฐ์ด ์์ฉ ํ๋ก๊ทธ๋จ(๋ธ๋ผ์ฐ์ , ํธ์ง๊ธฐ ๋ฑ)์ ํด๋ฆญ ๊ฐ๋ฅํ ์๊ฐ์ ์ ํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด URI์ ๋ฐ์ค์ ๊ธ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ธ๊ผด์ ๋ฐ๋ผ ๋ฐ์ค(_) ๋ฌธ์๊ฐ ์ด ๋ฐ์ค๋ก ์ธํด ๋ถ๋ถ์ ์ผ๋ก ๊ฐ๋ ค์ง๊ฑฐ๋ ์์ ํ ์จ๊ฒจ์ง ์ ์์ต๋๋ค.
์ด๋ฌํ ํผ๋์ ๋ฐฉ์งํ๋ ค๋ฉด ๋ฐ์ค ๋์ ํ์ดํ(-)์ ์ฌ์ฉํฉ๋๋ค.
๊ท์น #5: URI ๊ฒฝ๋ก์์๋ ์๋ฌธ์๋ฅผ ์ ํธํด์ผ ํฉ๋๋ค.
ํธ๋ฆฌํ ๊ฒฝ์ฐ ๋๋ฌธ์๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก URI ๊ฒฝ๋ก์์ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. RFC 3986์ ์ฒด๊ณ ๋ฐ ํธ์คํธ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ธํ๊ณ URI๋ฅผ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ผ๋ก ์ ์ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ
๊ฐ์ต๋๋ค http://api.example.com/my-folder/my-doc
HTTP://API.EXAMPLE.COM/my-folder/my-doc
์ด URI๋ ๊ด์ฐฎ์ต๋๋ค. URI ํ์ ์ฌ์(RFC 3986)์ ์ด URI๋ฅผ URI #1๊ณผ ๋์ผํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
http://api.example.com/My-Folder/my-doc
์ด URI๋ URI 1 ๋ฐ 2์ ๋์ผํ์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ํผ๋์ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๊ท์น #6: ํ์ผ ํ์ฅ์๋ URI์ ํฌํจ๋์ด์๋ ์ ๋ฉ๋๋ค.
์น์์ ๋ง์นจํ(.) ๋ฌธ์๋ ์ผ๋ฐ์ ์ผ๋ก URI์ ํ์ผ ์ด๋ฆ๊ณผ ํ์ฅ๋ช
๋ถ๋ถ์ ๊ตฌ๋ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
REST API๋ ๋ฉ์์ง์ ์ํฐํฐ ๋ณธ๋ฌธ ํ์์ ๋ํ๋ด๊ธฐ ์ํด URI์ ์ธ๊ณต ํ์ผ ํ์ฅ๋ช
์ ํฌํจํ์ง ์์์ผ ํฉ๋๋ค. ๋์ Content-Type ํค๋๋ฅผ ํตํด ์ ๋ฌ๋๋ ๋ฏธ๋์ด ์ ํ์ ์์กดํ์ฌ ๋ณธ๋ฌธ์ ์ฝํ
์ธ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
http://api.college.com/students/3248234/courses/2005/fall.json http://api.college.com/students/3248234/courses/2005/fall
ํ์ผ ํ์ฅ๋ช ์ ํ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค.
REST API ํด๋ผ์ด์ธํธ๋ HTTP์์ ์ ๊ณตํ๋ ํ์ ์ ํ ๋ฉ์ปค๋์ฆ์ธ ์์ฒญ ์๋ฝ ํค๋๋ฅผ ํ์ฉํ๋๋ก ๊ถ์ฅํด์ผ ํฉ๋๋ค.
๊ฐ๋จํ ๋งํฌ์ ์ฌ์ด ๋๋ฒ๊น ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด REST API๋ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์๋ฅผ ํตํด ๋ฏธ๋์ด ์ ํ ์ ํ์ ์ง์ํ ์ ์์ต๋๋ค.
๊ท์น #7: ์๋ํฌ์ธํธ ์ด๋ฆ์ ๋จ์์ฌ์ผ ํฉ๋๊น ์๋๋ฉด ๋ณต์์ฌ์ผ ํฉ๋๊น?
๋จ์ํ๊ฒ ์ ์ง ๊ท์น์ด ์ฌ๊ธฐ์ ์ ์ฉ๋ฉ๋๋ค. ๋ด๋ถ ๋ฌธ๋ฒ์๋ ๋ณต์ํ์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ด ์๋ชป๋์๋ค๊ณ ๋งํ์ง๋ง ์ค์ฉ์ ์ธ ๋๋ต์ URI ํ์์ ์ผ๊ด๋๊ฒ ์ ์งํ๊ณ ํญ์ ๋ณต์ํ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์ด์ํ ๋ณต์ํ (์ฌ๋ / ์ฌ๋, ๊ฑฐ์ / ๊ฑฐ์)๋ฅผ ์ฒ๋ฆฌ ํ ํ์๊ฐ ์์ผ๋ฏ๋ก API ์๋น์์ ์ถ์ด ํฅ์๋๊ณ API ๊ณต๊ธ์๊ฐ ๊ตฌํํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค (๋๋ถ๋ถ์ ์ต์ ํ๋ ์ ์ํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณตํต ์ปจํธ๋กค๋ฌ ์์ / students ๋ฐ / students/3248234๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค).
๊ทธ๋ฌ๋ ๊ด๊ณ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น? ๊ด๊ณ๊ฐ ๋ค๋ฅธ ๋ฆฌ์์ค ๋ด์์๋ง ์กด์ฌํ ์์๋ ๊ฒฝ์ฐ RESTful ์์น์ ์ ์ฉํ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ํ์์๊ฒ๋ ์ฌ๋ฌ ์ฝ์ค๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด /students ์๋ํฌ์ธํธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋งคํ๋ฉ๋๋ค.
http://api.college.com/students/3248234/courses - ID๊ฐ 3248234์ธ ํ์์ด ํ์ตํ ๋ชจ๋ ๊ฐ์ ๋ชฉ๋ก์ ๊ฒ์ํฉ๋๋ค.
http://api.college.com/students/3248234/courses/physics - ID๊ฐ 3248234์ธ ํ์์ ๋ฌผ๋ฆฌํ ๊ณผ์ ์ ๊ฒ์ํฉ๋๋ค.
๊ฒฐ๋ก
REST API ์๋น์ค๋ฅผ ์ค๊ณ ํ ๋ URI๋ก ์ ์๋๋ ๋ฆฌ์์ค์์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผํฉ๋๋ค.
๋น๋ํ๋ ์๋น์ค์ ๊ฐ ๋ฆฌ์์ค์๋ ํด๋น ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ URI๊ฐ ํ๋ ์ด์ ์์ต๋๋ค. ํด๋น URI๊ฐ ์๋ฏธ๊ฐ ์๊ณ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๊ฒ ์ค๋ช ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. URI๋ ์ดํด ๊ฐ๋ฅ์ฑ๊ณผ ์ ์ฉ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์์ธก ๊ฐ๋ฅํ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ์ผ ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๊ตฌ์กฐ(๊ด๊ณ)๋ฅผ ๊ฐ๋๋ค๋ ์๋ฏธ์์ ์ผ๊ด์ฑ ์๊ณ ๊ณ์ธต์ ์ด๋ผ๋ ์๋ฏธ์์ ์์ธก ๊ฐ๋ฅํฉ๋๋ค.
RESTful API๋ ์๋น์๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค. URI์ ์ด๋ฆ๊ณผ ๊ตฌ์กฐ๋ ํด๋น ์๋น์์๊ฒ ์๋ฏธ๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์์ ๊ท์น์ ๋ฐ๋ฅด๋ฉด ํจ์ฌ ๋ ํ๋ณตํ ํด๋ผ์ด์ธํธ๋ก ํจ์ฌ ๋ ๊นจ๋ํ REST API๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ REST ๊ท์น ๋๋ ์ ์ฝ ์กฐ๊ฑด์ด ์๋์ง๋ง API๋ฅผ ํฅ์์ํต๋๋ค.
์ถ์ฒ : 7 Rules for REST API URI Design (restcase.com)
7 Rules for REST API URI Design
By following the 7 rules for REST API URI design in the post, you will create a much cleaner REST APIs. Design for your clients, not for your data.
blog.restcase.com