JiYoung Dev πŸ–₯

REST API κ·œμΉ™ λ³Έλ¬Έ

Question

REST API κ·œμΉ™

Shinjio 2023. 9. 4. 18:51

REST API(Representational State Transfer API)


ꡬ성

1. μžμ›(RESOURCE) - URI

2. ν–‰μœ„(Verb) - HTTP METHOD

3. ν‘œν˜„(Representations)


REST API λ””μžμΈ κ°€μ΄λ“œ

REST API μ„€κ³„μ‹œ κ°€μž₯ μ€‘μš”ν•œ ν•­λͺ© 2가지 : URI, HTTP Method


1. URIλŠ” μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€. 

 - λ¦¬μ†ŒμŠ€λͺ…은 λ™μ‚¬λ³΄λ‹€λŠ” λͺ…사λ₯Ό μ‚¬μš©

 - μ’‹μ§€ μ•Šμ€ μ˜ˆ : GET /members/delete/1 
   --> delete와 κ°™μ€ ν–‰μœ„에 λŒ€ν•œ ν‘œν˜„이 λ“€μ–΄κ°€μ„œλŠ” μ•ˆλ¨

 - μ’‹μ€ μ˜ˆ : DELETE /members/1


2. μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method(GET, POST, PUT, DELETE λ“±)둜 ν‘œν˜„

 - GET /members/delete/1 (X) ------> DELETE /members/1

 - μ˜ˆ: νšŒμ›μ •λ³΄λ₯Ό κ°€μ Έμ˜€λŠ” URI

   GOOD - GET /members/1

   BAD - GET /members/show/1

 - μ˜ˆ : νšŒμ›μ •λ³΄λ₯Ό μΆ”κ°€ν•˜λŠ” URI

   GOOD - POST /members/2

   BAD - GET /members/insert/2


[μ°Έκ³ ] HTTP METHOD의 μ•Œλ§žμ€ μ—­ν•  


1. POST : POSTλ₯Ό ν†΅ν•΄ ν•΄λ‹Ή URIλ₯Ό μš”μ²­ν•˜λ©΄ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•¨ 

2. GET : GETλ₯Ό ν†΅ν•΄ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό μ‘°νšŒ. ν•΄λ‹Ή λ„νλ¨ΌνŠΈμ— λŒ€ν•œ μƒμ„Έ μ •λ³΄ κ°€μ Έμ˜€κΈ°

3. PUT : PUTλ₯Ό ν†΅ν•΄ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό μˆ˜μ •ν•¨

4. DELETE : DELETEλ₯Ό ν†΅ν•΄ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•¨



[URI μ„€κ³„ μ‹œ μ£Όμ˜ν•  μ ]

1. μŠ¬λž˜μ‹œ κ΅¬λΆ„μž(/)λŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš© 

 - μ˜ˆ : houses/apartmemts, animals/mamals

2. URI λ§ˆμ§€λ§‰ λ¬Έμžλ‘œ μŠ¬λž˜μ‹œ(/) ν¬ν•¨ν•˜μ§€ μ•ŠμŒ

3. ν•˜μ΄ν”ˆ(-)은 URI κ°€λ…성을 λ†’μ΄λŠ”λ° μ‚¬μš© 

 - URIλ₯Ό μ‰½κ²Œ μ½κ³  ν•΄μ„ν•˜κΈ° μœ„ν•΄, λΆˆκ°€ν”Όν•˜κ²Œ κΈ΄ URI κ²½λ‘œλ₯Ό μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ ν•˜μ΄ν”ˆμ„ μ‚¬μš©ν•΄ κ°€λ…성을 λ†’일 μˆ˜ μžˆμŒ

4. λ°‘쀄(_)은 URI에 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ

 - λ°‘쀄은 λ³΄κΈ° μ–΄λ €μšΈ μˆ˜ μžˆμœΌλ―€λ‘œ '_' λŒ€μ‹  '-' μ‚¬μš©

5. URI κ²½λ‘œμ—λŠ” μ†Œλ¬Έμžκ°€ μ ν•©ν•¨ 

 - λŒ€λ¬Έμž μ‚¬μš©μ€ λ˜λ„둝 ν”Όν•˜κΈ°. λŒ€μ†Œλ¬Έμžμ— λ”°λΌ λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λ‘œ μΈμ‹ν•˜κ²Œ λ˜κΈ° λ•Œλ¬Έ

6. νŒŒμΌ ν™•μž₯μžλŠ” URI에 ν¬ν•¨ν•˜μ§€ μ•ŠμŒ


[λ¦¬μ†ŒμŠ€ κ°„μ˜ κ΄€κ³„λ₯Ό ν‘œν˜„ν•˜λŠ” λ°©λ²•]

1. /λ¦¬μ†ŒμŠ€λͺ…/λ¦¬μ†ŒμŠ€ ID/관계가 μžˆλŠ” λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λͺ…

 - μ˜ˆ : GET /users/{userid}/devices ---> μΌλ°˜μ μœΌλ‘œ μ†Œμœ  'has'의 κ΄€κ³„λ₯Ό ν‘œν˜„ν•  λ•Œ

2. λ§Œμ•½ κ΄€κ³„λͺ…이 λ³΅μž‘ν•˜λ‹€λ©΄ μ΄λ₯Ό μ„œλΈŒ λ¦¬μ†ŒμŠ€μ— λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„

 - μ˜ˆ : μ‚¬μš©μžκ°€ 'μ’‹μ•„ν•˜λŠ”' λ””λ°”μ΄μŠ€ λͺ©λ‘ ν‘œν˜„

         GET /users/{userid}/likes/devices (관계λͺ…이 μ• λ§€ν•˜κ±°λ‚˜ κ΅¬μ²΄μ  ν‘œν˜„이 ν•„μš”ν•  λ•Œ)


[HTTP 응닡 μƒνƒœ μ½”λ“œ]

1-1. 200 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ •μƒμ μœΌλ‘œ μˆ˜ν–‰ν•¨

1-2. 201 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ– ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­, ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ„±κ³΅μ μœΌλ‘œ 생성됨(POST μž‘μ—…μ‹œ)


2-1. 400 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”청이 λΆ€μ μ ˆν•œ κ²½μš°

2-2. 401 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μΈμ¦λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ 보호된 λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν–ˆμ„ λ•Œ μ‚¬μš©ν•˜λŠ” 응닡 μ½”λ“œ

                 (둜그인 ν•˜μ§€ μ•Šμ€ μœ μ €κ°€ 둜그인 ν–ˆμ„ λ•Œ, μš”μ²­ κ°€λŠ₯ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν–ˆμ„ λ•Œ)

2-3. 403 : μœ μ € μΈμ¦μƒνƒœμ™€ κ΄€κ³„없이 μ‘λ‹΅ν•˜κ³  μ‹Άμ§€ μ•Šμ€ λ¦¬μ†ŒμŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν–ˆμ„ λ•Œ μ‚¬μš©ν•˜λŠ” μ‘λ‹΅ μ½”λ“œ 

2-4. 405 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ—μ„œλŠ” μ‚¬μš© λΆˆκ°€λŠ₯ν•œ Methodλ₯Ό μ΄μš©ν–ˆμ„ κ²½μš° μ‚¬μš©ν•˜λŠ” μ‘λ‹΅ μ½”λ“œ


3-1. 301 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ URIκ°€ λ³€κ²½λ˜μ—ˆμ„ λ•Œ μ‚¬μš©ν•˜λŠ” μ‘λ‹΅μ½”λ“œ

3-2. 500 : μ„œλ²„에 λ¬Έμ œκ°€ μžˆμ„ μ‹œ μ‚¬μš©ν•˜λŠ” μ‘λ‹΅ μ½”λ“œ 

좜처

 

REST API μ œλŒ€λ‘œ μ•Œκ³  μ‚¬μš©ν•˜κΈ° : NHN Cloud Meetup

REST API μ œλŒ€λ‘œ μ•Œκ³  μ‚¬μš©ν•˜κΈ°

meetup.nhncloud.com