[WEB] REST API

yayaya_hojinยท2024๋…„ 2์›” 1์ผ

WEB

๋ชฉ๋ก ๋ณด๊ธฐ
12/16
post-thumbnail

๐Ÿ“ REST

rest_img

REST(Representational State Transfer) - ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ

  • HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œ

  • HTTP Method๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

๐Ÿ’ก CRUD Operation์ด๋ž€?
- Create : ์ƒ์„ฑ POST
- Read : ์กฐํšŒ GET
- Update : ์ˆ˜์ • PUT
- Delete : ์‚ญ์ œ DELETE

โš™๏ธ REST์˜ ๊ตฌ์„ฑ

1) ์ž์›(Resource) - HTTP URI

  • ๋ชจ๋“  ์ž์›์— ๊ณ ์œ  ID๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ž์›์€ ์„œ๋ฒ„์— ์กด์žฌํ•œ๋‹ค.

2) ํ–‰์œ„(Verb) - HTTP Method

  • HTTP Protocol์˜ Method(POST, GET, PUT, DELETE)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

3) ํ‘œํ˜„(Representation)

  • Client๊ฐ€ ์ž์›์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด Server๋Š” ์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.

๐Ÿช„ REST์˜ ์›์น™

1) ๊ท ์ผ ์ธํ„ฐํŽ˜์ด์Šค(Uniform Interface)

  • HTTP ํ‘œ์ค€๋งŒ ๋”ฐ๋ฅด๋ฉด ์–ด๋А๊ณณ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

2) ๋ฌด์ƒํƒœ(Stateless)

  • REST๋Š” HTTP Protocol๊ณผ ์—ญ์‹œ ๋ฌด์ƒํƒœ์„ฑ์„ ๊ฐ–๋Š”๋‹ค.

  • ์„œ๋ฒ„๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š” ์—†์ด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋“ค์–ด์˜จ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‘๋‹ต์„ ํ•œ๋‹ค.

3) ๊ณ„์ธต ๊ตฌ์กฐ(Layer System)

  • Client๋Š” REST API Server๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.

  • REST Server๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋•Œ Client๋Š” ์–ด๋–ค Server์™€ ํ†ต์‹ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

4) ์บ์‹œ ๊ฐ€๋Šฅ(Cacheable)

  • HTTP ํ‘œ์ค€์„ ์‚ฌ์šฉํ•จ์œผ๋กœ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด์— ๋Œ€ํ•ด ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

5) Server-Client

  • ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณณ์„ Server, ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๊ณณ์„ Client๋กœ ํ•˜์—ฌ ๊ฐ์ž์˜ ์—ญํ• ์„ ๊ตฌ๋ถ„์‹œ์ผœ ์˜์กด์„ฑ์„ ์ค„์ธ๋‹ค.

๐Ÿ“‘ REST API

api_img

API(Application Programming Interface) - ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™

๐Ÿ’ฅ REST API๋ž€ REST์˜ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ

โ— REST API ์„ค๊ณ„ ๊ทœ์น™

1) URI๋Š” ์ •๋ณด์™€ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

2) ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method(POST, GET, PUT, DELETE)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

๐Ÿช„ REST API ์„ค๊ณ„ ๊ฐ€์ด๋“œ

  • URI๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    GET /members (O)
    GET /delete (X)

  • /๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
    GET /members/list (O)

  • URI์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— /๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
    GET /members/1/ (X)
    GET /members/1 (O)

  • _๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , -๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    GET /members/list_1 (X)
    GET /members/list-1 (O)

  • URI๋Š” ์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑํ•œ๋‹ค.
    GET /Members/List (X)
    GET /members/list (O)

  • HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    EX) HTTP Status 200 (Ok)
    HTTP Status 404 (Not Found)

  • ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.(Accept-header๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.)
    http://example.com/members/list/photo.png (X)
    http://example.com/members/list/photo (O)

โœ… RESTful

ful_img

RESTful๋ž€ REST์˜ ์›์น™์„ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ์„ ์ผ์ปท๋Š” ๋‹จ์–ด๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ‘Š RESTful ๋ชฉ์ 

  • ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด REST API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด RESTful์˜ ๋ชฉ์ ์ด๋‹ค.

  • ์ด๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ดˆ์ ์„ ๋งž์ถ˜ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ดํ•ด๋„ ๋ฐ ํ˜ธํ™˜์„ฑ์— ์ดˆ์ ์„ ๋งž์ถ˜ ๊ฒƒ์ด๋ผ ํ•ญ์ƒ RESTfulํ•œ API๋ฅผ ๊ณ ์ง‘ํ•  ํ•„์š”๋Š” ์—†๋‹ค.

โŒ RESTful ํ•˜์ง€ ๋ชปํ•˜๋‹ค?

  • CRUD ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ POST๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” API

  • REST API์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์–ด๊ธฐ๋Š” ๊ฒฝ์šฐ

0๊ฐœ์˜ ๋Œ“๊ธ€