๐Ÿ’ปNetwork

Restful Api๋ž€?

IOTrue 2023. 3. 27. 15:02

๐Ÿ˜ŽRestful Api๋ž€?

RESTful API (Representational State Transfer) - ํ‘œํ˜„ ์ƒํƒœ ์ „์ด
๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ

 

API(Application Programming Interface)๋ž€?

๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์˜ ์ง‘ํ•ฉ์„ ์ œ๊ณตํ•ด์„œ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์ •๋ณด ๊ตํ™˜์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ.

์ž์›, ํ–‰์œ„, ํ‘œํ˜„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

โœ… REST๋ž€

  1. HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•œ๋‹ค.
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ํ•ด๋‹น ์ž์›(URI)์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

โœ… REST ๊ตฌ์„ฑ ์š”์†Œ

REST๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ ๋˜์–ด์žˆ๋‹ค.

  1. ์ž์›(Resource) : HTTP URI
    • ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ id๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ด ์ž์›์€ Server์— ์กด์žฌํ•œ๋‹ค.
    • ์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ID๋Š” /lists/:list_id์™€ ๊ฐ™์€ HTTP URI๋‹ค
  2. ํ–‰์œ„(Verb) : HTTP Method
    • HTTP ํ”„๋กœํ† ์ฝœ์˜ Method๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (GET, POST, PUT, DELETE)
  3. ํ‘œํ˜„ (Representations) : HTTP Message PayLoad
    • Client๊ฐ€ ์ž์› ์ƒํƒœ์— ๋Œ€ํ•œ ์กฐ์ž‘ ์š”์ฒญ์„ ํ•˜๋ฉด Server๋Š” ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.
    • REST์—์„œ ํ•˜๋‚˜์˜ ์ž์›์€ JSON, XML ๋“ฑ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ Representation์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค

 

โœ… REST์˜ ํŠน์ง•

  1. Uniform (์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)
    • Uniform Interface๋Š” URI๋กœ ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์กฐ์ž‘์„
      ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๋งํ•œ๋‹ค.
  2. Stateless (๋ฌด์ƒํƒœ์„ฑ)
    • REST๋Š” ๋ฌด์ƒํƒœ์„ฑ์ด๋‹ค. ์ฆ‰, ์ž‘์—…์„ ์œ„ํ•œ ์ƒํƒœ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅ·๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
      API ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง€๊ณ 
      ์„œ๋ฒ„์—์„œ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง„๋‹ค.
  3. Cacheable (์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)
    • REST์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” HTTP๋ผ๋Š” ๊ธฐ์กด ์›นํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—
      ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ HTTP๊ฐ€ ๊ฐ€์ง„ ์บ์‹ฑ ๊ธฐ๋Šฅ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” Last-Modifiedํƒœ๊ทธ๋‚˜ E-Tag๋ฅผ ์ด์šฉํ•˜๋ฉด ์บ์‹ฑ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  4. Self-descriptiveness (์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ)
    • REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.
  5. Client - Server ๊ตฌ์กฐ
    • REST ์„œ๋ฒ„๋Š” API๋ฅผ ์ œ๊ณตํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์ปจํ…์ŠคํŠธ(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด)๋“ฑ์„
      ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์—
      ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ๋‚ด์šฉ๋„ ๋ช…ํ™•ํ•ด์ง€๊ณ  ์˜์กด์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
  6. ๊ณ„์ธตํ˜• ๊ตฌ์กฐ
    • REST ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ด์„œ
      ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ  PROXY, ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

โœ… REST์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ REST API ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ‘œ์ค€์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€์ ์ธ ์žฅ์ ์„ ํ•จ๊ป˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Hypermedia API์˜ ๊ธฐ๋ณธ์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉด์„œ ๋ฒ”์šฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • REST API ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ๋ช…ํ™•ํ•˜๊ณ  ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค ๋””์ž์ธ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•œ๋‹ค.

๋‹จ์ 

  • ํ‘œ์ค€์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • HTTP Method ํ˜•ํƒœ๊ฐ€ ์ œํ•œ์ ์ด๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•  ์ผ์ด ๋งŽ์€ ์„œ๋น„์Šค๋ผ๋ฉด
    ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” URL๋ณด๋‹ค Header ์ •๋ณด์˜ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋œ๋‹ค.

 

โœ… REST API ์˜ˆ์‹œ

1. URI๋Š” ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ, ๋Œ€๋ฌธ์ž๋ณด๋‹ค๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

Bad : http://rest.com/Running
Good : http://rest.com/run

 

2. ๋งˆ์ง€๋ง‰์— ์Šฌ๋ž˜์‹œ (/)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bad : http://rest.com/test/  
Good : http://rest.com/test

 

3. ์–ธ๋”๋ฐ” ๋Œ€์‹  ํ•˜์ดํ”ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค.

Bad : http://rest.com/test_blog
Good : http://rest.com/test-blog

 

4. ํŒŒ์ผํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bad : http://rest.com/photo.jpg
Good : http://rest.com/photo

 

5. ํ–‰์œ„(Method)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bad : http://rest.com/delete-post/1  
Good : http://rest.com/post/1

 

 

RestApi๋Š” ํ‘œ์ค€์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์•Œ๋งž๊ฒŒ ๊ณ ๋ ค๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

https://aws.amazon.com/ko/what-is/restful-api/

 

RESTful API๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? - RESTful API ์„ค๋ช… - AWS

Amazon API Gateway๋Š” ์–ด๋–ค ๊ทœ๋ชจ์—์„œ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ API๋ฅผ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑ, ๊ฒŒ์‹œ, ์œ ์ง€ ๊ด€๋ฆฌ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ณด์•ˆ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์™„์ „๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. API Gateway๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์• 

aws.amazon.com