๐ REST API์ ์ ์
์ฐ์ , REST๊ฐ ์ด๋ค ๊ฒ์ ์๋ฏธํ๋์ง ์๊ณ ๊ฐ๋๋ก ํ์.
REST๋ Representational State Transfer์ ์ฝ์์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด์๋ค.
- ์์ (Resource) : URI
- ํ์ (Verb) : HTTP Method
- ํํ (Representations)
-> ๋ฐ๋ผ์ REST API๋ URI๋ฅผ ํตํด์ ์์์ ๋ํ๋ด๊ณ , HTTP Method๋ฅผ ์ด์ฉํด ํด๋น ์์์ ํ์๋ฅผ ๊ท์ ํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐กREST์ ํน์ง
- Uniform Interface
- URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์คํ์ผ์ ๋งํ๋ค.
- Stateless
- REST๋ ๋ฌด์ํ์ฑ ์ฑ๊ฒฉ์ ๊ฐ๊ณ , ์์ ์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ฑฐ๋ ๊ด๋ฆฌํ์ง ์๋๋ค. ์ธ์ ์ ๋ณด๋ ์ฟ ํค์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ํ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
- ์ด๋ฅผ ํตํด์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๊ณ ์๋ฒ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์๋๋ค.
- Cacheable
- ๊ธฐ์กด ์น ํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ HTTP๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
- Self-descriptiveness
- REST API ๋ฉ์ธ์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
- Client-Server ๊ตฌ์กฐ
- REST ์๋ฒ๋ API๋ฅผ ์ ๊ณตํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ ์คํธ ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ฐ๊ฐ์ ์ญํ ์ด ํ์คํ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ์ด ๋ช ํํด์ง๊ณ ์๋ก๊ฐ์ ์์กด์ฑ์ด ์ค์ด๋ค๊ฒ ๋๋ค.
- ๊ณ์ธตํ ๊ตฌ์กฐ
- REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต ๋ฑ์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ๊ณผ ํ๋ก์, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
๐๏ธ RESTFUL URI์ค๊ณ ์์น
RESTFULํ URI๋ฅผ ์ค๊ณํ ๋ ๊ฐ์ฅ ์ค์ํ ๋๊ฐ์ง ์ค์ฌ ์์น์ ๋ค์๊ณผ ๊ฐ๋ค.
1๏ธโฃ URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
2๏ธโฃ ์์์ ๋ํ ํ์๋ HTTP METHOD๋ก ํํํด์ผ ํ๋ค.
-> ์ฆ, ์ฌ๊ธฐ์ ์ค์ํ ํค์๋๋ "์์(Resource)", "ํ์(Verb)-HTTP Method" ์์ ํ์ธํ ์ ์๋ค. ํด๋น ํค์๋์ ๋ํด์ ์ ๋๋ก ์๊ณ ๊ฐ๋๋ก ํ์!
๐Resource์ ์ข ๋ฅ
์์์ ์ข ๋ฅ๋ ์ด ๋ค๊ฐ์ง๊ฐ ์๋ค.
1) ๋ฌธ์(Document)
- ๋จ์ผ ๊ฐ๋ (ํ์ผ ํ๋, ๊ฐ์ฒด ์ธ์คํด์ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค row)
- ๋จ์ ์ฌ์ฉ (/device-management, /user-management)
2) ์ปฌ๋ ์ (Collection)
- ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ๋ก, ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
- ๋ณต์๋ฅผ ์ฌ์ฉํ๋ผ
- POST ๊ธฐ๋ฐ ๋ฑ๋ก
- ์) /users, /accounts....
3) ์คํ ์ด(Store)
- ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ์์ ์ ์ฅ์๋ก, ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌ
- PUT ๊ธฐ๋ฐ ๋ฑ๋ก
- ์) ์ ์ ์ปจํ ์ธ ๊ด๋ฆฌ, ์๊ฒฉ ํ์ผ ๊ด๋ฆฌ
- ๋ณต์ ์ฌ์ฉ (/files)
4) ์ปจํธ๋กค URI ํน์ ์ปจํธ๋กค๋ฌ(Controller)
- ๋ฌธ์, ์ปฌ๋ ์ , ์คํ ์ด๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ถ๊ฐ ํ๋ก์ธ์ค ์คํ
- ๋์ฌ๋ฅผ ์ง์ ์ฌ์ฉ
- ์) GET, POST๋ง ์ฌ์ฉํ ์ ์๋ HTTP FORM์ ๊ฒฝ์ฐ ์ปจํธ๋กค URI(๋์ฌ๋ก ๋ ๋ฆฌ์์ค ๊ฒฝ๋ก)๋ฅผ ์ฌ์ฉํ๋ค. ex) /members/delete, /members/new ๋ฑ
- ๋์ฌ ์ฌ์ฉ (/checkout, /play ๋ฑ)
- ์ฆ, ์์์ด control ์์์ธ ๊ฒฝ์ฐ์๋ง ์์ธ์ ์ผ๋ก ๋์ฌ ์ฌ์ฉ์ ํ์ฉํ๋ ๊ฒ์ด๋ค.
๐HTTP Method์ ์ข ๋ฅ
- ํ์๋ฅผ ํํํ๊ธฐ ์ํด ์ฃผ๋ก ์ฌ์ฉํ๋ HTTP method๋ ์์ ๋ค์ฏ๊ฐ์ ๊ฐ๋ค.
- ์ฌ๊ธฐ์ HTTP ๋ฉ์๋๋ฅผ ์ ํํ ์ดํดํ๊ธฐ ์ํด์๋ ๋ฉฑ๋ฑ์ฑ์ด๋ผ๋ ํค์๋์ ๊ฐ๋ ์ ์๊ณ ๊ฐ์ผ ํ๋ค.
๐ก ๋ฉฑ๋ฑ์ฑ(Idempotence)์ด๋?
๋ฉฑ๋ฑ์ฑ์ด๋ ์ฌ๋ฌ๋ฒ ์ํํด๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ ์๋ฏธํ๋ค.
์๋ฒ์ ์ํ๋ ๋ฉฑ๋ฑ์ฑ์ด ์ ์ง๋์ด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ์ ํ์๋ฅผ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํ๋๋ผ๋ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
์๋ฒ์์ ์๋ต์ด ๋ค๋ฅผ ์๋ ์์ง๋ง, ์์ฒญ์ด ์๋ํ ํจ๊ณผ๋ฅผ ๋ฐํํ ๋ ๋ฉฑ๋ฑ์ฑ์ด ์ ์ง๋จ์ ์๋ฏธํ๋ค.
- HTTP ๋ฉ์๋์์์ ๋ฉฑ๋ฑ์ฑ
4.2.2. Idempotent Methods
A request method is considered "idempotent" if the intended effect on
the server of multiple identical requests with that method is the
same as the effect for a single such request. Of the request methods
defined by this specification, PUT, DELETE, and safe request methods
are idempotent.
- ์ค์ HTTP ๋ช ์ธ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๋ฉฑ๋ฑ์ฑ์ ๊ฐ๋ ๋ฉ์๋๋ ํ์๋ฅผ ํ๋ฒ ์์ฒญํ์๋์ ๋ค๋์ผ๋ก ์์ฒญํ์ ๋๊ฐ ๊ฐ์ ํจ๊ณผ๊ฐ ๋๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
- Data์ ์ํ๋ฅผ ์๊ฐํด๋ณด์.
- ํจ์์ ํํ๋ก ํํํ๋ฉด F(F(x))=F(x) ์ผ๋ก ์ดํดํ๋ฉด ์ฝ๋ค.
- 1๋ฒ ์ ์ ๋ฅผ ํ๋ฒ ์ง์ฐ๊ฑฐ๋, ์ฌ๋ฌ๋ฒ ์ง์ฐ๋ ์์ฒญ์ ํด๋ 1๋ฒ ์ ์ ๊ฐ ์๋ ์ํ๋ ๊ฐ๋ค.
- ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ ๋ฉ์๋
- GET/ HEAD/ OPTIONS : ๋ฉฑ๋ฑ์ฑ๋ ๊ฐ์ง๋ฉฐ, ์๋ฒ์ ์ํฅ์ ์ฃผ์ง ์์ SAFEํ ์์ฒญ์ด๊ธฐ๋ ํ๋ค.
- PUT/PATCH/DELETE
- ๋ฆฌ์์ค์ ์์น๋ฅผ ์ ํํ๊ฒ ์ง์ ํ์ฌ ์ฌ์์ฒญ์ ํ์ ๊ฒฝ์ฐ, ๋ฆฌ์์ค ์์ /์ญ์ ๋ฑ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- ํ๋์ ๋ฐ์ดํฐ์ ๋ํด์๋ง ์์ /์ญ์ ๋ฑ์ ์ผ์ผํค๊ณ , ๋์ด์ ๋๊ฐ์ ์์ฒญ์ ๋ํด์๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ์ผ์ผํค์ง ์๋๋ค.
- POST
- ๋ง์ฝ POST๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์์ฒญํ๋ค๊ณ ์๊ฐํด๋ณด์.
- POST๋ฅผ ํ๋ฒ ์์ฒญํ๋ ๊ฒ๊ณผ ๋ค๋์ผ๋ก ์์ฒญํ๋ ๊ฒ์ ๋ฆฌ์์ค๋ฅผ ๊ณ์ ์๋ก ์์ฑํ๋๊ฒ๊ณผ ํ๊ฐ๋ง ์์ฑํ๋ ๊ฒ์ ์ฐจ์ด์ ์ ๊ฐ์ง๋ค. ์ฆ POST์ ์ฌ์์ฒญ์์ ์๋ฒ์ ์ํ๋ 1๋ฒ ์์ฒญํ์ ๋์ ์๋ฒ์ ์ํ์ ๋ค๋ฅด๋ค.
- ์๋ฒ์ ์ํ๊ฐ ์ ์ง๋๋ค๋ ๊ฐ๋ ์ด ์๋นํ ํท๊ฐ๋ฆด ์ ์๋ค. ํ์์ ๊ฒฝ์ฐ์๋ "์์ ์ ๊ณ์ ํ๋ฉด ๋งค๋ฒ ์๋ฒ ์ํ๊ฐ ๋ค๋ฅธ ๊ฑฐ ์๋???" ๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋งค๋ฒ ๋ค๋ฅธ ์์ ์์ฒญ์ ๋ณด๋ผ ๋์ ๊ฒฝ์ฐ์ด๋ฉฐ, ๋งค๋ฒ "๋์ผํ" ์์ฒญ์ ํ์๋, ๋ฐ์ดํฐ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด ๋ฉฑ๋ฑ์ฑ์ด ์กด์ฌํ์ง ์๋๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
๐ฅPUT VS PATCH
PATCH์ PUT์ ๋ ๋ค ๋ฐ์ดํฐ์ ์์ ์ ์ํ method์ด์ง๋ง, ์ด๋ ํ ๋ฐฉ์์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์์ ํ๋์ง๊ฐ ๋ค๋ฅด๋ค.
- PATCH, which is used to apply partial modifications to a resource
- PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload
์ฆ, PUT ๋ฉ์๋๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ง ์์ฑ์ ๋ํ ์์ฒญ์ ์ผ๋ถ๋ถ๋ง ๋ณด๋ธ ๊ฒฝ์ฐ์๋ ์ ๋ฌํ ํ๋ ์ด์ธ์ ๊ฐ์ด ๋ชจ๋ null ๋๋ default ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋ฒ๋ฆฐ๋ค.
๊ทธ๋ฌ๋, PATCH๋ฅผ ์ด์ฉํ์ฌ ๋ณ๊ฒฝํ ์์ฑ์ ๊ดํด์๋ง ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋กญ๊ฒ ๋ฐ๋ ๋ถ๋ถ๋ง ๋ฐ์๋๋ฉฐ ๋๋จธ์ง๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋ค.
-> ์ฆ ์์์ ์ผ๋ถ๋ฅผ ์์ ํ ๋๋ PATCH ๋ฉ์๋๋ฅผ, ์ ์ฒด์ ์ธ ์์ ์ด ํ์ํ ๋๋ PUT ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
-์ด๋ ๊ฒ REST API ์ค๊ณ์ ์ค์ํ ๋ ๊ฐ์ง ์์น์ ๊ธฐ์ตํ๋ฉด์ URI ์ค๊ณ์ ๋ฐ๋์ ์์์ผํ ๊ฐ์ด๋๋ผ์ธ์ ์ดํด๋ณด์.
1. ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฃผ์์์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ฏ๋ก, ์นด๋ฉํ์์ด ์๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค.
- BAD CASE
<http://restapi.com/users/postComments>
- GOOD CASE
<http://restapi.com/users/post-comments>
2. ์ธ๋๋ฐ ๋์ ํ์ดํ์ ์ฌ์ฉํ๋ค.
- ๊ฐ๊ธ์ ์ด๋ฉด ํ์ดํ๋ ์๋ตํด์ผ ํ๋ ์ด์ ๋, ์ฃผ์์ฐฝ์ ๊ฐ๋ ค์ ธ ์ฌ์ฉ์๊ฐ ํ์ธํ๊ธฐ ์ด๋ ค์ธ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- BAD CASE
<http://restapi.com/users/post_comments>
- GOOD CASE
<http://restapi.com/users/post-comments>
3. ๋ง์ง๋ง์ ์ฌ๋์๋ฅผ ํฌํจํ์ง ์๋๋ค.
- ์ฌ๋์๋ ๊ณ์ธต์ ๊ตฌ๋ถํ๋ ๊ฒ์ผ๋ก ๋ง์ง๋ง์๋ ์ฌ์ฉํ์ง ์๋๋ค.
4. ํ์๋ ํฌํจํ์ง ์๋๋ค.
- ํ์๋ URL ๋์ HTTP Method๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฌํ๋ค.
- BAD CASE
<http://restapi.com/users/1/delete-post/1>
- GOOD CASE
<http://restapi.com/users/1/posts/1>
5. ํ์ผ ํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
- REST API์์๋ ๋ฉ์ธ์ง ๋ฐ๋ ๋ด์ฉ์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ URI ์์ ํฌํจํ์ง ์๋๋ค.
- BAD CASE
<http://restapi.com/users/photo.jpg>
- GOOD CASE
GET <http://restapi.example.com/users/photo> HTTP/1.1
Host: restapi.example.com Accept: image/jpg
6. ๊ฐ๊ธ์ ์ ๋ฌํ๊ณ ์ ํ๋ ์์์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋, ์ปจํธ๋กค ์์์ ์๋ฏธํ๋ ๊ฒฝ์ฐ ์์ธ์ ์ผ๋ก ๋์ฌ๋ฅผ ํ์ฉํ๋ค.
- ํญ์ Resource๊ฐ ์ด๋ค ๋ฒ์ฃผ์ ํฌํจ๋์ด์๋์ง ํ์ธํด์ผ ํ๋ค.
- ์ปจํธ๋กค ์์์ ๊ฒฝ์ฐ์๋ ๋์ฌ๋ฅผ ์ง์ ์ฌ์ฉํด์ ์ด๋ฆ์ ์ง๋๋ค.
- ๋ง์ฝ ๊ฐ์ฉํ ์ ์๋ HTTP method๊ฐ GET,POST๋ก ํ์ ๋ ๊ฒฝ์ฐ์๋ ์ปจํธ๋กค URI๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ delete๋ฑ์ ๋์ฌ๋ก URI๋ฅผ ์ค๊ณํ๊ธฐ๋ ํ๋ค.
http://api.example.com/cart-management/users/{id}/cart/checkout
http://api.example.com/song-management/users/{id}/playlist/play
'Web > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐์ฌ์ฉ์ ์ธ์ฆ ๋ฐฉ์ - Cookie/Session, JWT, OAuth (1) | 2022.03.10 |
---|---|
AWS EC2 ์๋ฒ์ ๋๋ฉ์ธ/HTTPS/Redirection ์ ์ฉ (0) | 2022.02.17 |
AWS EC2 ์๋ฒ ๊ตฌ์ถ/ํ๊ฒฝ์ค์ + DB ์ธ๋ถ ์ ์ (0) | 2022.02.15 |
Bitnami๋ก ๋ก์ปฌ ์๋ฒ ๊ตฌ์ถ/ํฌํธํฌ์๋ฉ์ ํตํ ์ธ๋ถ ์ ์ (0) | 2022.02.14 |
Ubuntu๊ฐ ๊ฒ์ ์ปค์์์ ๋ถํ ๋์ง ์๋ ์ค๋ฅ (10) | 2022.02.11 |