HATEOAS ๊ธฐ๋ฐ REST API
HATEOAS(Hypermedia as the engine of application state)๋ REST Application Architecture๋ฅผ ๋ค๋ฅธ Network Application Architecture์ ๊ตฌ๋ถ์ง๋ ์ค์ํ ์ ์ฝ ์กฐ๊ฑด ์ค ํ๋์ ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ๋์ ์ผ๋ก ์ ๊ณตํ๋ Hypermedia ์ ๋ณด๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. ์๋ฒ๋ ์๋ต(Response)ํ ๋ ๊ด๋ จ ๋ฆฌ์์ค ๋งํฌ๋ ๋ค์์ ์ํํ ์ ์๋ ์์ ๋งํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฌ๊ธฐ์ Hypermedia๋ ๊ฐ๋จํ ์ด์ผ๊ธฐํด์ ์ฌ์ฉ์๊ฐ ํ ์คํธ, ์ด๋ฏธ์ง, ๋์์ ๋ฐ ๊ธฐํ ๋ฏธ๋์ด๋ฅผ ํด๋ฆญํ์ฌ ์ ์น ํ์ด์ง๋ฅผ ์ฌ๋ ๊ฒ์ ๋งํฉ๋๋ค.
HATEOAS์ ์ฅ๋จ์
HATEOAS๋ฅผ ์ ์ฉํ๋ฉด ์๋ต ๋ฐ์ดํฐ์ ๊ฐ๋ ์ฑ์ด ํฅ์๋๊ณ ๋ฆฌ์์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ต ๋ฐ์ดํฐ๊ฐ ๋ฆฌ์์ค URI์ ์์กด์ฑ์ ๊ฐ๊ฒ ๋๋ฉฐ, ๊ตฌํ์ด ๋ค์ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค.
HATEOAS ์ ์ฉ ์์
GET /accounts/12345 HTTP/1.1
Host: bank.example.com
HTTP/1.1 200 OK
{
"account": {
"account_number": 12345,
"balance": {
"currency": "usd",
"value": 100.00
},
"links": {
"deposits": "/accounts/12345/deposits",
"withdrawals": "/accounts/12345/withdrawals",
"transfers": "/accounts/12345/transfers",
"close-requests": "/accounts/12345/close-requests"
}
}
}
References
https://en.wikipedia.org
https://restfulapi.net
https://sddev.tistory.com