JiwonDev

HTTP #6 ๊ธฐ๋ณธ์ ์ธ API ์„ค๊ณ„

by JiwonDev

# Request (ํด๋ผ์ด์–ธํŠธ โžก ์„œ๋ฒ„)

  • URI ์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก โžก โœ”GET
  • HTTP Form์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก โžก โœ”POST
  • ์ง์ ‘ Body์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ์ „์†ก โžก โœ”POST, PUT, PACTH

์ฐธ๊ณ ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ฉ”์„œ๋“œ ์ง€์ •์ด ์—†๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ GET์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ GET์š”์ฒญ์€ URI ์ž…๋ ฅ์œผ๋กœ ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ POST PUT๋“ฑ์€ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€์ ์ธ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. (Postman)

 

 

@ GET - ์ •์ , ๋™์ ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • GET์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ •์ ์ธ ๋ฐ์ดํ„ฐ๋Š” ๊ฒฝ๋กœ๋งŒ ์ง€์ •ํ•˜๋ฉด ๋˜๋‹ˆ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•„์š”์—†๋‹ค.
  • ์š”์ฒญ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•„์š”ํ•œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋Š” URI (=Header)์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด ์š”์ฒญํ•œ๋‹ค.

 

 

@ HTML Form์„ ์ด์šฉํ•œ ์ „์†ก

HTML์— ์žˆ๋Š” <form> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ „์†กํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์ด ์ผ์–ด๋‚œ๋‹ค.

  • POST ๋ฉ”์„œ๋“œ Content-type = application/x-www-form-urlencoded ๋ฐฉ์‹์œผ๋กœ ํ—ค๋”๋ฅผ ์ง€์ •ํ•œ๋‹ค.
    โžก x-www-form์€ ์›น์—์„œ ๋ณด๋‚ธ ํผ๋ฐ์ดํ„ฐ์ž„์„, urlencoded๋Š” ํ•œ๊ธ€๊ฐ™์€ ๋ฌธ์ž๋ฅผ ์ธ์ฝ”๋”ฉํ•ด์„œ Body์— ๋„ฃ์—ˆ๋‹ค๋Š” ์˜๋ฏธ.
  • ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋™์ผํ•œ ํ˜•์‹ (username=kim&age=20)์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์–ด์„œ ์ „์†กํ•œ๋‹ค.

 

<form enctype="multipart/form-data">๋กœ ์ธ์ฝ”๋”ฉ ํƒ€์ž…๊ณผ content-type์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ „์†กํ•œ๋‹ค. (*์ด๋Š” HTTP ํŒŒ์ผ ์ „์†ก์—์„œ ๋”ฐ๋กœ ๋‹ค๋ฃจ๊ฒ ๋‹ค.)

multipart์—๋Š” ํŒŒ์ผ๋ฐ์ดํ„ฐ๋ฅผ part๋‹จ์œ„๋กœ ํ•ฉ์ณ์„œ ๋ฉ”์‹œ์ง€์— ๋‹ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ ์ค‘ form-data ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ ๊ฒƒ.

 

 

@ HTTP API ๋ฐ์ดํ„ฐ ์ „์†ก

ํด๋ผ์ด์–ธํŠธ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ (์˜ˆ: AJAX ํ†ต์‹  - Asynchronous JavaScript and XML)๋ฅผ ์ด์šฉํ•œ HTTP ํ†ต์‹  ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ญ๋“  ์ „์†กํ•  ์ˆ˜ ์žˆ๊ธดํ•˜์ง€๋งŒ, ๋ณดํ†ต Content-type: application/json์„ ํ‘œ์ค€ ๋ฉ”์‹œ์ง€ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. (์ด์ „์—๋Š” XML)

์„œ๋ฒ„-์„œ๋ฒ„ ๊ฐ„์—์„œ๋„ HTTP API๋ฅผ ๋งŽ์ด ์ด์šฉํ•œ๋‹ค.

 


# ์š”์ฒญ HTTP API๋ฅผ ์„ค๊ณ„ํ•ด๋ณด์ž

๋ณดํ†ต HTTP API๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ํฌ๊ฒŒ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์„œ๋ฒ„์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๊ธฐ ์• ๋งคํ•˜๋‹ค๋ฉด POST๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ œ์ผ ๋‚ซ๋‹ค.

 

 

@ URI ์„ค๊ณ„ํ•˜๊ธฐ

์ด์ „ ๊ธ€์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, URI๋กœ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

โžก member/id๊ฐ€ ์•„๋‹Œ members/id๋ฅผ ์‚ฌ์šฉํ•œ๊ฑด ๋ฉค๋ฒ„ ์ €์žฅ์†Œ(members)์—์„œ ๊บผ๋‚ด์˜จ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.

HTML-form์ฒ˜๋Ÿผ ์ฟผ๋ฆฌํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, URI์˜ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ๊น”๋”ํ•˜๋‹ค.

 

 

@ POST - ์‹ ๊ทœ ์ž์›๋“ฑ๋ก

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋“ฑ๋ก๋  ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๋ชจ๋ฅธ๋‹ค.
    โžก ํšŒ์› ๋“ฑ๋ก /members -> POST
    โžก POST /members

  • ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.
    โžก HTTP/1.1 201 Created
        Location: /members/100
     
  • ์ปฌ๋ ‰์…˜(Collection)
    โžก ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ
    โžก ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
    โžก ์—ฌ๊ธฐ์„œ ์ปฌ๋ ‰์…˜์€ /members ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

@ PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

  • PUT์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜(id๋“ฑ)๋ฅผ ์•Œ๊ณ , ์ •ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•ด์ค€๋‹ค.
  • ๋ฐ˜๋ฉด์— POST๋Š” ๋‹จ์ˆœํžˆ ์š”์ฒญ๋งŒ ํ•˜๋Š”๊ฑฐ์ง€ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋Š” ์„œ๋ฒ„๊ฐ€ ์ง€์ •ํ•œ๋‹ค.

ํŒŒ์ผ ๋“ฑ๋ก์€ PUT์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค. ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด ์˜ฌ๋ผ์˜ค๋ฉด ๊ธฐ์กด ํŒŒ์ผ์„ ๋Œ€์ฒดํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ.

โžก ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” POST๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ๊ตณ์ด ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•ด๋‘๊ณ  ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ

 

@ HTML Form ๋งŒ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ (GET, POST)

๊ทธ๋Ÿผ ์ถ”๊ฐ€์ ์ธ JS์ฝ”๋“œ ์—†์ด HTTP Form๋งŒ์„ ์ด์šฉํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์„œ๋น„์Šค๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ?

โžก ์ด ๊ฒฝ์šฐ ์ตœ๋Œ€ํ•œ GET, POST๋ฅผ ํ™œ์šฉํ•˜๊ณ  ๋Œ€์ฒด์žฌ๋กœ ์ปจํŠธ๋กค URI( /members/new, delete, edit )์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ณดํ†ต [ํผ์„ /members/new], [๋“ฑ๋ก๊ณผ ์ˆ˜์ •์„ /members] ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๊น”๋”ํ•˜๋‹ค. (ํผ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•˜๊ธฐ ํŽธํ•จ) 

๋ฌผ๋ก  HTTP API์˜ ๊ฒฝ์šฐ์—๋„ upgrade, doService ๊ฐ™์ด ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์• ๋งคํ•œ ๊ธฐ๋Šฅ์€ ์ปจํŠธ๋กคURI ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 


# ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ URI ์„ค๊ณ„ (restfulapi.net)

๋งค๋ฒˆ URI์˜ ์ด๋ฆ„์„ ๊ณ ๋ฏผํ•˜๋Š”๊ฑด ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์„ค๊ณ„๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋งŒ๋“ค์ž.

์ปฌ๋ ‰์…˜๊ณผ ๋ฌธ์„œ๋Š” ์œ„์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
PUT์„ ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ Store๋ผ๊ณ  ํ•œ๋‹ค. HTTP ๋ฉ”์„œ๋“œ๋กœ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋ฉด ์ปจํŠธ๋กคURI๋ฅผ ์“ฐ์ž.

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ