Restful Api๋?
๐Restful Api๋?
RESTful API (Representational State Transfer) - ํํ ์ํ ์ ์ด
๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํคํ ์ฒ ์คํ์ผ
API(Application Programming Interface)๋?
๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์งํฉ์ ์ ๊ณตํด์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ๊ฐ์ ์ํธ์์ฉ ๋ฐ ์ ๋ณด ๊ตํ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ.
์์, ํ์, ํํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
โ REST๋
- HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์(Resource)์ ๋ช ์ํ๋ค.
- HTTP Method(POST, GET, PUT, DELETE, PATCH ๋ฑ)๋ฅผ ์ฌ์ฉํ๋ค.
- ํด๋น ์์(URI)์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
โ REST ๊ตฌ์ฑ ์์
REST๋ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง๋ก ๊ตฌ์ฑ ๋์ด์๋ค.
- ์์(Resource) : HTTP URI
- ๋ชจ๋ ์์์ ๊ณ ์ ํ id๊ฐ ์กด์ฌํ๊ณ ์ด ์์์ Server์ ์กด์ฌํ๋ค.
- ์์์ ๊ตฌ๋ณํ๋ ID๋ /lists/:list_id์ ๊ฐ์ HTTP URI๋ค
- ํ์(Verb) : HTTP Method
- HTTP ํ๋กํ ์ฝ์ Method๋ฅผ ์ฌ์ฉํ๋ค. (GET, POST, PUT, DELETE)
- ํํ (Representations) : HTTP Message PayLoad
- Client๊ฐ ์์ ์ํ์ ๋ํ ์กฐ์ ์์ฒญ์ ํ๋ฉด Server๋ ์ ์ ํ ์๋ต์ ๋ณด๋ธ๋ค.
- REST์์ ํ๋์ ์์์ JSON, XML ๋ฑ ์ฌ๋ฌ ํํ์ Representation์ผ๋ก ๋ํ๋ธ๋ค
โ REST์ ํน์ง
- Uniform (์ ๋ํผ ์ธํฐํ์ด์ค)
- Uniform Interface๋ URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์
ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ์ ๋งํ๋ค.
- Uniform Interface๋ URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์
- Stateless (๋ฌด์ํ์ฑ)
- REST๋ ๋ฌด์ํ์ฑ์ด๋ค. ์ฆ, ์์
์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅ·๊ด๋ฆฌํ์ง ์๋๋ค.
API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๊ณ
์๋ฒ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์์ผ๋ก์จ ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
- REST๋ ๋ฌด์ํ์ฑ์ด๋ค. ์ฆ, ์์
์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅ·๊ด๋ฆฌํ์ง ์๋๋ค.
- Cacheable (์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
- REST์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ HTTP๋ผ๋ ๊ธฐ์กด ์นํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ HTTP๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modifiedํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
- REST์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ HTTP๋ผ๋ ๊ธฐ์กด ์นํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
- Self-descriptiveness (์์ฒด ํํ ๊ตฌ์กฐ)
- REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํด ํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค.
- Client - Server ๊ตฌ์กฐ
- REST ์๋ฒ๋ API๋ฅผ ์ ๊ณตํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ
์คํธ(์ธ์
, ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์
์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ฐ๊ฐ์ ์ญํ ์ด ๋ช ํํ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์
ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ๋ ๋ช ํํด์ง๊ณ ์์กด์ฑ์ด ์ค์ด๋ ๋ค.
- REST ์๋ฒ๋ API๋ฅผ ์ ๊ณตํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ
์คํธ(์ธ์
, ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์
- ๊ณ์ธตํ ๊ตฌ์กฐ
- REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด์
๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
- REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด์
โ REST์ ์ฅ๋จ์
์ฅ์
- HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.
- HTTP ํ๋กํ ์ฝ์ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ํ์ฉํ ์ ์๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- Hypermedia API์ ๊ธฐ๋ณธ์ ์ถฉ์คํ ์งํค๋ฉด์ ๋ฒ์ฉ์ฑ์ ๋ณด์ฅํ๋ค.
- REST API ๋ฉ์์ง๋ฅผ ํตํด ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ณ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค ๋์์ธ์์ ์๊ธธ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ต์ํํ๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ค.
๋จ์
- ํ์ค์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์๊ฐ ํ์ํ๋ค.
- HTTP Method ํํ๊ฐ ์ ํ์ ์ด๋ค.
- ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ
์คํธํ ์ผ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด
์ฝ๊ฒ ๊ณ ์น ์ ์๋ URL๋ณด๋ค Header ์ ๋ณด์ ๊ฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ ๋ฌธ์ฑ์ด ์๊ตฌ๋๋ค.
โ REST API ์์
1. URI๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
2. ๋ง์ง๋ง์ ์ฌ๋์ (/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
3. ์ธ๋๋ฐ ๋์ ํ์ดํ์ ์ฌ์ฉํ๋ค.
Bad : http://rest.com/test_blog
Good : http://rest.com/test-blog
4. ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
Bad : http://rest.com/photo.jpg
Good : http://rest.com/photo
5. ํ์(Method)๋ฅผ ํฌํจํ์ง ์๋๋ค.
Bad : http://rest.com/delete-post/1
Good : http://rest.com/post/1
RestApi๋ ํ์ค์ด ์๊ธฐ ๋๋ฌธ์
๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋ง๊ฒ ๊ณ ๋ ค๋์ด์ผ ํ๋ค.
https://aws.amazon.com/ko/what-is/restful-api/
RESTful API๋ ๋ฌด์์ธ๊ฐ์? - RESTful API ์ค๋ช - AWS
Amazon API Gateway๋ ์ด๋ค ๊ท๋ชจ์์๋ ๊ฐ๋ฐ์๊ฐ API๋ฅผ ์์ฝ๊ฒ ์์ฑ, ๊ฒ์, ์ ์ง ๊ด๋ฆฌ, ๋ชจ๋ํฐ๋ง ๋ฐ ๋ณด์ ์ ์งํ ์ ์๋๋ก ํ๋ ์์ ๊ด๋ฆฌํ ์๋น์ค์ ๋๋ค. API Gateway๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์
aws.amazon.com