"Restfulν μ€κ³". λ¬΄μ¨ λ»μΌκΉ?
REST
λ μν€ν
μ² μμΉ μΈνΈμ΄λ€. μμ²μ΄ μνλ λ, REST API
λ 리μμ€ μνμ λν ννμ μμ²μμκ² μ μ‘νλ€.
HTTP URIλ₯Ό ν΅ν΄ μμ(Resource)μ λͺ
μνκ³ , HTTP MethodμΈ POST
GET
PUT
DELETE
λ₯Ό ν΅ν΄ ν΄λΉ μμμ λν CRUD μμ
μ μ μ©νλ€.
POST
Create(μμ²νλ©΄ μμμ μμ±)GET
Read(μμμ μ‘°ν)PUT
Update(μμμ μμ )DELETE
Delete(μμμ μμ )RESTλ μμ κΈ°λ°μΌλ‘ μ€κ³λλ©° HTTP Methodλ₯Ό ν΅ν΄ μμμ μ²λ¦¬νλ μν€ν μ²λ₯Ό μλ―Ένλ€κ³ λ³Ό μ μλ€.
RESTful
μΌλ°μ μΌλ‘ RESTλΌλ μν€ν
μ²λ₯Ό ꡬννλ μΉ μλΉμ€λ₯Ό λνλ΄λ©° νΉμ κΈ°μ μ μ μνλ κ²μ΄ μλλ€. REST API
λ₯Ό μ 곡νλ μΉ μλΉμ€λ₯Ό RESTful
νλ€κ³ ν μ μλ€.
REST APIλ μ½κ² μΈκ°μ§λ‘ ꡬλΆν μ μλ€.
μμ(Resource)
URIνμ(Verb)
HTTP Methodνν(Representations)
HTTP νμ€ νλ‘ν μ½μ λ°λ₯΄λ λͺ¨λ νλ«νΌμμ μ¬μ© κ°λ₯νλ€.
μμμ ννλΏλ§ μλλΌ κ·Έ νμ(HTTP Method)μ ν΄λΉ μμμ μλ΅ μνμ½λκ° μν©μ λͺ ννκ² λνλ΄λ―λ‘ μλνλ λ°λ₯Ό μ½κ² νμ ν μ μλ€.
Client-Server ꡬ쑰
μλ²λ API μ 곡, ν΄λΌμ΄μΈνΈλ μ¬μ©μ μΈμ¦μ΄λ μ½ν
μ€νΈ(μΈμ
, λ‘κ·ΈμΈ μ 보) λ±μ μ§μ κ΄λ¦¬νλ κ΅¬μ‘°λ‘ κ°κ°μ μν μ΄ νμ€ν ꡬλΆλκΈ° λλ¬Έμ μλ‘κ°μ κ°λ°ν΄μΌ ν λ΄μ©μ΄ λͺ
νν΄μ§κ³ μμ‘΄μ±μ΄ μ€μ΄λ λ€.
Uniform Interface(μ λνΌ μΈν°νμ΄μ€)
URIλ‘ μ§μ ν μμμ λν μ‘°μμ ν΅μΌλκ³ νμ μ μΈ μΈν°νμ΄μ€λ‘ μννλ μν€ν
μ² μ€νμΌμ λ§νλ€.
Stateless(무μνμ±)
RESTλ 무μνμ± μ±κ²©μ κ°λλ€. μΈμ
μ 보λ μΏ ν€ μ 보λ₯Ό λ³λλ‘ μ μ₯νκ³ κ΄λ¦¬νμ§ μκΈ° λλ¬Έμ API μλ²λ μμ²λ§ λ¨μ μ²λ¦¬νλ©΄ λλ€. μ΄λ‘ μΈν΄ μλΉμ€ μμ λκ° λμμ§κ³ μλ²μμ λΆνμν μ 보λ₯Ό κ΄λ¦¬νμ§ μμΌλ―λ‘μ¨ κ΅¬νμ΄ λ¨μν΄μ§λ€.
Cacheable(μΊμ)
κ°μ₯ ν° νΉμ§ μ€ νλλ HTTPλΌλ κΈ°μ‘΄ μΉνμ€μ κ·Έλλ‘ μ¬μ©νκΈ° λλ¬Έμ, μΉμμ μ¬μ©νλ κΈ°μ‘΄ μΈνλΌλ₯Ό κ·Έλλ‘ νμ©ν μ μλ€. λ°λΌμ HTTPκ° κ°μ§ μΊμ± κΈ°λ₯μ΄ μ μ© κ°λ₯νλ€. HTTP νλ‘ν μ½ νμ€μμ μ¬μ©νλ Last-Modified
νκ·Έλ E-Tag
λ₯Ό μ΄μ©νλ©΄ μΊμ± ꡬνμ΄ κ°λ₯νλ€.
Self-Descriptiveness(μ체 νν ꡬ쑰)
REST API λ©μμ§λ§ λ³΄κ³ λ μ΄λ₯Ό μ½κ² μ΄ν΄ν μ μλ μ체 νν κ΅¬μ‘°λ‘ λμ΄ μλ€.
URIλ μμ μ체λ₯Ό ννν΄μΌ νλ€.
μμμ λν νμλ HTTP Methodλ‘ νννλ€.
ex ) μμ
-- GET /students/delete/1 (X)
-- DELETE /students/1 (O)ex ) μ‘°ν
-- GET /students/show/1 (X)
-- GET /students/1 (O)ex ) μμ±
GET /students/insert/2 (X)
POST /students/2 (O)
μ¬λμ ꡬλΆμ(/)λ κ³μΈ΅ κ΄κ³λ₯Ό λνλ΄λ λ° μ¬μ©νλ€.
λΆκ°νΌνκ² κΈ΄ URI κ²½λ‘λ₯Ό μ¬μ©νκ² λλ€λ©΄ νμ΄ν(-)μ μ¬μ©ν΄ κ°λ μ±μ λμΌ μ μλ€.
URI λ¬Έλ² νμ(RFC 3986)μ λμλ¬Έμλ₯Ό ꡬλΆνκΈ° λλ¬Έμ νΌλμ λ§κΈ° μν΄ μλ¬Έμ ννλ₯Ό μ νΈνλ€.
μ§κ΄μ μΈ REST APIλ₯Ό μν΄ μ»¬λ μ (μμμ λͺ¨μ)κ³Ό λνλ¨ΌνΈ(μμ)λ₯Ό μ¬μ©ν λ λ¨μ, 볡μ ννμ μ§ν€λ©΄ μ’λ€.
REST
μRESTful
μ΄λΌλ λ§μ μμ£Ό μ¬μ©νλ€. λλREST API
λ₯Ό μ μ©νκ³ μλ€κ³ λ§μ°ν μκ°νκ³ , μ΄λ μ€μ λ‘ λν μΌν λ΄μ©μ λͺ¨λ₯Έμ± λλ΅μ μΈ κ°λ λ§ μκ³ μμ μ νκ² λλ λ¬Έμ λ‘ μ΄μ΄μ‘λ€. νμ§λ§ λ¬Έμ κ° μμΌλ―λ‘ μ’ λ νμ΅ν μ μλ κ³κΈ°κ° λμ΄ νλμ μ§μμ μ΅λν μ μμλ€κ³ μκ°νλ€.