Search
๐Ÿ“˜

DJANGO for APIs - William S. Vincent

๊ฐ€. Test

1) Model ์ƒ์„ฑ

โ€ข
Post ๋ชจ๋ธ ์ƒ์„ฑ

2) Test ์ž‘์„ฑ

โ€ข
Post Model ๋Œ€์ƒ Unit ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

๋‚˜. Build Up DRF

1) DRF ์„ค์น˜

โ€ข
๊ฐ€์ƒํ™˜๊ฒฝ ๋‚ด DRF ์„ค์น˜ ๋ช…๋ น
โ€ข
pip install djangorestframework~=3.11.0

2) urls.py

โ€ข
๊ธฐ๋Šฅ: HTTP ์š”์ฒญ ๊ฒฝ๋กœ ์„ค์ •

3) serializers.py

โ€ข
๊ธฐ๋Šฅ: Model์˜ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”

4) views.py

โ€ข
๊ธฐ๋Šฅ: ๊ฐ๊ฐ์˜ API end-point์— ๋Œ€ํ•ด ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ์ ์šฉ

๋‹ค. Permissions

1) View Level

โ€ข
๊ธฐ๋Šฅ: API ๊ฐ๊ฐ์— ๋Œ€ํ•œ permission ์„ค์ •

2) Project Level

โ€ข
๊ธฐ๋Šฅ: ๋ชจ๋“  API์— ๋Œ€ํ•œ default permission ์„ค์ •

3) Custom

โ€ข
๊ธฐ๋Šฅ: ํŠน์ • API์˜ business logic์— ๋”ฐ๋ผ permission ์„ค์ •
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ Post ์ž‘์„ฑ์ž์™€ ์„œ๋น„์Šค ๋กœ๊ทธ์ธ ์œ ์ €๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋งŒ Post ์ž์›์— ๋Œ€ํ•ด ๊ฐฑ์‹  ๊ฐ€๋Šฅ
โ†’ ๋‹จ, Post ์ž‘์„ฑ์ž์™€ ์„œ๋น„์Šค ๋กœ๊ทธ์ธ ์œ ์ €๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ Post ์ž์›์— ๋Œ€ํ•œ ์กฐํšŒ ๊ฐ€๋Šฅ

๋ผ. User Authentication

1) Token ์ ์šฉ

2) DRF built-in ํ† ํฐ ์„ค์ • ํŠน์ง•

โ€ข
ํ† ํฐ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„ ๋ฏธ์„ค์ •
โ†’ ๋ณด์•ˆ ์ƒ ์ทจ์•ฝํ•˜๋ฏ€๋กœ ํ† ํฐ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ž‘์—… ํ•„์š”
โ€ข
์‚ฌ์šฉ ํ™˜๊ฒฝ์— ๊ด€๊ณ„ ์—†์ด ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•˜๋‚˜์˜ ํ† ํฐ ๋ฐœํ–‰
โ†’ web ํ™˜๊ฒฝ์˜ ํ† ํฐ ๋‚ด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉด mobile ํ™˜๊ฒฝ์˜ ํ† ํฐ ๋‚ด ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ํ•ด๋‹น ์ •๋ณด์˜ ์œ ์ง€์™€ ๊ฐฑ์‹  ์ด์Šˆ ๋ฐœ์ƒ

3) JWT ์‚ฌ์šฉ ๊ถŒ์žฅ

โ€ข
DRF built-in ํ† ํฐ ์„ค์ • ๋ณด์™„
โ†’ ํ† ํฐ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„ ์„ค์ • ๊ฐ€๋Šฅ
โ†’ ์•”ํ˜ธํ™”ํ•˜์—ฌ HTTP ์ „์†ก ๊ฐ„ ๋ณด์•ˆ์„ฑ ํ–ฅ์ƒ
โ†’ ํ† ํฐ์˜ ์œ ์ผ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐœํ–‰ ๋ฐฉ์‹

๋งˆ. Viewsets & Routers

1) Viewsets

โ€ข
๋ณต์ˆ˜์˜ ์—ฐ๊ด€๋œ view์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ์ถ”์ƒํ™”
โ†’ CRUD ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ณต์ˆ˜์˜ view๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ณ‘ํ•ฉ

2) Routers

โ€ข
Viewsets์œผ๋กœ ์ •์˜๋œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด HTTP Request Convention์— ๋”ฐ๋ผ Request URL ์ž๋™ ๋งค์นญ
โ€ข
(์›์ธ๋ฏธ์ƒ) users์˜ router.register ์ฝ”๋“œ์™€ posts์˜ ๋™์ผ ์ฝ”๋“œ์˜ ์œ„์น˜์™€ ๋ฐ”๋€Œ๋ฉด '~/users' GET ์š”์ฒญ์— ๋Œ€ํ•ด 404 ์—๋Ÿฌ ๋ฐœ์ƒ

3) Post ์ ์šฉ

4) User ์ ์šฉ

๋ฐ”. Schemas & Documentation

1) Schemas package

โ€ข
Schema: machine-readableํ•œ Document๋กœ ๋ชจ๋“  API endpoint์— ๋Œ€ํ•œ outline ์ œ๊ณต
โ€ข
์‚ฌ์ „ ์ค€๋น„: pyyaml, uritemplate package ์„ค์น˜ ํ•„์š”

2) Documentation package

โ€ข
Document: Schema๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ human-readableํ•œ Document๋กœ ๋ฐ”๊พผ ๊ฒƒ
โ€ข
๋ฐฐํฌ ์‹œ ์ฃผ์˜์‚ฌํ•ญ
โ†’ static file์„ cloud storage์— ์˜ฌ๋ ค๋‘๊ณ  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—… ํ•„์š”
โ†’ Django์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด๋ฐฐํฌํ™˜๊ฒฝ์„ค์ •์— ์ •์˜๋œ storage ๊ณ„์ •์œผ๋กœ static file์„ ์—…๋กœ๋“œ ํ•„์š”
ex) python manage.py collectstatic --settings=backend.settings.prod
โ€ข
์‚ฌ์ „ ์ค€๋น„
โ†’ uritemplate, drf_yasg pakcage ์„ค์น˜ ํ•„์š”
โ†’ INSTALLED_APPS ์— drf_yasg ์ถ”๊ฐ€ ํ•„์š”

Reference

โ€ข
Blog API Cloning, DJANGO for APIs(William S. Vincent)
โ€ข
์ฐธ๊ณ  ์ฝ”๋“œ ์ „์ฒด, https://github.com/MJbae/drf-practice/