๐Ÿ”ฅRESTful API์™€ ์นœํ•ด์ง€๊ธฐ

yeeun leeยท2020๋…„ 4์›” 9์ผ
0

Django๋ฅผ ๋ฐฐ์šฐ๊ณ  ์žˆ์ง€๋งŒ ์•„์ง๋„ API๊ฐ€ ๋ญ”์ง€, ๊ทธ ์ค‘์—์„œ๋„ RESTful API๊ฐ€ ๋ญ”์ง€ ์ •์ฒด๋ฅผ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๋‹ค.

์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ์ผ๋‹จ ๋‚ด์šฉ์„ ์˜ฎ๊ฒจ๋†“๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์‚ด์„ ๋ถ™์—ฌ์•ผ๊ฒ ๋‹ค. ์•ˆ ์“ฐ๋ฉด ์•„์˜ˆ ์—†๋˜ ๊ฒƒ์ด ๋˜๋ฏ€๋กœ ๐Ÿ™„

0. ๋ฐฐ๊ฒฝ์ง€์‹

URI

Uniform Resource Identifier. ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ ํŠน์ • ์ž์›์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ์ผํ•œ ์ฃผ์†Œ. ์ฒ˜์Œ์— url์˜ ์˜คํƒ€์ธ ์ค„ ์•Œ์•˜๋‹ค... ^^!

  • /login, /news
  • finance.naver.com/marketindex/

HTTP Method

HTTP request๊ฐ€ ์˜๋„ํ•˜๋Š” action์„ ์ •์˜ํ•œ๊ฒƒ. POST, GET ๋“ฑ๋“ฑ.

Payload

HTTP request์—์„œ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ (body)

API

Application Programming Interface, ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค. ์ฆ‰ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก, ์šด์˜ ์ฒด์ œ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋œปํ•œ๋‹ค.

ํ˜„์žฌ ์›นํŽ˜์ด์ง€ ๊ฐœ๋ฐœ์„ ๋ฐฐ์šฐ๊ณ  ์žˆ์œผ๋‹ˆ ์›น API๋กœ ํ•œ์ •ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, ์›น API๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ๋‹ค๋ฅธ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ •์˜๋œ ๋ช…์„ธ๋ฅผ ๋งํ•œ๋‹ค. ๋ธ”๋กœ๊ทธ API, ์ง€๋„ API ๋“ฑ ํ™ˆํŽ˜์ด์ง€ ๊ตฌ์ถ•์ด๋‚˜ ๊ฐœํŽธ ์‹œ ์ถ”๊ฐ€ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์•„๋„ ์˜คํ”ˆ API๋ฅผ ๊ฐ€์ ธ์™€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

1. REST?

REpresentational State Transfer์˜ ์ค„์ž„๋ง์ด๋‹ค. ์›น์ƒ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋ฅผ HTTP URI๋กœ ํ‘œํ˜„ํ•˜๊ณ  ๊ทธ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ HTTP Method๋กœ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹. ์—„๊ฒฉํ•œ ์˜๋ฏธ์˜ rest๋Š” ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ „๋ฐ˜์„ ์ผ์ปซ๋Š”๋‹ค.

์ฆ‰, ๋ฆฌ์†Œ์Šค(HTTP URI๋กœ ์ •์˜๋œ)๋ฅผ ์–ด๋–ป๊ฒŒ ํ•œ๋‹ค(HTTP Method + Payload)๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š”๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด method์˜ ๊ฒฝ์šฐ ์ตœ๊ทผ์—๋Š” GET, POST๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ถ”์„ธ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ผ์„ฑ์ „์ž ์ฃผ์‹ ์ •๋ณด๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•œ HTTP ์š”์ฒญ:
HTTP GET https://api.trueshort.com/stock/005930

์œ ์ €์˜ ๋ณด์œ  ์ฃผ์‹ ์ข…๋ชฉ๋“ค์„ DB์— ์ €์žฅํ•˜๋Š” HTTP ์š”์ฒญ:

HTTP POST https://api.trueshort.com/user/portfolio

{
    "user_id" : 1,
    "stocks": [ 
        "005930",
        "298730",
        "378900"
    ]
}

1.1 ์žฅ์ 

- self-descriptiveness

RESTful API๋Š” ๊ทธ ์ž์ฒด๋งŒ์œผ๋กœ๋„ API์˜ ๋ชฉ์ ์ด ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ HTTP GET https://api.trueshort.com/stock/005930 ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ๋ฌธ์„œ๋‚˜ ์ฃผ์„์ด ์—†์ด๋„ "https://api.trueshort.com ๋ผ๋Š” API์—์„œ ์‚ผ์„ฑ์ „์ž ์ฃผ์‹์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ HTTP ์š”์ฒญ์„ ํ†ตํ•ด ๋ฐ›์•„์˜ค๋Š” ๊ตฌ๋‚˜" ๋ผ๋Š” ํ•ด์„์ด ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, https://api.trueshort.com/kospi/stock/005930 ์ด๋ผ๋Š” ๊ตฌ์กฐ๋ผ๋ฉด, KOSPI์— ์†ํ•ด์žˆ๋Š” ์ฃผ์‹(Stock) ์ค‘ ์‚ผ์„ฑ์ „์ž(005930)์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

https://api.shopping.com/books/novel/stephenking ์ด๋ผ๋Š” ๊ตฌ์กฐ ์ด๋ผ๋ฉด, ์ฑ…๋“ค์ค‘ ์†Œ์„ค ๊ทธ๋ฆฌ๊ณ  ์†Œ์„ค์ค‘ Stephen King์˜ ์†Œ์„ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ์กฐ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

1.2 ์ฃผ์˜ํ•  ์ 

RESTful HTTP API ๊ทœ์น™์ด๋‹ค. ์•„๋ž˜ ๋‚ด์šฉ์„ ๊ณ ๋ คํ•ด์„œ url pattern์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

/(์Šฌ๋ž˜์‹œ)

  • ๊ฒฝ๋กœ ๋์— ์Šฌ๋ž˜์‹œ๋ฅผ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.

URI

๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ปจ๋ฒค์…˜์„ ์ง€ํ‚จ๋‹ค.

  • URI์— _(underscore)๋Š” ์ž˜ ํฌํ•จํ•˜์ง€์•Š๋Š”๋‹ค.
  • ์˜์–ด ๋Œ€๋ฌธ์ž๋ณด๋‹ค ์†Œ๋ฌธ์ž๋ฅผ ์“ด๋‹ค.
  • ๋„ˆ๋ฌด ๊ธด ๋‹จ์–ด๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๋™์‚ฌ๋Š” method๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)

network 7๊ณ„์ธต?

๋ฉด์ ‘ ์งˆ๋ฌธ, ๋”ฐ๋กœ ์ •๋ฆฌ!

๋ธŒ๋ผ์šฐ์ € rendering

django app์—๋„ render๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฌด์—‡์ผ๊นŒ
๋ฐฑ์—”๋“œ์˜ API๋ฅผ ํ†ตํ•ด json๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ
๊ถ๊ธˆํ•˜๊ณ  ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋งŽ์€๋ฐ ๋‚ด์šฉ์ด ๋‹ค ๋„ˆ๋ฌด ๊นŠ๋‹ค๋ณด๋‹ˆ๊นŒ ์•ฝ๊ฐ„ ํ•œ๋„ ์ดˆ๊ณผ ... ๐Ÿ˜ญ

profile
์ด์‚ฌ๊ฐ„ ๋ธ”๋กœ๊ทธ: yenilee.github.io

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