πŸ”™λ’€λ‘œκ°€κΈ°

URIλž€?

URI(Uniform Resource Identifier)λŠ” μΈν„°λ„·μ—μ„œ μžμ›μ„ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” κ³ μœ ν•œ λ¬Έμžμ—΄μ΄λ‹€. RESTful APIμ—μ„œλŠ” μžμ›μ— λŒ€ν•œ μ•‘μ„ΈμŠ€μ™€ μ‘°μž‘μ„ μœ„ν•˜ URIλ₯Ό μ‚¬μš©ν•œλ‹€. 효과적인 URI μ„€κ³„λŠ” APIλ₯Ό μ‰½κ²Œ μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ„λ‘ λ•λŠ”λ‹€.

λ‹€μŒμ€ URI 섀계 원칙에 λŒ€ν•œ λͺ‡ κ°€μ§€ 핡심 사항이닀.

핡심 URI 섀계 원칙

  1. λͺ…사 μ‚¬μš© URIλŠ” μžμ›μ„ λ‚˜νƒ€λ‚΄μ•Ό ν•˜λ―€λ‘œ λͺ…사λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 동사λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ν”Όν•˜κ³ , λŒ€μ‹  HTTP λ©”μ†Œλ“œ(GET, POST, PUT, DELETE λ“±)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μž‘μ„ ν‘œν˜„ν•˜λΌ.
  2. λ³΅μˆ˜ν˜• μ‚¬μš© μžμ›μ˜ 집합을 ν‘œν˜„ν•  λ•ŒλŠ” λ³΅μˆ˜ν˜• λͺ…사λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ›μ˜ 경우 /users와 같이 λ³΅μˆ˜ν˜•μ„ μ‚¬μš©ν•œλ‹€.
  3. 계측 ꡬ쑰 ν‘œν˜„ URIμ—μ„œ 계측 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μŠ¬λž˜μ‹œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ νŠΉμ • μ‚¬μš©μžμ˜ μ£Όλ¬Έ 내역은 **/categories/{category_id}/subcategories**와 같이 ν‘œν˜„ν•  수 μžˆλ‹€. (이 μ˜ˆμ‹œμ—μ„œλŠ” 계측 ꡬ쑰가 β€œμΉ΄ν…Œκ³ λ¦¬>ν•˜μœ„ μΉ΄ν…Œκ³ λ¦¬β€ 둜 ν‘œν˜„λ˜μ—ˆλ‹€.)
  4. μžμ› κ°„ 관계 ν‘œν˜„ 관계λ₯Ό λ‚˜νƒ€λ‚΄λ €λ©΄ URIλ₯Ό μ€‘μ²©ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ • μ‚¬μš©μžκ°€ μ†ν•œ 그룹을 ν‘œν˜„ν•˜λ €λ©΄ /users/{user_id}/group 와 같이 ν‘œν˜„ν•  수 μžˆλ‹€. (이 μ˜ˆμ‹œμ—μ„œλŠ” "μ‚¬μš©μžμ™€ κ²Œμ‹œλ¬Ό"μ΄λΌλŠ” μ„œλ‘œ κ΄€λ ¨ μžˆλŠ” μžμ› κ°„μ˜ 관계가 ν‘œν˜„λ˜μ—ˆλ‹€)
  5. μ†Œλ¬Έμž μ‚¬μš© URIμ—μ„œλŠ” μ†Œλ¬Έμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€. λŒ€μ†Œλ¬Έμž ꡬ뢄이 있기 λ•Œλ¬Έμ— λŒ€λ¬Έμžλ₯Ό μ‚¬μš©ν•˜λ©΄ ν˜Όλž€μ„ 쀄 수 μžˆλ‹€.
  6. μΌ€λ°₯ μΌ€μ΄μŠ€ μ‚¬μš© URIμ—μ„œ 단어λ₯Ό ꡬ뢄할 λ•ŒλŠ” μ–Έλ”μŠ€μ½”μ–΄ _β€™λŒ€μ‹  ν•˜μ΄ν”ˆ -을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€. μ΄λŠ” 검색 μ—”μ§„ μ΅œμ ν™”(SEO)와 가독성에 도움이 λœλ‹€.
  7. 필터링 및 μ •λ ¬ 쿼리 λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ μžμ›μ— λŒ€ν•œ 필터링, μ •λ ¬, νŽ˜μ΄μ§• 등을 지원해야 ν•œλ‹€. 예λ₯Ό λ“€μ–΄ /users?sort=name&limit=10&page=2 와 같이 μ‚¬μš©ν•  수 μžˆλ‹€.
  8. λͺ…λ£Œν•˜κ³  κ°„κ²°ν•˜κ²Œ κ°€λŠ₯ν•œ κ°„κ²°ν•˜κ³  λͺ…λ£Œν•œ URIλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. λΆˆν•„μš”ν•œ λ‹¨μ–΄λ‚˜ 길이λ₯Ό 쀄여 가독성을 높이고, μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ ꡬ쑰λ₯Ό λ§Œλ“œλŠ” 것이 μ€‘μš”ν•˜λ‹€.