๐Ÿ’ป Computer Science

04. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - HTTP API

์• ์ •์“ฐ 2021. 5. 3. 14:50

2021.05.03 - [BASIC] - 01. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ

2021.05.03 - [BASIC] - 02. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - URI

2021.05.03 - [BASIC] - 03. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ๋ชจ๋“ ๊ฒƒ์ด HTTP

 

API URI ๊ณ ๋ฏผ

๋ฆฌ์†Œ์Šค๋ผ๋Š” ์˜๋ฏธ๋Š” ๋ญ˜๊นŒ?

ํšŒ์›์„ ๋“ฑ๋กํ•˜๊ณ  ์ˆ˜์ •,์กฐํšŒ ํ•˜๋Š”๊ฒŒ ๋ฆฌ์†Œ์Šค๋Š” ์•„๋‹ˆ๋‹ค

ํšŒ์›์ด๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๊ฐ€ ๋ฐ”๋กœ ๋ฆฌ์†Œ์Šค์ด๋‹ค. ๋‚˜๋Š” DB์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ํ•œ ๋กœ์šฐ์˜ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ดํ•ดํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ?

์ˆ˜์ •,์กฐํšŒ ํ•˜๋Š” ๊ฒƒ์„ ๋ชจ๋‘ ๋ฐฐ์ œํ•˜๊ณ  ํšŒ์›์ด๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋งŒ ์‹๋ณ„ํ•œ๋‹ค.

-> ํšŒ์› ๋ฆฌ์†Œ์Šค๋ฅผ URI ๋งคํ•‘

 

API URI ์„ค๊ณ„

- ๋ฆฌ์†Œ์Šค๋งŒ์„ ์‹๋ณ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— URI ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

- ๋ฆฌ์†Œ์Šค์™€ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.

- ์—ฌ๊ธฐ์„œ ๋ฆฌ์†Œ์Šค(๋ช…์‚ฌ)๋Š” ํšŒ์›์„ ๋œปํ•˜๊ณ  

- ํ–‰์œ„(๋™์‚ฌ)๋Š” ์กฐํšŒ, ๋“ฑ๋ก, ์‚ญ์ œ, ๋ณ€๊ฒฝ์„ ๋œปํ•œ๋‹ค.

 

์˜ˆ)

ํšŒ์› ๋ชฉ๋ก ์กฐํšŒ /members

ํ•ด๋‹น ํšŒ์› ์กฐํšŒ /members/{id}

ํšŒ์› ๋“ฑ๋ก /members/{id}

ํšŒ์› ์ˆ˜์ • /members/{id}

ํšŒ์› ์‚ญ์ œ /members/{id}

 

HTTP ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜

 

GET ๋ฆฌ์†Œ์Šค ์กฐํšŒ

์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋ฅผ query๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•œ๋‹ค.

๋ฉ”์‹œ์ง€ body๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ณณ์ด ๋งŽ๋‹ค.

 

POST ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ๋“ฑ๋ก์— ์‚ฌ์šฉ

๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

์„œ๋ฒ„๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฃผ๋กœ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๊ทœ ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉํ•œ๋‹ค.

201 Created๋ฅผ ๋ณด๋‚ด๋ฉด์„œ (200 Ok ๋„ ๋ฌด๊ด€) ์ž์›์ด ์ƒ์„ฑ๋œ URI๋ฅผ return ํ•ด์ค€๋‹ค. -> ๋‚˜์ค‘์— ํ”„๋กœ์ ํŠธํ• ๋•Œ ํ™•์ธํ•ด๋ด๋„ ์ข‹์„๊ฒƒ ๊ฐ™๋‹ค

 

PUT ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ฒด, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ

๋ฆฌ์†Œ์Šค๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•œ๋‹ค.

๋ฆฌ์†Œ์Šค๊ฐ€ == null ? ์ƒ์„ฑ : ๋Œ€์ฒด

๋งŒ์•ฝ ๊ฐ’์ด ๊ฐ™์•„๋„ ํ•„๋“œ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ์š”์ฒญํ•˜๋Š” ๊ฐ’ ๊ทธ๋Œ€๋กœ ๋ฎ์–ด์“ฐ๊ธฐํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๋ฆฌ์†Œ์Šค ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์ง€์ •ํ•œ๋‹ค.

 

PATCH ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ

๊ทธ๋ ‡๋‹ค๋ฉด ํšŒ์› ์ˆ˜์ • ์ผ ๋•Œ PATCH๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋งž์„๊นŒ? ์—ฌํƒœ PUT์œผ๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค.

PUT์ด ํ•ด๋‹น ์ž์›์˜ ์ „์ฒด๋ฅผ ๊ต์ฒดํ•˜๋Š” ์˜๋ฏธ๋ฅผ ์ง€๋‹ˆ๋Š” ๋Œ€์‹ , PATCH๋Š” ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์ง€๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ update ์ด๋ฒคํŠธ์—์„œ PUT๋ณด๋‹ค ๋” ์˜๋ฏธ์ ์œผ๋กœ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํ‰๊ฐ€๋ฐ›๊ณ  ์žˆ๋‹ค. ๋˜ํ•œ PUT์˜ ๊ฒฝ์šฐ๋Š” ๋ฉฑ๋“ฑํ•˜์ง€๋งŒ, PATCH์˜ ๊ฒฝ์šฐ๋Š” ๋ฉฑ๋“ฑํ•˜์ง€ ์•Š๋‹ค. PUT์€ ์ „์ฒด ์ž์›์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผ ์ž์›์— ๋Œ€ํ•ด์„œ ๋™์ผํ•˜๊ฒŒ PUT์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉฑ๋“ฑํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋ฐ˜๋ฉด PATCH๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ ์ž์›์˜ ์ผ๋ถ€๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค.
์ถœ์ฒ˜: https://javaplant.tistory.com/18 [์ž๋ฐ”๊ณต์ž‘์†Œ]

 

DELETE ๋ฆฌ์†Œ์Šค ์‚ญ์ œ

HEAD GET๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๊ณ , ์ƒํƒœ ์ค„๊ณผ ํ—ค๋”๋งŒ ๋ฐ˜ํ™˜

OPTIONS ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ†ต์‹  ๊ฐ€๋Šฅ ์˜ต์…˜(๋ฉ”์„œ๋“œ)์„ ์„ค๋ช… (CORS ์—์„œ ์‚ฌ์šฉ)

CORS (Cross-Origin Resource Sharing)์ด ๋ญ์ง€?

์ž์› ์š”์ฒญ ์ถœ์ฒ˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฑด๋ฐ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์— ์—„์ฒญ ์ž์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ๋‹ค!

evan-moon.github.io/2020/05/21/about-cors/

 

CONNECT ๋Œ€์ƒ ์ž์›์œผ๋กœ ์‹๋ณ„๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ„ฐ๋„์„ ์„ค์ •

TRACE ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฐฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰(๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)

 

 

HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ

 

- ์•ˆ์ „(Safe Method)

ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

- ๋ฉฑ๋“ฑ(Idempotent)

ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•˜๋“  100๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๊ฒฐ๊ณผ๊ฐ€ ๋˜‘๊ฐ™๋‹ค.

GET : ๋ช‡๋ฒˆ ์กฐํšŒํ•˜๋“  ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์กฐํšŒ๋œ๋‹ค.

PUT : ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ฒผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•ด๋„ ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค.

DELETE : ๊ฒฐ๊ณผ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•ด๋„ ์‚ญ์ œ๋œ ๊ฒฐ๊ณผ๋Š” ๋˜‘๊ฐ™๋‹ค.

POST : ๋ฉฑ๋“ฑ์ด ์•„๋‹ˆ๋‹ค. ๋‘๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ™์€ ๊ฒฐ์ œ๊ฐ€ ์ค‘๋ณตํ•ด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉฑ๋“ฑ์˜ ํ™œ์šฉ : ์ž๋™ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ -> ๋ฉฑ๋“ฑ์ด ๊ฐ€๋Šฅํ•œ METHOD์—์„œ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์ž๋™์œผ๋กœ ์žฌ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- ์บ์‹œ๊ฐ€๋Šฅ(Cashable)

์ด๋ฏธ ๋ฐ›์€ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋ฐ›์ง€ ์•Š๋„๋ก localPC ์›น๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์— ์ €์žฅํ•œ๋‹ค.(์บ์‹œ ํ•œ๋‹ค.)

 

GET, HEAD ,POST, PATCH๊ฐ€ ์บ์‹œ ๊ฐ€๋Šฅํ•˜๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” GET,HEAD ์ •๋„๋งŒ ์บ์‹œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. POST, PATCH๋Š” ๋ณธ๋ฌธ ๋‚ด์šฉ๊นŒ์ง€ ์บ์‹œ ํ‚ค ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š๋‹ค.

 

 

๋ฐ˜์‘ํ˜•