Study/cs (computer science)

REST API/RESTful API Design Guide/REST ๋””์ž์ธ ํŒจํ„ด/Http Methods ๋Š” ๋ฌด์—‡์ธ๊ฐ€ #2

๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ๋””์”จ 2023. 1. 4. 14:34

 

REST์˜ ๊ฐœ๋…์„ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์ด์   REST API์˜ ๋””์ž์ธ์„ ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

REST API Design Guide

 

1) URL์— Resource๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

GET /members/1

Resource๋Š” ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋Œ€๋ฌธ์ž๋ณด๋‹ค๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•ด์•ผ ํ•˜๊ณ ,  document(๋„ํ๋จผํŠธ) ์ด๋ฆ„์œผ๋กœ๋Š” ๋‹จ์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. collection๊ณผ store์˜ ๋ช…์€ ๋ณต์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

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

Rest Http Method

์ด๋•Œ, URL์— Http Method๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ ๋œ๋‹ค. ๋˜ํ•œ URL ํ–‰์œ„์— ๋Œ€ํ•œ ๋™์‚ฌ ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ ๋œ๋‹ค. CRUD ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ URL์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿ”” ์ž˜๋ชป๋œ ์˜ˆ

GET /books/show/1

 

 

๐Ÿ”” ์ˆ˜์ • ํ›„

GET /books/1

 

2) ID๋Š” ํ•˜๋‚˜์˜ ํŠน์ • Resource๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณ ์œ  ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ””book์„ ์ƒ์„ฑํ•˜๋Š” URL ์€ POST /students ์ด๋‹ค. id๊ฐ€ 10์ธ book์„ ์‚ญ์ œํ•˜๋Š” URL์€?

DELETE /students/10

 

 

3) ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž๋Š” ๊ณ„์ธต๊ด€๊ณ„์ด๋ฉฐ, URL ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ์Šฌ๋ž˜์‹œ(/)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

https://printf-hellojudyworld.tistory.com/ โŒ

 

 

4) Resource ๊ฐ„์— ์—ฐ๊ฐ„๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•œ๋‹ค.

 

๐Ÿ”” ์†Œ์œ  'has' ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ

GET /book/{bookid}/viewers

 

 

 

Http Methods

 

1) GET : Resource๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ

์ž์›์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— safe method๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ๋งŒ์•ฝ POST, PUT์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋™์ผํ•œ API๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ ์‹œ์—๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

2) POST : ์ƒˆ๋กœ์šด Resource๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ

์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์‘๋‹ต์ฝ”๋“œ๋กœ 201๋ฅผ ๋ฐ›์•„์•ผ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ํ™•์ธํ•œ๋‹ค.

 

 

3) PUT : ์กด์žฌํ•˜๋Š” Resource๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ

Resource๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ API๋Š” ์ƒˆ๋กœ์šด Resource๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‘๋‹ต์ฝ”๋“œ ์—ญ์‹œ 201(Created)์„ ๋ฐ›์œผ๋ฉฐ ์กด์žฌํ•˜๋Š” ์ž์›์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ 200(Ok) ์ด๋‚˜ 204(No Content)๋ฅผ ๋ฐ›๋Š”๋‹ค.

 

๐Ÿ”” POST๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์›์— ์ˆ˜ํ–‰๋˜๋Š” ๋ฐ˜๋ฉด PUT์€ ๋‹จ์ผ ์ž์›์—๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

 

 

4) DELETE : Resource๋ฅผ ์‚ญ์ œํ•  ๋•Œ

DELETE ๋ฉ”์„œ๋“œ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์ž์›์„ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฏธ ์ œ๊ฑฐ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋Š” ์ƒํƒœ์ฝ”๋“œ 404(NOT FOUND)๋ฅผ ๋ฐ›๋Š”๋‹ค.

 

 

5) PATCH : Resource ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ

PUT๊ณผ ๋™์ผํ•˜๊ฒŒ Resource๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ PUT์˜ ๊ฒฝ์šฐ์—๋Š” ์™„์ „ํžˆ ์ž์›์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉฐ PATCH๋Š” ๋ถ€๋ถ„์  ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹จ, ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์„œ๋ฒ„, ์•ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ FW์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋จผ์ € ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.