๐Ÿฆ๋ฉ‹์Ÿ์ด ์‚ฌ์ž์ฒ˜๋Ÿผ 11๊ธฐ/๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ Django Rest Framework

Chapter5 ์—ฐ์Šต ํ”„๋กœ์ ํŠธ : Todo ๋ชฉ๋ก API ๋งŒ๋“ค๊ธฐ

1son 2023. 5. 2. 15:59

5.1 Todo ๋ชฉ๋ก API ์‹œ์ž‘ํ•˜๊ธฐ

5.2 Todo ์ „์ฒด ์กฐํšŒ API ๋งŒ๋“ค๊ธฐ

5.3 Todo ์ƒ์„ธ ์กฐํšŒ API ๋งŒ๋“ค๊ธฐ

5.4 Todo ์ƒ์„ฑ API ๋งŒ๋“ค๊ธฐ

5.5 Todo ์ˆ˜์ • API ๋งŒ๋“ค๊ธฐ

5.6 Todo ์™„๋ฃŒ API ๋งŒ๋“ค๊ธฐ

 

5.1 Todo ๋ชฉ๋ก API ์‹œ์ž‘ํ•˜๊ธฐ

DRF๋ฅผ ํ™œ์šฉํ•ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ํ”„๋กœ์ ํŠธ๋Š” Todo ๋ชฉ๋ก ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค. 

 

5.1.1 Django ๊ธฐ๋ฐ˜ Todo ๋ชฉ๋ก ์›น ์„œ๋น„์Šค ๋ณต์Šต

์šฐ๋ฆฌ๊ฐ€ ์•ž์ „์— ํ–ˆ๋˜ Todo ์„œ๋น„์Šค๋Š” ์™„๋ฃŒ๋˜์ง€ ์•Š์€ Todo์™€ ์™„๋ฃŒ๋œ ๊ฒƒ์„ ๋‚˜๋ˆ ์„œ ๋ชฉ๋ก์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ณ , Todo์— ๋Œ€ํ•œ ๋ชฉ๋ก ๋ฐ ์ƒ์„ธ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ์ˆ˜์ • ๊ธฐ๋Šฅ๋„ ์žˆ์—ˆ๊ณ , Todo๋ฅผ ์™„๋ฃŒ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

์ด์ œ ์šฐ๋ฆฌ๋Š” Todo ์„œ๋น„์Šค๋ฅผ ํ”„๋ก ํŠธ ์˜์—ญ๊ณผ ๋ถ„๋ฆฌ์‹œ์ผœ,

API์˜ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. โญ๏ธ

 

5.1.2 ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

๊ฐ€์ƒํ™˜๊ฒฝ ์„ธํŒ…

django-admin startproject mytodo .

 

5.1.4 Todo ๋ชจ๋ธ ์ƒ์„ฑํ•˜๊ธฐ

๋ชจ๋ธ์€ ์•ž์„œ ๊ฐœ๋ฐœํ•œ Todo ์„œ๋น„์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. 

๊ฐœ๋ฐœ๋˜๋Š” ํ˜•ํƒœ๋งŒ ๋‹ฌ๋ผ์กŒ์„ ๋ฟ, ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์•ž์„œ ์ž‘์„ฑํ•œ ๋ชจ๋ธ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

5.2 Todo ์ „์ฒด ์กฐํšŒ API ๋งŒ๋“ค๊ธฐ

Todo ์ „์ฒด ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

5.2.1 Todo ์ „์ฒด ์กฐํšŒ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๋งŒ๋“ค๊ธฐ

DRF ๊ฐœ๋ฐœ์˜ ์ฒซ ๋‹จ๊ณ„๋Š”?

-> ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค.

์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” ์•ž์—์„œ ๋ดฃ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ, 

๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๊ณ , ๋ฐ›๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ์–‘์‹์ž…๋‹ˆ๋‹ค. 

 

๋”ฐ๋ผ์„œ ๋ณด๋‚ด๊ณ  ๋ฐ›๋Š” ํ˜•ํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๊ฐ€ ํ•„์š” ํ•ฉ๋‹ˆ๋‹ค. 

 

์ฒซ ๋ฒˆ์งธ๋กœ ๊ฐœ๋ฐœํ•  ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” ์ „์ฒด ์กฐํšŒ์šฉ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์ธ๋ฐ, 

 

์ „์ฒด ์กฐํšŒ์—์„œ๋Š” Todo ์„ค๋ช…์„ ์ œ์™ธํ•œ

์ œ๋ชฉ, ์™„๋ฃŒ ์—ฌ๋ถ€, ์ค‘์š” ์—ฌ๋ถ€๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์ด๋“ค๋งŒ์„ ํฌํ•จํ•œ ๊ฐ„๋‹จํ•œ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

serializers.ModelSerializer๋ฅผ ํ™œ์šฉํ•ด(๋งค๊ฐœ๋ณ€์ˆ˜๋กœ)

๊ฐ„๋‹จํžˆ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ์™„์„ฑํ–ˆ์œผ๋ฉฐ, 

TodoSimpleSerializer๋ผ๊ณ  ์ด๋ฆ„ ๋ถ™์˜€์Šต๋‹ˆ๋‹ค. 

TodoSimpleSerializer๋Š” Todo ๋ชจ๋ธ์˜ id, title, complete, important ํ•„๋“œ๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ณ  ์—ญ์ง๋ ฌํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Todo ๋ชจ๋ธ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ Todo ๋ชจ๋ธ์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Todo ์ „์ฒด ์กฐํšŒ ๋ทฐ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ์€ ๋ทฐ ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Todo ์™„๋ฃŒ ๋ฐ ์กฐํšŒ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

ViewSet๋ณด๋‹จ APIView๋ฅผ ํ™œ์šฉํ•ด ํ•œ๋•€ ํ•œ๋•€

์ง์ ‘ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

์ „์ฒด ์กฐํšŒ ๋ทฐ๋Š” GET๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ TodosAPIView๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ 

๋‚ด๋ถ€์˜ get ๋ฉ”์†Œ๋“œ์—์„œ complete์ด False์ธ Todo๋“ค์„ ํ•„ํ„ฐ๋งํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

 

์ดํ›„ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ํ†ต๊ณผ์‹œ์ผœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ,

์ด๋ฅผ Response ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด ์ฝ”๋“œ๋Š” ํ•  ์ผ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ค๋Š” ๋‹จ์ˆœํ•œ API ๋ทฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น API ์—”๋“œํฌ์ธํŠธ๋กœ GET ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๋ฏธ์™„๋ฃŒ๋œ ํ•  ์ผ๋“ค์˜ ๋ชฉ๋ก์„ JSON ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

5.2.3 Todo ์ „์ฒด ์กฐํšŒ URL ์—ฐ๊ฒฐํ•˜๊ธฐ 

์ด์ œ URL๋งŒ ์—ฐ๊ฒฐํ•˜๋ฉด ๋†€๋ž๊ฒŒ๋„ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 

TodosAPIView ํด๋ž˜์Šค๋Š” todo/์— ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ดํ›„ ๊ฐœ๋ฐœํ•  ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋„ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

5.2.4 Todo ์ „์ฒด ์กฐํšŒ API ํ…Œ์ŠคํŠธํ•˜๊ธฐ 

 

๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€ ๋ฏธ๋ฆฌ Todo๋ฅผ ์ถ”๊ฐ€ํ•ด๋†“์Šต๋‹ˆ๋‹ค. 

๋Œ€๋žต ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

-> ์ฑ…์— ์—†๋Š” ๋ถ€๋ถ„... ํ•˜ใ…ใ…ใ…ใ…

-> ๋นผ๋จน์œผ๋ฉด 404์—๋Ÿฌ๊ฐ€ ๋‚˜๋‹ˆ ์ฃผ์˜

 

์•ž์„œ ์‚ฌ์šฉํ–ˆ๋˜ Insomnia ๋„๊ตฌ๋ฅผ ์ผœ์„œ API ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

GET์š”์ฒญ์œผ๋กœ 127.0.0.1:8000/todo/์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

5.3 Todo ์ƒ์„ธ ์กฐํšŒ API๋งŒ๋“ค๊ธฐ

Todo ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

5.3.1 ์ƒ์„ธ ์กฐํšŒ์šฉ Todo ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ์—๋Š” Todo ์ƒ์„ธ ์กฐํšŒ์šฉ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ์ž…๋‹ˆ๋‹ค. 

์•ž์„œ ๊ฐœ๋ฐœํ•œ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๊ฐ€ TodoSimpleSerializer์˜€์œผ๋‹ˆ

์ด๋ฒˆ์—๋Š” TodoDetailSerializer๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

ํ•„๋“œ๋Š” Todo ๋ชจ๋ธ์˜ ๋ชจ๋“  ํ•„๋“œ๋กœ ์„ค์ •ํ•˜๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

5.3.2 Todo ์ƒ์„ธ ์กฐํšŒ ๋ทฐ ๋งŒ๋“ค๊ธฐ

์ƒ์„ธ ์กฐํšŒ ๋ทฐ ์—ญ์‹œ GET๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. 

์ „์ฒด ์กฐํšŒ(TodoAPIView)์™€๋Š” ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ URL์„ ๋ถ„๋ฆฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค. 

: ๊ฐ™์€ ํด๋ž˜์Šค -> ๊ฐ™์€ URL

get_object_or_404() ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ๋ชจ๋ธ(Todo)์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด(id=pk)์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 404 ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ฝ”๋“œ๋Š” pk์— ํ•ด๋‹นํ•˜๋Š” Todo ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
TodoDetailSerializer๋Š” todo ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์ž…๋‹ˆ๋‹ค. ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” Python ๊ฐ์ฒด๋ฅผ JSON ๋“ฑ์˜ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ JSON ๋“ฑ์˜ ํ˜•์‹์„ Python ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. serializer.data๋Š” todo ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

5.3.3 Todo ์ƒ์„ธ ์กฐํšŒ URL ์—ฐ๊ฒฐํ•˜๊ธฐ

TodoAPIView๋Š” ํŠน์ • Todo์˜ id๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฏ€๋กœ -> PK

todo// ์ฃผ์†Œ์— TodoAPIVIEW๋ฅผ ํ• ๋‹นํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

5.3.4 Todo ์ƒ์„ธ ์กฐํšŒ API ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ

์ด๋ฒˆ์—๋„ GET์š”์ฒญ์„ ๋ณด๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

5.4 Todo ์ƒ์„ฑ API ๋งŒ๋“ค๊ธฐ

Todo ์ƒ์„ฑ API๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

5.4.1 ์ƒ์„ฑ์šฉ Todo ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๋งŒ๋“ค๊ธฐ

Todo ์ƒ์„ฑ์— ํ•„์š”ํ•œ ์ž…๋ ฅ ๊ฐ’์€ title๊ณผ description, important ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ํ•„๋“œ๋Š” ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

TodoCreateSerializer์—๋Š” 3๊ฐœ์˜ ํ•„๋“œ๋งŒ ์ž‘์„ฑํ•ด๋†“์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

 

5.4.2 Todo ์ƒ์„ฑ ๋ทฐ ๋งŒ๋“ค๊ธฐ

Todo ์ƒ์„ฑ์€ /todo URL์—์„œ ๋™์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

ํŠน์ • Todo ์˜ id๊ฐ€ ํ•„์š”์—†๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

๋”ฐ๋ผ์„œ Todo ์ƒ์„ฑ ๋ทฐ๋Š” TodosAPIView ํด๋ž˜์Šค ๋‚ด์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

Todo ์ƒ์„ฑ์€ POST ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•˜๋„๋ก ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from rest_framework import status
from rest_framework.generics import get_object_or_404
from rest_framework.response import Response
from rest_framework.views import APIView

from rest_framework import viewsets

from .models import Todo
from .serializers import TodoSimpleSerializer, TodoDetailSerializer, TodoCreateSerializer


class TodosAPIView(APIView):
    def get(self, request):
        todos = Todo.objects.filter(complete=False)
        serializer = TodoSimpleSerializer(todos, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        serializer = TodoCreateSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

 

 

5.4.3 Todo ์ƒ์„ฑ URL ์—ฐ๊ฒฐํ•˜๊ธฐ

์•ž์„œ TodosAPIView์— ๋Œ€ํ•œ URL์„ ํ• ๋‹นํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ž‘์—…์€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

-> ๊ทธ๋Œ€๋กœ 

 

 

5.4.4 Todo ์ƒ์„ฑ API ํ…Œ์ŠคํŠธํ•˜๊ธฐ 

์ƒ์„ฑ API ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด POST ์š”์ฒญ์œผ๋กœ 127.0.0.1:8000/todo/์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉฐ,

Body์—๋Š” JSON ํ˜•ํƒœ๋กœ ๊ฐ’์„ ์ฑ„์›Œ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” title, description ๊ทธ๋ฆฌ๊ณ  ํ•„์š”์— ๋”ฐ๋ผ important๋งŒ ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

์ƒ์„ฑ์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ ์ „์ฒด ์กฐํšŒ API๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ์ „์ฒด ์กฐํšŒ๊ฐ€ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

5.5 Todo ์ˆ˜์ • API ๋งŒ๋“ค๊ธฐ 

 

Todo ์ˆ˜์ • API๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

5.5.1 Todo ์ˆ˜์ • ๋ทฐ ๋งŒ๋“ค๊ธฐ

Todo ์ˆ˜์ • API๋Š” ์•ž์„œ ์ž‘์„ฑํ•œ Todo ์ƒ์„ฑ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. 

๋™์ผํ•œ ํ•„๋“œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋„ ๋”ฐ๋กœ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด TodoCreateSerializer๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  Todo ์ˆ˜์ •์€ ํŠน์ • Todo์— ๋Œ€ํ•ด ์ด๋ค„์ง€๋ฏ€๋กœ TodoAPIView ํด๋ž˜์Šค์— ํฌํ•จ์‹œํ‚ค๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

from rest_framework import status
from rest_framework.generics import get_object_or_404
from rest_framework.response import Response
from rest_framework.views import APIView

from rest_framework import viewsets

from .models import Todo
from .serializers import TodoSimpleSerializer, TodoDetailSerializer, TodoCreateSerializer

class TodoAPIView(APIView):
    def get(self, request, pk):
        todo = get_object_or_404(Todo, id=pk)
        serializer = TodoDetailSerializer(todo)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def put(self, request, pk):
        todo = get_object_or_404(Todo, id=pk)
        serializer = TodoCreateSerializer(todo, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

์ˆ˜์ • ๊ธฐ๋Šฅ์€ put ๋ฉ”์†Œ๋“œ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

ํŠน์ • Todo๋ฅผ ์ฐพ์•„์„œ ์š”์ฒญ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์— ํ†ต๊ณผ์‹œ์ผœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

 

 

5.5.2 Todo ์ˆ˜์ • URL ์—ฐ๊ฒฐํ•˜๊ธฐ

์—ญ์‹œ TodoAPIView๋Š” ์ด๋ฏธ URL์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ์—ฐ๊ฒฐ์ž‘์—…์€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. 

-> ์ด์ „ ์ฝ”๋“œ์™€ ๋™์ผ

 

 

5.5.3 Todo ์ˆ˜์ • API ํ…Œ์ŠคํŠธํ•˜๊ธฐ 

์ˆ˜์ •ํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๋†‰๋‹ˆ๋‹ค. 

์ˆ˜์ •์ด ์ž˜ ๋œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

5.6 Todo ์™„๋ฃŒ API ๋งŒ๋“ค๊ธฐ

 

๋งˆ์ง€๋ง‰์œผ๋กœ Todo ์™„๋ฃŒ API๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

5.6.1 Todo ์™„๋ฃŒ ๋ทฐ ๋งŒ๋“ค๊ธฐ

Todo ์™„๋ฃŒ ๊ธฐ๋Šฅ๋งŒ ๊ฐœ๋ฐœํ•˜๋ฉด Todo ํ”„๋กœ์ ํŠธ๋„ ๋งˆ๋ฌด๋ฆฌ ๋ฉ๋‹ˆ๋‹ค. 

Todo ์™„๋ฃŒ API๋Š” ๋ณ„๋„์˜ ํด๋ž˜์Šค์— ์ž‘์„ฑํ•  ๊ฒƒ ์ด๋ฉฐ, 

 

์—ญ์‹œ ์™„๋ฃŒ ๋ชฉ๋ก ์กฐํšŒ์šฉ API์™€

ํŠน์ • Todo ์™„๋ฃŒ API๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ฐ API๋Š” Todo id ํ•„์š” ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋ฒˆ๊ฑฐ๋กญ์ง€๋งŒ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๋‹ค์Œ์€ ์™„๋ฃŒ Todo๋ชฉ๋ก ์กฐํšŒ์šฉ API์ž…๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” GET ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ์™„๋ฃŒ๋œ ํ•  ์ผ ๊ฐ์ฒด๋“ค์„ ์ง๋ ฌํ™”ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ JSON ํ˜•์‹์˜ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์€ HTTP ์ƒํƒœ ์ฝ”๋“œ 200(์„ฑ๊ณต)๊ณผ ํ•จ๊ป˜ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

 

 

 

5.6.2 Todo ์™„๋ฃŒ ์กฐํšŒ ๋ทฐ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ์€ Todo ์™„๋ฃŒ API์˜ ๋ทฐ ์ž…๋‹ˆ๋‹ค.

 

5.6.3 Todo ์™„๋ฃŒ URL ์—ฐ๊ฒฐํ•˜๊ธฐ 

 

5.6.4 Todo ์™„๋ฃŒ API ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ 

์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๊ธฐ์กด์— ์žˆ๋˜ Done ๋ชฉ๋ก์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

chapter5 ๋งˆ์นฉ๋‹ˆ๋‹ค.