-
[Network] REST์ REST API๐ณDev/Dev 2022. 4. 22. 23:21
์ ๊ฐ ์ฐพ์ ์ฝ์ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ๊ณต๊ฐ์ ๋๋ค. ์ ํํ ์ ๋ณด๋ ํ๋จ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
1. HTTP API, HyperText Transfer Protocol
- HTTP ํต์ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก API๋ฅผ ์๋ฏธ
- ์น๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํํธ์จ์ด ์ํคํ ์ณ์ ํ ํ์
API, Application Programming Interface
- ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ค ํ๋ก๊ทธ๋จ์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ดํฐ์ ์ ๋ณด๋ฅผ ๊ตํํ๋ ๊ฒ
- ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์, ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์๊ฒ๋ API ๊ธฐ๋ฅ์ ์ํํ๋๋ฐ ํ์ํ ๋ถ๋ถ๋ง์ ์ ๊ณตํ๋ค. ๋์์ API๋ ์์ฒญ์ ๋ฐ๋ฅธ ๋ฐํ๊ฐ์ ์ ๊ณตํ ๋ฟ ๋ด๋ถ์ ๊ตฌํ์ ์จ๊ธด๋ค
2. REST, REpresentational State Transfer
REST ์ ์
- Representational State Transfer (ํํ์ ์ธ ์ํ ์ ๋ฌ)
- ์์์ ์ด๋ฆ์ HTTP URI์ ํํํ๊ณ , ์์์ ์ํ๋ HTTP METHOD๋ก ์ ์ํ๋ ๋ฐฉ๋ฒ
- REST๋ HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ์, HTTP์ ์ฅ์ ์ ์ต๋ํ ํ์ฉ ๊ฐ๋ฅ
- ๋คํธ์ํฌ ์์์ Server-Client ํต์ ๋ฐฉ์์ ์ฌ์ฉ
REST ๊ตฌ์ฑ ์์
- Resource : URI
- ์์์ HTTP URI๋ก ๊ตฌ๋ถํ๋ค
- Verb : HTTP Method
- HTTP Method : GET POST PUT DELETE
- Representation of Resource
- Client๊ฐ ์์๊ณผ ํ์๋ฅผ ์์ฒญํ๋ฉด, Server๋ ์ด์ ๋ง๋ ์๋ต(representation)์ ๋ณด๋ธ๋ค
- REST์์ ์์์ ์ฃผ๋ก JSON๊ณผ XML๊ณผ ๊ฐ์ ํํ์ representation์ผ๋ก ๋ํ๋ธ๋ค
REST ํน์ง
- Server-Client (์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ) : ์๋ก ๊ฐ ์์กด์ฑ์ด ์ค์ด๋ ๋ค (HTTP)
- Stateless (๋ฌด์ํ) : ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋๋ค (HTTP)
- Cacheable (์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ) : ๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค (HTTP)
- Layered System (๊ณ์ธตํ) : Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ, ๊ตฌ์กฐ์ ์ ์ฐ์ฑ์ ์ค ์ ์๋ค.
- Uniform Interface (์ธํฐํ์ด์ค ์ผ๊ด์ฑ) : URI๋ก ์ง์ ํ ์์์ ๋ํด ์ผ๊ด์ฑ ์๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ค
- Code on demand : Server๋ก๋ถํฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์์ Client์์ ์คํํ๋ค. ๋ฐ๋์ ์ถฉ์กฑํ ํ์์๋ค
3. REST API, REpresentaional State Transfer Application Programming Interface
REST API ์ ์
- REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
- ์กฐ์ง ๋ด ์์คํ ์ ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค
REST API์ ์์น
- ์์์ ์๋ณ
- ์์ฒญ ๋ด ๊ธฐ์ ๋ ๊ฐ๋ณ ์์์ ์๋ณํ ์ ์๋ค
- ๋ฉ์์ง๋ฅผ ํตํ ๋ฆฌ์์ค ์กฐ์
- ์์๊ณผ ํน์ ๋ฉํ๋ฐ์ดํฐ๋ง ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์๋ฒ ์์ ์์์ ์กฐ์ํ ์ ์๋ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค
- ์๊ธฐ์์ ์ ๋ฉ์์ง
- ๊ฐ ๋ฉ์์ง๋ ์์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ๋์ง์ ๋ํ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ํฌํจํ๋ค
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ์ ๋ํ ์์ง์ผ๋ก์ ํ์ดํผ๋ฏธ๋์ด(HATEOAS)
- ํ์ดํผ๋งํฌ๊ฐ ์ถ๊ฐ๋์ด ๋ค์์ ์ด๋ค API๊ฐ ํธ์ถํด์ผํ๋์ง๋ฅผ ํด๋น ๋งํฌ๋ฅผ ํตํด์ ๋ฐ์ ์ ์๋ค
- ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ์ผ๋ก ์๋ฒ์ ๋์ ์ธ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ
์ผ๋ฐ์ ์ธ API ์๋ต
{ "user_id" : 1000 }โ
Hateoas๊ฐ ์ ์ฉ๋ API ์๋ต
{ "user_id" : 1000, "links" : [ { "rel" : "self", "href" : "http://localhost:8080/users/1000" }, { "rel" : "user-data", "href" : "http://localhost:8080/users/1000/data" } ] }
Resource
- document : ๊ฐ์ฒด ์ธ์คํด์ค
http://api.example.com/users/{id}
- collection : ๋จ์ผ document๋ค์ ๋ฌถ์. ๋ณต์ ํํ๋ก ํํ
http://api.example.com/users
http://api.example.com/users/{id}/items
- store : client ์ ์ฅ์ ์ ์ฅ์, client๊ฐ ๊ด๋ฆฌํ๋ ํํ
http://api.example.com/users/{id}/favorites
- controller : CRUD ์ธ์ ๊ฒ์ ํํํ์ฌ ๋์ฌ๋ก ํํ
(method๋ก ํํ์ด ์ด๋ ค์ธ ๋, ๋ํ์ ์ผ๋ก PUT๊ณผ DELETE๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ controller๋ก ํํํ๋ค)
http://api.example.com/users/{id}/register
REST API ์ค๊ณ ๊ธฐ๋ณธ ๊ท์น
- URI๋ ์ ๋ณด์ ์์์ ํํํ๋ค
- ์์์ ๋์ฌ๋ณด๋ค ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค
- ์์์ document ์ด๋ฆ์ผ๋ก ๋จ์๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค
- ์์์ collection ์ด๋ฆ์ผ๋ก ๋ณต์๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค
- ์์์ store ์ด๋ฆ์ผ๋ก ๋ณต์๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค
- ex) GET /users/1
- ์์์ ๋ํ ํ์๋ HTTP Method๋ก ํํํ๋ค
- URI์ HTTP Method/ํ์์ ๋ํ ๋์ฌ ํํ์ด ๋ค์ด๊ฐ๋ฉด ์๋๋ค
- URL์ ๋์ฌ๋ฅผ ์ฐ๋ฉด ์๋๋ ์ด์
- ๋ถํ์ํ ์ค๋ณต
- HTTP method์ URL์ ํํํ ๋์ฌ์์ ๋ถ์ผ์น
- ex) GET /users/delete/1 -> DELETE /users/1
- ex) GET /users/show/1 -> GET /users/1
- URL์ ๋์ฌ๋ฅผ ์ฐ๋ฉด ์๋๋ ์ด์
- ๊ฒฝ๋ก ๋ถ๋ถ ์ค ๋ณํ๋ ๋ถ๋ถ์ ์ ์ผ ๊ฐ์ผ๋ก ๋์ฒดํ๋ค
- ex) ์๋ก์ด ํ์์ ์์ฑ : POST /students
- ex) id๊ฐ 4์ธ ํ์์ ์ญ์ : DELETE /students/4
- URI์ HTTP Method/ํ์์ ๋ํ ๋์ฌ ํํ์ด ๋ค์ด๊ฐ๋ฉด ์๋๋ค
REST API ์ค๊ณ ๊ท์น
- ์ฌ๋์( / )๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค
- URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์๋ฅผ ํฌํจํ์ง ์๋๋ค
- ํ์ดํ( - )์ URI ๊ฐ๋ ์ฑ์ ๋์ด๋๋ฐ ์ฌ์ฉํ๋ค
- ์ธ๋๋ฐ( _ )๋ URI์ ์ฌ์ฉํ์ง ์๋๋ค
- URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค (RFC 3986)
- ํ์ผ ํ์ฅ์๋ URI์ ํฌํจ์ํค์ง ์๋๋ค
- Accept Header๋ฅผ ์ฌ์ฉํ๋ค
- ex) GET /users/3/photo.jpg (X)
- ex) GET /users/3/photo Host: restapi.example.com Accept: image/jpg
- ๋ฆฌ์์ค ๊ฐ์๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ
- /๋ฆฌ์์ค๋ช /๋ฆฌ์์คID/๊ด๊ณ๊ฐ ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ช
- ex) GET /users/3/pencils (has์ ๊ด๊ณ๋ฅผ ํํํ ๋)
- id๋ ํ๋์ ํน์ resource๋ฅผ ๋ํ๋ด๋ ๊ณ ์ ๊ฐ์ด๋ค
4. RESTful
RESTful ์ด๋
- RESTful์ REST ์ํคํ
์ฒ๋ก ๊ตฌํํ ์๋น์ค๋ฅผ ํํํ๋ค
- REST API๋ฅผ ์ฌ์ฉํ๋ ์น ์๋น์ค๋ RESTfulํ๋ค
- ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ข์ REST API๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
- ์ฑ๋ฅ ํฅ์ ๋ณด๋ค๋ ์ผ๊ด์ ์ธ ์ปจ๋ฒค์ ์ ํตํ API์ ์ดํด๋์ ํธํ์ฑ์ ๋์ด๊ธฐ ์ํจ
5. Reference
57 · Issue #2 · SangHakLee/sanghaklee.tistory.com
RESTful API ์ค๊ณ ๊ฐ์ด๋ RESTful API ์ค๊ณ ๊ฐ์ด๋ ๋ณธ ๋ฌธ์๋ REST API๋ฅผ ์ข ๋ RESTful ํ๊ฒ ์ค๊ณํ๋๋ก ๊ฐ์ด๋ํ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ก๋ค. ๋ฐ๋ผ์, ๊ธฐ๋ณธ์ ์ธ REST API ๊ฐ๋ ์ค๋ช ์ ์๋์ ๋งํฌ๋ก ๋์ ํ๋ค. REST A
github.com
GitHub - WeareSoft/tech-interview: ๐ tech interview
:loudspeaker:๐ tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.
github.com
[Network] REST๋? REST API๋? RESTful์ด๋? - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
API, HTTP API, REST API ์ฐจ์ด
๊ธฐ์์ฒญ ๋ ์จ์ ๋ณด API, ์ฆ๊ถ API, ์ง๋ API ๋ฑ๋ฑ ๋ง์ฐํ๊ฒ API๋ ๋จ์ด๋ฅผ ๋ค์ด์๋ค. API๋ฅผ ๊ฐ์ ธ๋ค ์จ, API๋ก ๊ฐ๋ฐํ๋ค ๋ฑ๋ฑ ๊ฐ๋ ์ ์ ๋๋ก ๋ชจ๋ฅด๋ฉฐ ์ฌ์ฉ ํด์๊ธฐ์ ์ด๋ฒ์ API์ ๋ํด ๊ฐ๋ ์ ์ผ๋ก ์ ๋ฆฌํด๋ณด๊ณ
bentist.tistory.com
HTTP API vs REST API - ์ธํ๋ฐ | ์ง๋ฌธ & ๋ต๋ณ
HTTP API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฒ์ด REST API์ธ๊ฐ์? ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. - ์ง๋ฌธ & ๋ต๋ณ | ์ธํ๋ฐ...
www.inflearn.com
REST - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
๋ํ๋ฏผ๊ตญ์ ํํฉ ์์ ๊ฐ์ ๋ํด์๋ R-EST ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. REST(Representational State Transfer)๋ ์๋ ์์ด๋ ์น๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํํธ์จ์ด ์ํคํ ์ฒ์ ํ ํ์์ด๋ค. ์ด
ko.wikipedia.org
[Spring] Level3 REST API ๊ตฌํ์ ์ํ HATEOAS ์ ์ฉ
HATEOAS(Hypermedia As the Engine Of Application State) ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ Restful์ ๋ฆฌ์์ค์ ์ฐ๊ด๋(ํธ์ถ ๊ฐ๋ฅํ) ์์ ์ํ ์ ๋ณด๋ฅผ ์ ๊ณต Level 0 : The Swamp of POX (์๊ฒฉ ํ๋ก์์ ํธ์ถ) ์ผ๋ฐ XML ๋ฐ์ด..
transferhwang.tistory.com
'๐ณDev > Dev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kotlin ๊ณต์ ํ์ด์ง์ Play Example ๋ฒ์ญํ๊ธฐ (+๊ณต๋ถ์ฉ) (0) 2022.06.26 [Spring] Spring ์น ๊ฐ๋ฐ ๊ธฐ์ด (0) 2022.04.25 [Network] HTTP์ HTTPS (๋น์ฐ๊ฒฐ์ฑ๊ณผ ๋ฌด์ํ) (0) 2022.04.21 [Dev] Build ์ Gradle, Maven (0) 2022.04.15 [Spring] Spring Boot Project ์์ฑ, ๋น๋ ๊ทธ๋ฆฌ๊ณ ์คํํ๊ธฐ (+ View) (0) 2022.04.14