REST API URI μ€κ³ κ·μΉ
API λ€μ΄λ°μ νλ€κ° κ³ λ―Όμ΄ μκ²Όλ€.
[PUT] /urls/{id}/moveκ³Ό [PUT] /urls/move/{id} μ€ μ΄λ€ κ² λ λμμ§ λ§μ΄λ€.
μ΄λ₯Ό μν΄ κ΅¬κΈλ§μ νλ€κ°, REST API URIλ₯Ό λμμΈνλ κ·μΉ νΉμ 컨벀μ μ΄ μ‘΄μ¬νλ€λ κ²μ μκ² λμλ€.
REST APIμ URI
REST APIλ Representational State Transfer (νν μν μ μ‘)μ μ½μμ΄λ©°, μΉ κΈ°λ°μ μμ€ν κ° ν΅μ μ μν μν€ν μ² μ€νμΌμ΄λ€. μ΄ λ°©μμ μμ(Resource)μ μνλ₯Ό HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ₯Ό μ¬μ©νμ¬ μ μ‘νλ λ°©μμΌλ‘ ꡬνλλ€. κ° μμμ νΉμ ν URI(Uniform Resource Identifier, ν΅μΌλ μμ μλ³μ)μ μν΄ μλ³λλ€.
URIλ μΈν°λ· μμ μμμ λνλ΄λ μ μΌν μ£Όμλ‘, μΉ νμ΄μ§, μ΄λ―Έμ§, νμΌ λ±μ μμΉ μ§μ νκΈ° μν΄ μ¬μ©λλ€. REST APIμμ URIλ νΉμ μμ λλ μμμ 컬λ μ μ λν μ κ·Όμ μ 곡νλ©°, HTTP λ©μλμ ν¨κ» μ¬μ©λμ΄ ν΄λΉ μμμ λν λ€μν μμ (μ‘°ν, μμ±, μμ , μμ λ±)μ μννλ€.
REST API URI μ€κ³λ₯Ό μν μ’ ν© κ°μ΄λ
REST API URI μ€κ³μ μμ΄ μ€μν κ·μΉλ€μ λ€μκ³Ό κ°μ΄ μ’ ν©ν μ μμλ€.
- λ§μ§λ§ μ¬λμ(/) μ μΈ: URI λμ μ¬λμλ₯Ό ν¬ν¨νμ§ μλλ€.
μ) http://api.example.com/devicesμ http://api.example.com/devices/λ λμΌν΄μΌ νλ€. - κ³μΈ΅μ κ΄κ³ νν: μ¬λμ(/)λ 리μμ€ κ°μ κ³μΈ΅μ κ΄κ³λ₯Ό λνλΈλ€.
μ) http://api.canvas.com/shapes/polygons/quadrilaterals/squares - νμ΄ν(-) μ¬μ©: URIμ κ°λ
μ±μ λμ΄κΈ° μν΄ κΈ΄ κ²½λ‘ μΈκ·Έλ¨ΌνΈμμ νμ΄νμ μ¬μ©νλ€.
μ) http://api.example.com/device-management/managed-devices - μΈλμ€μ½μ΄(_) μ¬μ© κΈμ§: URIμμλ μΈλμ€μ½μ΄(_) λμ νμ΄ν(-)μ μ¬μ©νλ€.
- μλ¬Έμ μ¬μ© κΆμ₯: URI κ²½λ‘μμλ μλ¬Έμλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
- νμΌ νμ₯μ μ μΈ: URIμμλ νμΌ νμ₯μλ₯Ό μ¬μ©νμ§ μλλ€.
- λͺ μ¬ μ¬μ©: URIλ μμμ λνλ΄λ λ° λͺ μ¬λ₯Ό μ¬μ©νλ©°, λμ¬λ μ¬μ©νμ§ μλλ€.
- CRUD ν¨μ μ΄λ¦ μ¬μ© κΈμ§: URIλ μμμ μλ³νλ λ° μ¬μ©λλ©°, CRUD μμ μ HTTP μμ² λ©μλλ₯Ό ν΅ν΄ μνλλ€.
- 쿼리 μ»΄ν¬λνΈ μ¬μ©: νν°λ§, μ λ ¬, νμ΄μ§ λ±μ 쿼리 맀κ°λ³μλ₯Ό ν΅ν΄ μνλλ€.
- μμμ λ¨μΌ λ° μ§ν© ꡬλΆ: 'customers'λ μ§ν© μμ, 'customer'λ λ¨μΌ μμμ λνλΈλ€.
μ) /customersλ λͺ¨λ κ³ κ°μ λνλ΄κ³ , /customers/{customerId}λ νΉμ κ³ κ°μ λνλΈλ€.
[PUT] /urls/{id}/move κ³Ό [PUT] /urls/move/{id}μ μλ―Έκ° λ€λ₯΄λ€
곡λΆν λ΄μ©μ λ°λΌ, λ΄κ° μ²μμ κ³ λ―Όνλ λ URIμ μλ―Έκ° λ€λ₯΄κ² ν΄μλ μ μλ€λ κ²μ μκ² λμλ€.
- [PUT] /filecomponenturls/{id}/move
- μ΄ κ΅¬μ‘°λ "move" λμμ΄ {id}λ‘ μλ³λλ νΉμ "urls"μ μ μ©λ¨μ λνλΈλ€.
- "urls"μ΄ μ£Ό 리μμ€μ΄λ©°, "move"λ μ΄ λ¦¬μμ€μ λν νΉμ λμμμ μλ―Ένλ€.
- URLμ΄ λ¦¬μμ€λ₯Ό λννκ³ HTTP λ©μλ(μ¬κΈ°μλ PUT)κ° λμμ λννλ RESTful μμΉκ³Ό μΌμΉνλ€.
- [PUT] /filecomponenturls/move/{id}
- μ΄ κ΅¬μ‘°λ "move"λ₯Ό "filecomponenturls" μλμ νμ 리μμ€λ λμ λ²μ£Όλ‘ μμΉμν¨λ€.
- "move"λΌλ λμ λ²μ£Ό μλμμ νΉμ {id}λ₯Ό μ΄λμν΄μ λνλΈλ€.
- "urls" μλμ λ€μν λμ(μ: move, copy, delete)μ λΆλ₯νκ³ μ ν λ μ ν©νλ€.
첫 λ²μ§Έ μ΅μ μΈ [PUT] /filecomponenturls/{id}/move κ° λ RESTful νλ€!
"move" λμμ΄ {id}λ‘ μλ³λλ νΉμ urlμ μνλ¨μ λͺ νν ν μ μκΈ° λλ¬Έμ΄λ€.
URIλ₯Ό μ€κ³ν λ, κ³μΈ΅ ꡬ쑰λ₯Ό λͺ νν νννκ³ API μ¬μ©μκ° μ΄ν΄νκΈ° μ½λλ‘ μ€κ³ν΄μΌκ² λ€κ³ λλ μ μμλ€.
ref
https://dzone.com/articles/7-rules-for-rest-api-uri-design-1
7 Rules for REST API URI Design - DZone
URIs, or Uniform Resource Identifiers, should be designed to be readable and clearly communicate the API resource model. These rules will help you succeed.
dzone.com
https://restfulapi.net/resource-naming/
REST API URI Naming Conventions and Best Practices
In REST, having a strong and consistent REST resource naming strategy – will prove one of the best design decisions in the long term. Let's discuss.
restfulapi.net