Skip to content

Latest commit

ย 

History

History
131 lines (79 loc) ยท 5.44 KB

File metadata and controls

131 lines (79 loc) ยท 5.44 KB

Rest API

๐Ÿค” What is Rest API?


REST๋Š” REpresentational State Transfer ์˜ ์•ฝ์ž๋กœ ์›น์ด HTTP๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์„ ๋ณด๊ณ  HTTP์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ REST๋ฅผ ์†Œ๊ฐœํ–ˆ๊ณ  ์ด๋Š” HTTPํ”„๋กœํ† ์ฝœ์˜ ์˜๋„์— ๋งž๊ฒŒ ๋””์ž์ธํ•˜๋„๋ก ์œ ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ REST ๊ธฐ๋ณธ ์›์น™์„ ์„ฑ์‹คํžˆ ์ง€ํ‚จ ์„œ๋น„์Šค ๋””์ž์ธ์„ RESTful ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

์˜ˆ๋ฅผ ๋“ค์–ด, โ€˜REST APIโ€™๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ โ€˜RESTfulโ€™ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด

REST๋Š” HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method๋ฅผ ํ†ตํ•ด Resource๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ์•„ํ‚คํ…์ณ ์ด๊ณ ,

REST API๋Š” REST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค!!


๐Ÿ˜ฎ REST์˜ ํŠน์ง•


  1. Uniform(์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)

    : URI๋กœ ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์กฐ์ง์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ

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

    : ์ž‘์—…์„ ์œ„ํ•œ ์ƒํƒœ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ธ์…˜, ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— API ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ ๋‹จ์ˆœํžˆ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง‘๋‹ˆ๋‹ค.

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

    : REST๋Š” HTTP๋ผ๋Š” ๊ธฐ์กด ์›นํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ HTTP๊ฐ€ ๊ฐ€์ง„ ์บ์‹ฑ ๊ธฐ๋Šฅ์ด ์ ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” Last-Modifiedํƒœ๊ทธ๋‚˜ E-Tag๋ฅผ ์ด์šฉํ•˜๋ฉด ์บ์‹ฑ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  4. Self-descriptiveness (์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ)

    : REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  5. Client - Server ๊ตฌ์กฐ

    : REST ์„œ๋ฒ„๋Š” API ์ œ๊ณต, ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์ปจํ…์ŠคํŠธ(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด)๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ํ™•์‹คํžˆ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด ๋ช…ํ™•ํ•ด์ง€๊ณ  ์„œ๋กœ๊ฐ„ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  6. ๊ณ„์ธตํ˜• ๊ตฌ์กฐ : REST ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ด ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ  PROXY, ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ˜ฎ REST API์˜ ๊ตฌ์„ฑ


REST API๋Š” Resource(์ž์›), Verb(ํ–‰์œ„), Representation(ํ‘œํ˜„) ์˜ ์„ธ๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. REST๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด REST API๋งŒ์œผ๋กœ๋„ HTTP๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

REST API ๊ตฌ์„ฑ


๐Ÿ’ก ์—ฌ๊ธฐ์„œ payload ๋ž€?

์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก ํ• ๋•Œ๋Š” ํ—ค๋”, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์—๋Ÿฌ ์ฒดํฌ ๋น„ํŠธ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์„ ํ•จ๊ป˜ ๋ณด๋‚ด์„œ, ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ํšจ์œจ๊ณผ ์•ˆ์ „์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.์ด ๋•Œ ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ๋ฐ”๋กœ payload์ž…๋‹ˆ๋‹ค!

json ์—์„œ์˜ payload๋Š” "data"

{
	"status" :
	"from": "localhost",
	"to": "http://melonicedlatte.com/chatroom/1",
	"method": "GET",

  //payload
	"data":{ "message" : "There is a cutty dog!" }
}

๐Ÿ˜ฎ REST API ์„ค๊ณ„ ์›์น™


๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์€ ๋‘๊ฐ€์ง€๋กœ, URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ ํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•˜๊ณ  ํ–‰์œ„์— ๋Œ€ํ•œ ์ •์˜๋Š” HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ•˜๋Š” ๊ฒƒ์ด RESTful API๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ค‘์‹ฌ ๊ทœ์น™์ž…๋‹ˆ๋‹ค!


  1. URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค!

    : ๋ฆฌ์†Œ์Šค ํ‘œํ˜„ ์— ์ค‘์ ์„ ๋‘๊ณ  ๋ช…์‚ฌ ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฆ„์— get ๊ฐ™์€ ํ–‰์œ„์— ๋Œ€ํ•œ ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค!

    //bad
    GET / getTodos / 1;
    GET / todos / show / 1;
    
    //good
    GET / todos / 1;

  2. ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP์š”์ฒญ ๋ฉ”์„œ๋“œ๋กœ ํ‘œํ˜„ํ•œ๋‹ค!

    : HTTP์š”์ฒญ ๋ฉ”์„œ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์˜ ์ข…๋ฅ˜์™€ ๋ชฉ์ (๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„)์„ ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์“ฐ์ด๋Š” ์š”์ฒญ ๋ฉ”์„œ๋“œ 5๊ฐ€์ง€(GET, POST, PUT, PATCH, DELETE)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค

    ์š”์ฒญ๋ฉ”์„œ๋“œ์ข…๋ฅ˜

    : ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•˜๋ฉฐ URI์— ํ‘œํ˜„ํ•˜์ง€ ์•Š์•„์š”!

    //bad
    GET /todos/delete/1
    
    //good
     DELETE /todos/1

    ์š”์ฒญ method์— ๋”ฐ๋ฅธ ์‹ค์Šต์€ C:\Users\wjdal\Documents\json-server-exam ํŒŒ์ผ ์ฐธ๊ณ !

[์ฐธ๊ณ ]

: ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

: https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

: https://meetup.toast.com/posts/92