๐Ÿšง RESTful API 2

Min-Ho Leeยท2020๋…„ 8์›” 9์ผ
1

Learn Django

๋ชฉ๋ก ๋ณด๊ธฐ
8/13
post-thumbnail

Sunday_August_9
.
.
.
์•ž์„œ ์งง๊ณ  ๊ฐ„๋žตํ•˜๊ฒŒ RESTful์— ๋Œ€ํ•ด ์ž‘์„ฑ์„ ํ–ˆ์ง€๋งŒ,
๋ฉ˜ํ† ๋‹˜์˜ ์„ธ์…˜์„ ๋“ฃ๊ณ  ๋„ˆ๋ฌด ์žฌ๋ฐŒ๊ณ  ์‰ฝ๊ฒŒ ์™€๋‹ฟ์•„์„œ ๋‹ค์‹œ ์จ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
(์‚ฌ์‹ค ๊ทธ ์ „์—๋Š” ์ž˜ ๋ชฐ๋ž์—ˆ๋‹ค ใ… )

๐Ÿ’ฐ ๋ฉ”์†Œ๋“œ & ์ž์›

url๋Š” ๋ฉ”์†Œ๋“œ(๋™์‚ฌ)์™€ ์ž์›(๋ช…์‚ฌ)๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

๋ฉ”์†Œ๋“œ(๋™์‚ฌ)๋“ค
๋ณด๊ณ  ์‹ถ์œผ๋ฉด GET
์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด POST
์‚ญ์ œํ•˜๊ณ  ์‹ถ์œผ๋ฉด DELETE
์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด PUT/PATCH (๋‘˜์˜ ์ฐจ์ด๋Š” ์•„๋ž˜์—์„œ)

url์€ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ–ฅํ•ด ๊ฐ€๋Š” ์ฃผ์†Œ์ด๋‹ค.
ํ”„๋ก ํŠธ์—์„œ ๋งŒ๋“œ๋Š” ์›นํŽ˜์ด์ง€ ๊ธฐ์ค€์ด ์•„๋‹ˆ๋ผ ๋ฆฌ์†Œ์Šค๊ธฐ์ค€์ด ๋˜์–ด์•ผํ•œ๋‹ค.
์ƒํ’ˆ์„ ๊ฑด๋“œ๋ฆฌ๋Š” ๊ฑฐ๋ฉด url์ด product๊ฐ€ ๋˜์–ด์•ผ ํ•˜๊ณ 
์‚ฌ์šฉ์ž๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด url์€ user,
๋ฆฌ๋ทฐ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด url์€ review๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ™์€ ์ž์›์„ ๊ฑด๋“œ๋ฆฌ๋Š” ์—”๋“œํฌ์ธํŠธ๋ผ๋ฉด

์ƒํ’ˆ์„ ๋‚˜์—ดํ•œ๋‹ค๋˜๊ฐ€, ์กฐ๊ฑด์„ ์ฃผ์–ด์„œ ํ•„ํ„ฐ๋ง์„ ํ•œ๋‹ค๋˜๊ฐ€, ํŠน์ • ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ํ•œ๋‹ค๋˜๊ฐ€ ๋“ฑ.

์—”๋“œํฌ์ธํŠธ๋Š” ํ•˜๋‚˜์ด๊ณ  ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ƒฅ ์ƒํ’ˆ์„ ๋ณด๋Š” url์€
get product์ด๊ณ 

์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•˜๋Š” url์€
post product์ด๋‹ค.

๋งŒ์•ฝ ์ƒํ’ˆ์„ ์ˆ˜์ •ํ•˜๋Š” url์€
put/patch product ์ด๋‹ค.
๋ฌผ๋ก  ์–ด๋–ค ์ƒํ’ˆ์„ ์ˆ˜์ •ํ• ์ง€๋Š” ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค.

put/patch product/3 (๋งŒ์•ฝ 3๋ฒˆ ์ƒํ’ˆ ์ด์—ˆ๋‹ค๋ฉด)
์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋˜ 6๋ฒˆ์˜ ์ƒํ’ˆ์„ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด
delete product/6
์ด๋ ‡๊ฒŒ ์จ์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐ™์€ product๋ผ๋Š” ์ž์›์„ ๊ฑด๋“œ๋ ธ๊ณ  ์—”๋“œํฌ์ธํŠธ๋Š” ํ•˜๋‚˜์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋งŒ์•ฝ ์–ด๋– ํ•œ ์ƒํ’ˆ์„ ๋ณด๋ ค๊ณ  ํ•œ๋‹ค๋ฉด url์€
get http://127.0.0.1:8000/product/1
์ด๋Ÿฐ์‹์„ ๋ณผํ…๋ฐ, ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ํ•ญ์ƒ 1, 2, 3... ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜๋Š” ์—†๋‹ค.

์žฅ๊ณ ์˜ urls.py์—์„œ ๊ฒฝ๋กœ๋กœ (ํ”„๋กœ์ ํŠธ urls.py์— product๋ฅผ ์ฃผ์—ˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—)
path('/1', ์ƒ๋žต),
path('/2', ์ƒ๋žต) ์ด๋ ‡๊ฒŒ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
path('/<int:product_id>', ์ƒ๋žต) ์ด๋ ‡๊ฒŒ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ˜ก ์ž˜๋ชป๋œ ์˜ˆ์‹œ

1๏ธโƒฃ

get http://127.0.0.1:8000/product/main_page_product

๋ฉ”์ธ ํŽ˜์ด์ง€์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์ •๋ณด๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด user์ •๋ณด์™€ product์˜ ์ •๋ณด๊ฐ€ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋‚˜์˜จ๋‹ค๋ฉด,
user์™€ product๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง„ ์—”๋“œํฌ์ธํŠธ 2๊ฐœ๋ฅผ ๋™์‹œ์— ํ˜ธ์ถœํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด
get http://127.0.0.1:8000/user
get http://127.0.0.1:8000/product

์ด๋ ‡๊ฒŒ 2๊ฐœ์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋™์‹œ์— ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

2๏ธโƒฃ

get http://127.0.0.1:8000/store/find_store
๋”ฑ ๋ณด๋‹ˆ๊นŒ ์–ด๋– ํ•œ store๋ฅผ ์ฐพ๊ณ ์‹ถ์€๋“ฏ ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์—์„œ ๋งํ–ˆ๋“ฏ get์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , store๋ผ๋Š” ์ž์›(๋ฆฌ์†Œ์Šค)์— ์ ‘๊ทผ์„ ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ find_store๋ผ๊ณ  ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค.

์„œ์šธ์— ์žˆ๋Š” ๋งค์žฅ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.
์ผ๋‹จ ์กฐ๊ฑด์„ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

get http://127.0.0.1:8000/store?district='seoul'
get http://127.0.0.1:8000/store?city='seoul'

๋“ฑ์œผ๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.

3๏ธโƒฃ

post http://127.0.0.1:8000/product/add_first_item_information?name='jacket'&category='dress'

์ด์ œ ๋ฌธ์ œ์ ์ด ๋ˆˆ์— ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

๋”ฑ ๋ด๋„ ์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ์— ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋“œ๋ ˆ์Šค, ์ด๋ฆ„์€ ์ž์ผ“์œผ๋กœ ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š”๊ฒƒ ๊ฐ™๋‹ค.

post http://127.0.0.1:8000/product
์ด๋ ‡๊ฒŒ ํ•œ ํ›„,
body์—๋‹ค๊ฐ€ ๋‚ด๋ถ€์— json์˜ ํ˜•ํƒœ๋กœ

{
	"name":"jacket",
    "category":"dress"
}

์ด๋ ‡๊ฒŒ ์ฃผ๋ฉด ๋œ๋‹ค.

4๏ธโƒฃ

post http://127.0.0.1:8000/store/search_store?name='๊ฐ•๋‚จ'

์ด๊ฒƒ ๋˜ํ•œ ๊ฐ•๋‚จ์— ์žˆ๋Š” ๋งค์žฅ์„ ์ฐพ๊ณ  ์‹ถ์—ˆ๋˜ ๋“ฏ ํ•˜๋‹ค.

์ผ๋‹จ ๋งค์žฅ์„ ์ฐพ์•„์„œ ๋ณด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ๋Š” post๊ฐ€ ์•„๋‹Œ get์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตณ์ด ํ•„์š”์—†๋Š” search_store๋ผ๋Š” ๋ถ€๋ถ„, ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์•ž์—์„œ store๋ผ๋Š” ๋ฆฌ์†Œ์Šค(์ž์›)์„ ์–ธ๊ธ‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €๋ ‡๊ฒŒ ๊นŒ์ง€ ์•Œ๋ ค์ค„ ํ•„์š”๋Š” ์—†๋‹ค.

๋”ฐ๋ผ์„œ ์˜ฌ๋ฐ”๋ฅธ rest๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

get http://127.0.0.1:8000/store?name=๊ฐ•๋‚จ'

๐Ÿค” Put๊ณผ Patch์˜ ์ฐจ์ด

์งง๊ณ  ๊ตต๊ฒŒ ๋๋‚ด๊ฒ ๋‹ค.

๋งŒ์•ฝ ํ‚ค ๊ฐ’์ด 3๊ฐœ๋ผ๊ณ  ๊ฐ€์ •์„ ํ•˜๋ฉด

Put์€ 3๊ฐœ์˜ ํ‚ค ๊ฐ’์„ ๋‹ค ์จ์ฃผ์–ด์•ผ ํ•˜๊ณ ,
Patch๋Š” 1๊ฐœ ์ด์ƒ์ด๋ฉด ๋œ๋‹ค.

์ฆ‰,
Put์€ ์ „์ฒด ์ˆ˜์ •์ด๊ณ ,
Patch๋Š” ์ผ๋ถ€ ์ˆ˜์ •์ด๋‹ค.

profile
๐Ÿ‡ Rabbit can take a rest, but ๐Ÿข turtle can't

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