REST λ
REST λ
REST(Representational State Transfer) λ μΉ μμμ λΆμ° μμ€ν , νΉν ν΄λΌμ΄μΈνΈμ μλ² κ°μ μνΈ μμ©μ μ€κ³νκΈ° μν μν€ν μ² μ€νμΌμ.
2000λ λ‘μ΄ νλ©μ΄ μμ μ λ°μ¬νμ λ Όλ¬Έμμ μ²μ μκ°ν κ°λ μΌλ‘, μ€λλ RESTful API λ₯Ό ν΅ν΄ μΉ μ ν리μΌμ΄μ μ΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ νμ€ λ°©μ μ€ νλλ‘ μ리 μ‘μμ.
ν΅μ¬ κ°λ
Resource
μ μ : REST μμλ λͺ¨λ κ²μ΄ 리μμ€(λ°μ΄ν°λ κΈ°λ₯)λ‘ μ·¨κΈλ¨. μλ₯Ό λ€μ΄, μ¬μ©μ, κ²μκΈ, μ¬μ§ λ±μ΄ λͺ¨λ 리μμ€μ.
μλ³ : κ° λ¦¬μμ€λ κ³ μ ν URI(Uniform Resource Identifier) λ₯Ό ν΅ν΄ μλ³λ¨. μλ₯Ό λ€μ΄,
https://api.example.com/users/123
λ ID κ° 123μΈ μ¬μ©μλ₯Ό λνλ.
νν(Representation)
μ μ : ν΄λΌμ΄μΈνΈμ μλ²λ 리μμ€μ μνλ₯Ό μ μ‘ν λ κ·Έ 리μμ€μ 'νν'(Representation) μ μ£Όκ³ λ°μ. μΌλ°μ μΌλ‘ JSON, XML, HTML λ± λ€μν νμμΌλ‘ ννλ¨.
μν : ν΄λΌμ΄μΈνΈλ μλ²κ° λ³΄λΈ ννμ ν΄μνμ¬ νλ©΄μ νμνκ±°λ, μΆκ°μ μΈ μ²λ¦¬λ₯Ό ν μ μμ.
HTTP λ©μλ
GET : 리μμ€ μ‘°ν
POST : 리μμ€ μμ±
PUT/PATCH : 리μμ€ μμ (μ 체 λλ μΌλΆ)
DELETE : 리μμ€ μμ
REST μ μ μ½ μ‘°κ±΄
REST μν€ν μ²λ λͺ κ°μ§ μ€μν μ μ½ μ‘°κ±΄μ λ°λ¦. μ΄ μ μ½ μ‘°κ±΄λ€μ μ§ν΄μΌλ‘μ¨ μμ€ν μ νμ₯μ±κ³Ό μ±λ₯, λ 립μ±μ ν보ν μ μμ.
ν΄λΌμ΄μΈνΈ-μλ² κ΅¬μ‘°
μ€λͺ : ν΄λΌμ΄μΈνΈ(μ¬μ©μ μΈν°νμ΄μ€)μ μλ²(λ°μ΄ν° λ° λΉμ¦λμ€ λ‘μ§) κ° λΆλ¦¬λμ΄ μλ‘ λ 립μ μΌλ‘ λ°μ ν μ μμ.
μ₯μ : μλ‘ λ€λ₯Έ κΈ°μ μ€νμ μ¬μ©μ΄ κ°λ₯νλ©°, 보μ, νμ₯μ±, μ μ§λ³΄μκ° μ©μ΄ν΄μ§.
Stateless(무μνμ±)
μ€λͺ : κ° μμ²μ μλ²κ° μ΄μ μ μμ² μνλ₯Ό μ μ₯νμ§ μλ λ 립μ μΈ λ¨μλ‘ μ²λ¦¬λ¨. λͺ¨λ νμν μ 보λ μμ² μμ ν¬ν¨λμ΄μΌ ν¨.
μ₯μ : μλ²μ 볡μ‘μ±μ μ€μ΄κ³ , νμ₯μ±μ λμ΄λ©°, μμ²μ΄ λ 립μ μ΄λ―λ‘ λΆν λΆμ°μ΄ μ©μ΄ν¨.
μΊμ μ²λ¦¬ κ°λ₯(Cacheable)
μ€λͺ : HTTP νλ‘ν μ½μ μΊμ λ©μ»€λμ¦μ νμ©νμ¬, ν΄λΌμ΄μΈνΈλ μ€κ° νλ‘μκ° μλ΅μ μ μ₯ν΄ λκ³ λμΌν μμ²μ λν΄ μλ²μ λΆνλ₯Ό μ€μΌ μ μμ.
μ₯μ : μλ΅ μλκ° λΉ¨λΌμ§κ³ , λ€νΈμν¬ νΈλν½μ΄ μ€μ΄λ¬.
κ³μΈ΅νλ μμ€ν
(Layered System)
μ€λͺ : ν΄λΌμ΄μΈνΈλ λ³΄ν΅ μλ²μ μ§μ μ κ·Όνλ κ²μ΄ μλλΌ μ¬λ¬ μ€κ° κ³μΈ΅(μ : λ‘λ λ°Έλ°μ, νλ‘μ, κ²μ΄νΈμ¨μ΄ λ±) μ ν΅ν΄ μλ²μ ν΅μ ν¨.
μ₯μ : 보μ, λ‘λ λΆμ°, κ·Έλ¦¬κ³ μμ€ν ꡬ쑰μ μ μ°μ±μ΄ ν₯μλ¨.
κ· μΌν μΈν°νμ΄μ€(Uniform Interface)
μ€λͺ : REST λ ν΄λΌμ΄μΈνΈμ μλ² κ°μ μνΈμμ©μ λ¨μννκΈ° μν΄ μΌκ΄λ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν¨. μ΄λ₯Ό ν΅ν΄ μλ‘ λ€λ₯Έ μμ€ν κ°μ μνΈ μ΄μ©μ±μ΄ μ¦λλ¨.
μ£Όμ μμΉ :
리μμ€ μλ³ : URI λ₯Ό ν΅ν λͺ νν μλ³
ννμ μ μ‘ : λ°μ΄ν°λ λ€μν ν¬λ§·(JSON, XML λ±) μΌλ‘ μ μ‘
μ체 μμ μ λ©μμ§ : λ©μμ§ μ체μ μΆ©λΆν μ λ³΄κ° ν¬ν¨λμ΄ μμ΄μΌ ν¨.
νμ΄νΌλ―Έλμ΄μ μ¬μ©(HATEOAS) : μλ΅μ ν¬ν¨λ λ§ν¬λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈκ° λ€μ νλμ κ²°μ ν μ μλλ‘ μ§μ
μ½λ μ¨ λ맨λ(μ νμ )
μ€λͺ : μλ²κ° ν΄λΌμ΄μΈνΈμκ² μ€ν κ°λ₯ν μ½λλ₯Ό μ μ‘ν μ μλ μ΅μ μ. μλ₯Ό λ€μ΄ JavaScript μ½λλ₯Ό ν΄λΌμ΄μΈνΈμκ² λ³΄λ΄ μ€ννκ² ν μ μμ.
μ£Όμ : μ΄ μ μ½ μ‘°κ±΄μ μ νμ μ΄λ©°, λͺ¨λ RESTful μμ€ν μ μ¬μ©λμ§λ μμ.
RESTful API
REST μ μμΉμ λ°λ₯΄λ μΉ API λ₯Ό νν RESTful API λΌκ³ λΆλ¦. RESTful API λ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§.
μμμ λͺ νν νν : κ° λ¦¬μμ€λ URI λ₯Ό ν΅ν΄ μλ³λκ³ , HTTP λ©μλλ₯Ό ν΅ν΄ μ‘°μλ¨.
무μνμ± : κ° μμ²μ λ 립μ μ΄λ©° νμν λͺ¨λ μ 보λ₯Ό ν¬ν¨ν¨.
νμ€νλ μλ΅ : μλ΅μ μ£Όλ‘ JSON λλ XML ν¬λ§·μΌλ‘ μ 곡λμ΄, λ€μν ν΄λΌμ΄μΈνΈμμ μ½κ² νμ±ν μ μμ.
νμ₯μ± λ° μ μ§λ³΄μ μ©μ΄ : ν΄λΌμ΄μΈνΈμ μλ²μ λΆλ¦¬κ° λͺ ννμ¬, μμ€ν νμ₯μ΄ μ©μ΄νκ³ μ μ§ λ³΄μκ° νΈλ¦¬ν¨.
REST μ μ₯λ¨μ
μ₯μ
λ¨μμ± : HTTP νλ‘ν μ½μ νμ€ λ©μλμ URI λ₯Ό μ¬μ©νμ¬ μ΄ν΄νκΈ° μ¬μ.
μ μ°μ± : λ€μν ν΄λΌμ΄μΈνΈ(μΉ, λͺ¨λ°μΌ λ±)μ μ½κ² ν΅μ ν μ μμ.
νμ₯μ± : 무μνμ±κ³Ό κ³μΈ΅νλ μν€ν μ² λλΆμ μλ² νμ₯μ΄ μ©μ΄ν¨.
μΊμ± : HTTP μΊμλ₯Ό νμ©ν΄ μλ΅ μλλ₯Ό λμ΄κ³ μλ² λΆνλ₯Ό μ€μΌ μ μμ.
λ¨μ
볡μ‘ν νΈλμμ μ²λ¦¬μ μ΄λ €μ : μνλ₯Ό μλ²μ μ μ₯νμ§ μκΈ° λλ¬Έμ, μ¬λ¬ μμ² κ°μ νΈλμμ κ΄λ¦¬κ° μ΄λ €μΈ μ μμ.
HATEOAS ꡬνμ μ΄λ €μ : μμ ν νμ΄νΌλ―Έλμ΄ μ μ΄λ₯Ό ꡬννκΈ°κ° νμ€μ μΌλ‘ 볡μ‘ν μ μμ.
HTTP μμ‘΄μ± : REST λ μ£Όλ‘ HTTP νλ‘ν μ½μ κΈ°λ°νλ―λ‘, λ€λ₯Έ νλ‘ν μ½μμλ μ μ©μ΄ μ΄λ €μΈ μ μμ.
Last updated
Was this helpful?