๐ RESTful API
: ๋ ์ปดํจํฐ ์์คํ ์ด ์ธํฐ๋ท์ ํตํด ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ๊ตํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค
์์ ํ๊ณ ์ ๋ขฐํ ์ ์์
ํจ์จ์ ์ํํธ์จ์ด ํต์ ํ์ค ์ค์ โ ์ ๋ณด๊ตํ ์ง์ํจ
๐ API
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค
- ๋ค๋ฅธ ์ํํธ์จ์ด ์์คํ ๊ณผ ํต์ ํ๊ธฐ์ํด ๋ฐ๋ผ์ผํ๋ ๊ท์น์ ์ ์ํจ
- Client์ Web Resource ์ฌ์ด์ ๊ฒ์ดํธ์จ์ด
๐ก ๊ฐ๋ฐ์ : ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํต์ ํ ์ ์๊ฒ API๋ฅผ ์์ฑํ๊ณ ํ์ํจ
๐ ๊ทผ๋ฌด๊ธฐ๋ก์ ํ๋ฆฌ์ผ์ด์
- ์ง์ ์ ์ฒด์ด๋ฆ, ๋ ์ง๋ฒ์๋ฅผ ์์ฒญํ๋ API ํ์
- ์์ฒญ API โ ์์ โ ํด๋น resource ๋ฐํ
โก๏ธ ์์ฒญ API : Client
โก๏ธ ์น resource : ํด๋น ๊ทผ๋ฌด๊ธฐ๋ก ๋ฐ์ดํฐ
Web์์ ์ ๋ณด(๋ฐ์ดํฐ)์ ์ก์ธ์ค ํ๋ ค๋ ์ฌ์ฉ์
โ API๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ ์
โก ์ํํธ์จ์ด ์์คํ
๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ ์ ๋ณด
๋ฐ์ดํฐ์ ์ ํ์ ๋ค์ํจ
Client์๊ฒ Resource๋ฅผ ์ ๊ณตํ๋ ๊ฒ โ ์๋ฒ
API ์ฌ์ฉ โ Resource ๊ณต์ , ๋ณด์, ์ ์ด, ์ธ์ฆ โก๏ธ ์น์๋น์ค ์ ๊ณต
API๋ ํน์ ๋ด๋ถ Resource์ ์ก์ธ์คํ ์ ์๋ Client๋ฅผ ๊ฒฐ์ ํ๋๋ฐ ๋์์ด ๋จ
๐ Representational State Transfer
: API ์๋๋ฐฉ์์ ๋ํด ์กฐ๊ฑด์ ๋ถ๊ณผํ๋ ์ํํธ์จ์ด ์ํคํ ์ณ
์ธํฐ๋ท๊ณผ ๊ฐ์ ๋ณต์กํ ๋คํธ์ํฌ์์ ํต์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ง์นจ์ผ๋ก ๋ง๋ค์ด์ก์
REST๊ธฐ๋ฐ ์ํคํ ์ณ โ ๋๊ท๋ชจ ๊ณ ์ฑ๋ฅ ํต์ ์ ์์ ์ ์ผ๋ก ์ง์๊ฐ๋ฅ โ
์ฝ๊ฒ ๊ตฌํ ๋ฐ ์์ ๊ฐ๋ฅ โ ์ฌ๋ฌ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
์ฉ์ด | ์๋ฏธ |
---|---|
REST API | REST ์ํคํ ์ณ ์คํ์ผ์ ๋ฐ๋ฅด๋ API |
RESTful API | REST ์ํคํ ์ณ๋ฅผ ๊ตฌํํ๋ ์น์๋น์ค |
RESTful API๋ผ๋ ์ฉ์ด๋ RESTful ์น API๋ฅผ ๋ํ๋
์์ ๋ ์ฉ์ด๋ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๋ชจ๋ RESTful ์น์๋น์ค ๋์์ธ์ ๊ธฐ๋ณธ
์๋ฒ๊ฐ ํ์คํ์์ผ๋ก ์ ๋ณด๋ฅผ ์ ์กํ๋ค๋ ์๋ฏธ๋ฅผ ๋ํ๋
ํ์์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ Resource ๋ด๋ถํํ๊ณผ ๋ค๋ฅผ ์ ์์
์๋ฒ๊ฐ ์ด์ ์ Request์ ๋ ๋ฆฝ์ ์ผ๋ก Client ์์ฒญ์ ์๋ฃํ๋ ํต์ ๋ฐฉ๋ฒ
Client๋ ์์์ ์์๋ก Resource๋ฅผ Request ๊ฐ๋ฅ
Request โ ๋ฌด์ํ or ๋ค๋ฅธ Request์ ๋ถ๋ฆฌ๋จ
Client์ ์๋ฒ ์ฌ์ด, ๋ค๋ฅธ ์น์ธ๋ ์ค๊ฐ์ โ ์ฐ๊ฒฐ๊ฐ๋ฅ
์๋ฒ โ Request๋ฅผ ๋ค๋ฅธ ์๋ฒ๋ก ๋ณด๋ผ ์ ์์
Client Request โ ๋ณด์, ์ ํ๋ฆฌ์ผ์ด์ , ๋น์ฆ๋์ค๋ก์ง ๋ฑ ์ฌ๋ฌ๊ณ์ธต์ผ๋ก ์ฌ๋ฌ์๋ฒ์์ ์คํ๋๋๋ก RESTful ์น์๋น์ค ์ค๊ณ๊ฐ๋ฅ
ํด๋น ๊ณ์ธต๋ค์ Client์๊ฒ๋ ๋ณด์ด์ง ์์
์๋ฒ์๋ต์๊ฐ ๊ฐ์ ์ ์ํด Client ๋๋ ์ค๊ฐ์ โ ์ผ๋ถ Response๋ฅผ ์ ์ฅํ๋ ์บ์ฑ์ ์ง์ํจ
Client๋ ์ฒซ๋ฒ์งธ Response ์ดํ ์บ์ฑํ๊ฑฐ๋ ์ ์ฅํ ๋ค์ ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํจ
์๋ฒ โ ์ํํธ์จ์ด ํ๋ก๊ทธ๋๋ฐ ์ฝ๋ โก๏ธ Client์๊ฒ ์ ์ก
Client ๊ธฐ๋ฅ์ ํ์ฅํ๊ฑฐ๋ ์ฌ์ฉ์์ง์ ์ผ๋ก ํ ์ ์์
์น์ฌ์ดํธ์ ๋ฑ๋ก์์ ์์ฑ โ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ชป๋ ์์์ ์ฆ์ ๊ฐ์กฐํ์ํจ
REST API๋ฅผ ๊ตฌํํ๋ ์์คํ
โ REST๊ฐ Client์ ์๋ฒ ์ํธ์์ฉ์ ์ต์ ํํจ
โก๏ธ ํจ์จ์ ์ผ๋ก ํฌ๊ธฐ์กฐ์ ๊ฐ๋ฅ โ
์ฑ๋ฅ์ ํ ์์ธ์ธ ํต์ ๋ณ๋ชฉํ์์ ์ผ์ผํค์ง ์์ผ๋ฉด์ ํ์ฅ์ฑ์ ์ง์ํจ
๋ฌด์ํ : ์๋ฒ๊ฐ ๊ณผ๊ฑฐ Client Request ์ ๋ณด๋ฅผ ์ ์งํ ํ์๊ฐ ์์ โ ์๋ฒ๋ก๋ ์ ๊ฑฐํจ
์บ์ฑ : ์ผ๋ถ Client์ ์๋ฒ ์ํธ์์ฉ์ ์ ๊ฑฐํจ
์์ ํ Client์ ์๋ฒ์ ๋ถ๋ฆฌ๋ฅผ ์ง์ํจ โญ๏ธ
๋ค์ํ ์๋ฒ ๊ตฌ์ฑ์์ ๋จ์ํ, ๋ถ๋ฆฌ ๊ฐ ๋ถ๋ถ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ ํ ์ ์์
(์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๋ค์ ์์ฑํ์ง ์๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต์ ๋ณ๊ฒฝํ ์ ์์)
REST API๋ ์ฌ์ฉ๋๋ ๊ธฐ์ ๊ณผ ๋ ๋ฆฝ์ ์
API ์ค๊ณ์ ์ํญ โ โ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก Client ๋ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์์
ํต์ ์ ์ํฅ โ โ ์์ชฝ์ ๊ธฐ๋ณธ๊ธฐ์ ๋ณ๊ฒฝ๊ฐ๋ฅ
RESTful API ๊ธฐ๋ณธ๊ธฐ๋ฅ์ ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ง๊ณผ ๋์ผํจ
Client๋ Resource ํ์์ ์๋ฒ์ ์ ์ํจ
๐ REST API ํธ์ถ ์ผ๋ฐ๋จ๊ณ
โ Client โ ์๋ฒ ; Request ์ ์ก
(Client๋ API ๋ฌธ์ ์ฐธ์กฐํ์ฌ ์๋ฒ๊ฐ ์ดํดํ๋ ๋ฐฉ์์ผ๋ก ์์ฒญํ์์ง์ )
โก ์๋ฒ Client ์ธ์ฆ โ Request ๊ถํ ์๋์ง ํ์ธ
โข ์๋ฒ Request ์์ ํ๊ณ , ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌ
โฃ ์๋ฒ โ Client ; Response ๋ฐํ
(Request ์ฑ๊ณต ์ฌ๋ถ ํฌํจ๋์ด์์)
(Response์ Request ์ ๋ณด๋ ํฌํจ๋์ด์์)
์๋ฒ ; ๊ณ ์ ํ Resource ์๋ณ์ โ ๊ฐ Resource๋ฅผ ์๋ณํจ
REST ์ํคํ ์ณ ๊ธฐ๋ฐ ์น์๋น์ค ์๋ฒ โ URL๋ก Resource๋ฅผ ์๋ณํจ
HTTP๋ฅผ ์ด์ฉํ RESTful API ๊ตฌํ ์ ์ฌ์ฉ
HTTP ๋ฉ์๋ โ Resource์ ์ํํด์ผํ๋ ์์ ์ ์๋ฒ์ ์๋ ค์ค
GET method
โ ์๋ฒ์ ์ง์ ๋ URL์ ์๋ Resource์ ์ก์ธ์คํจClient โ POST method
โ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํจ
Request + ๋ฐ์ดํฐํํ
๋์ผ POST Request ์ฌ๋ฌ ๋ฒ ์ ์ก ์, ๋์ผ Resource ์ฌ๋ฌ ๋ฒ ์์ฑ์ฃผ์
Client โ PUT method
โ ์๋ฒ์ ๊ธฐ์กด Resource Update
PUT Request๋ ์ฌ๋ฌ ๋ฒ ์์ฒญํด๋, ๊ฒฐ๊ณผ๋ ๋์ผํจ
Client โ DELETE method
โ Resource ์ ๊ฑฐ
์๋ฒ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ
Client์ ์ ์ ํ ์ธ์ฆ์ด ์์ผ๋ฉด, DELETE Request๋ ์คํจํจ
Client์ ์๋ฒ ๊ฐ์ ๊ตํ๋๋ ๋ฉํ๋ฐ์ดํฐ
Request, Response ํ์ + Request ์ํ ๋ฑ์ ์ ๋ณด
๐ RESTful API ์ธ์ฆ
: Response๋ฅผ ๋ณด๋ด๊ธฐ ์ , Request ์ธ์ฆ์ ํจ โ ์ ๋ขฐ๊ตฌ์ถ
Client โ Request Header
โก๏ธ User์ด๋ฆ + ์ํธ
base64 ์ธ์ฝ๋ฉ ์ฌ์ฉ
์ ๋ฌ์(bearer)์ธ์ฆ : ํ ํฐ์ ๋ฌ์์ ๋ํ ์ก์ธ์ค ์ ์ด๋ฅผ ์ ๊ณตํ๋ ํ๋ก์ธ์ค
bearer token
: ์๋ฒ๊ฐ ๋ก๊ทธ์ธ Request์ ๋ํ Response๋ก ์์ฑํ๋ ์ํธํ๋ ๋ฌธ์์ด
Client โ Request Header
โก๏ธ bearer token
์๋ฒ โ ๊ณ ์ ์์ฑ๊ฐ โก๏ธ ์ต์ด Client์ ํ ๋น
Client๋ Resource์ ์ก์ธ์ค ํ ๋๋ง๋ค ๊ณ ์ API ํค๋ฅผ ์ฌ์ฉํด ๋ณธ์ธ์ ๊ฒ์ฆํจ
๋คํธ์ํฌ ๋๋์ ์ทจ์ฝํจ
๋ชจ๋ ์์คํ ์ ๋ํด ๋งค์ฐ ์์ ํ ๋ก๊ทธ์ธ ์ก์ธ์ค
์ํธ
+ token
์๋ฒ๋ ๋จผ์ ์ํธ๋ฅผ ์์ฒญํ ๋ค, ์ถ๊ฐ token์ ์์ฒญํจ
ํน์ ๋ฒ์ ๋ฐ ์๋ช โ token ์ฌํ์ธ ๊ฐ๋ฅ
Request ์ฑ๊ณต ๋๋ ์คํจ๋ฅผ ์๋ฆฌ๋ 3์๋ฆฌ ์ํ์ฝ๋
2XX
: ์ฑ๊ณต4XX
, 5XX
: ์ค๋ฅ3XX
: URL ๋ฆฌ๋๋ ์
(๋ค๋ฅธ URL๋ก Client๋ฅผ ๋ณด๋ด๋ ๊ฒ)๐ 200 : ์ผ๋ฐ ์ฑ๊ณต Response
๐ 201 : POST ๋ฉ์๋ ์ฑ๊ณต Response
๐ 400 : ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์๋ชป๋ Request
๐ 404 : Resource ์ฐพ์ ์ ์์
Response ๋ณธ๋ฌธ โ Resource ํํ์ด ํฌํจ๋จ
Request Header์ ํฌํจ๋ ๋ด์ฉ์ ๊ธฐ๋ฐ โ ํํํ์์ ์ ํํจ
{"name" : "mallang", "age" : 22}
Response์ ๋ํ ๋ฉํ๋ฐ์ดํฐ
์๋ฒ, ์ธ์ฝ๋ฉ, ๋ ์ง, ์ฝํ ์ธ ์ ํ ๋ฑ