# REST API
REST : ์น (HTTP) ์ ์ฅ์ ์ ํ์ฉํ ์ํคํ ์ณ
# 1. REST (REpresentational State Transfer) ๊ธฐ๋ณธ
# REST์ ์์
# Method
Method ์๋ฏธ Idempotent POST Create No GET Select Yes PUT Update Yes DELETE Delete Yes Idempotent : ํ ๋ฒ ์ํํ๋, ์ฌ๋ฌ ๋ฒ ์ํํ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋?
# Resource
- http://myweb/users์ ๊ฐ์ URI
- ๋ชจ๋ ๊ฒ์ Resource (๋ช ์ฌ)๋ก ํํํ๊ณ , ์ธ๋ถ Resource์๋ id๋ฅผ ๋ถ์
# Message
๋ฉ์์ง ํฌ๋งท์ด ์กด์ฌ
: JSON, XML ๊ณผ ๊ฐ์ ํํ๊ฐ ์์ (์ต๊ทผ์๋ JSON ์ ์)
HTTP POST, http://myweb/users/ { "users" : { "name" : "terry" } }
# REST ํน์ง
# Uniform Interface
HTTP ํ์ค๋ง ๋ง๋๋ค๋ฉด, ์ด๋ค ๊ธฐ์ ๋ ๊ฐ๋ฅํ Interface ์คํ์ผ
์) REST API ์ ์๋ฅผ HTTP + JSON๋ก ํ์๋ค๋ฉด, C, Java, Python, IOS ํ๋ซํผ ๋ฑ ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์ ๋ฐ์ง ์๊ณ , ๋ชจ๋ ํ๋ซํผ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ Loosely Coupling ๊ตฌ์กฐ
ํฌํจ
Self-Descriptive Messages
- API ๋ฉ์์ง๋ง ๋ณด๊ณ , API๋ฅผ ์ดํดํ ์ ์๋ ๊ตฌ์กฐ (Resource, Method๋ฅผ ์ด์ฉํด ๋ฌด์จ ํ์๋ฅผ ํ๋์ง ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์์)
HATEOAS(Hypermedia As The Engine Of Application State)
- Application์ ์ํ(State)๋ Hyperlink๋ฅผ ํตํด ์ ์ด๋์ด์ผ ํจ.
- ์๋ฒ๋ ํ์ฌ ์ด์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ์์ ์ ๋ํ ํ์ดํผ๋งํฌ๋ฅผ ํฌํจํ์ฌ ์๋ตํด์ผ ํจ.
Resource Identification In Requests
Resource Manipulation Through Representations
# Statelessness
์ฆ, HTTP Session๊ณผ ๊ฐ์ ์ปจํ ์คํธ ์ ์ฅ์์ ์ํ ์ ๋ณด ์ ์ฅ ์ํจ
Request๋ง Message๋ก ์ฒ๋ฆฌํ๋ฉด ๋๊ณ , ์ปจํ ์คํธ ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ฏ๋ก, ๊ตฌํ์ด ๋จ์ํด์ง.
๋ฐ๋ผ์, REST API ์คํ์ค ์คํจ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, Transaction ๋ณต๊ตฌ๋ฅผ ์ํด ๊ธฐ์กด์ ์ํ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋ค. (POST Method ์ ์ธ)
# Resource ์งํฅ ์ํคํ ์ณ (ROA : Resource Oriented Architecture)
- Resource ๊ธฐ๋ฐ์ ๋ณต์ํ ๋ช ์ฌ ํํ์ ์ ์๋ฅผ ๊ถ์ฅ.
# Client-Server Architecture
# Cache Ability
# Layered System
# Code On Demand(Optional)