π€·βοΈ REST? REST API? RESTful API?
REST λ μΉ(HTTP)μ μ₯μ μ μ΅λν νμ©ν μ μλ μν€ν μ³μ λλ€.
REST API(REpresentational State Transfer)λ REST μν€ν μ³ μ€νμΌμ λ°λ₯΄λ APIλ‘, μΉμμμ μ¬μ©λλ μ¬λ¬ 리μμ€λ₯Ό HTTP URI(Resourse)λ‘ νννκ³ , ν΄λΉ 리μμ€μ λν νμλ₯Ό HTTP Method( GET, POST, PUT, PATCH, DELETE )λ‘ μ μνμ¬ νΉμ ν νν(μμμ νν)λ‘ μ λ¬νλ λ°©μμ λ§ν©λλ€.
RESTful APIλ REST API μ€κ³ κ°μ΄λλ₯Ό λ°λΌ APIλ₯Ό λ§λ€μ΄ μΉμλΉμ€λ₯Ό μ 곡νλ©΄ ν΄λΉ μΉ μλΉμ€λ RESTfulνλ€κ³ λ§νλ©° RESTful ν APIλ₯Ό RESTful APIλΌκ³ ν©λλ€.
RESTμ ꡬμ±
RESTλ λ€μκ³Ό κ°μ ꡬμ±μΌλ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
- URI : μμ (Resource)
- HTTP Method : νμ (Verb)
- POST : μμ± (Create)
- GET : μ‘°ν (Read)
- PUT : μμ (Update)
- DELETE : μμ (Delete)
- HEAD : header μ 보 μ‘°ν
- Representations : νν
REST APIμ νΉμ§
REST APIλ μλμ κ°μ νΉμ§μ κ°μ§λλ€.
- Uniform interface(μΈν°νμ΄μ€ μΌκ΄μ±) : μ λνΌ μΈν°νμ΄μ€λ URIλ‘ μ§μ ν 리μμ€μ λν μ‘°μμ ν΅μΌλκ³ κ· μΌν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. μν€ν
μ²λ₯Ό λ¨μνκ² λΆλ¦¬νμ¬ λ
립μ μΌλ‘ λ§λ€ μ μμ΅λλ€.
- Self-descriptiveness (μ체 νν ꡬ쑰) : JSONννμ λ©μμ§λ₯Ό ν΅ν΄ λ΄μ©μ μ§κ΄μ μΌλ‘ μ΄ν΄ν μ μμ΅λλ€. μ¦, REST API λ©μμ§ κ΅¬μ‘°λ§μ λ³΄κ³ λ μ½κ² μ΄ν΄ν μ μλ μ체 νν κ΅¬μ‘°λ‘ λμ΄ μμ΅λλ€.
- identification of resources (μμ μλ³) : URIλ₯Ό ν΅ν μμ μλ³μ λ§ν©λλ€. μμμ λνλΌ λμλ λμ¬κ° μλ λͺ μ¬λ₯Ό μ¬μ©ν΄μΌ ν©λλ€. λν, νννκ³ μ νλ μμμ΄ λ³΅μνμΌλ λͺ μκ° νμν©λλ€. ex. http://localhost:8080/movies/...
- manipulation of resources through representation : representation μ μ‘μ ν΅ν΄μ 리μμ€λ₯Ό μ‘°μν΄μΌ ν©λλ€. ( 리μμ€λ₯Ό λ§λ€κ±°λ μμ νκ±°λ ν λ 리μμ€μ HTTP λ©μμ§μ κ·Έ ννμ λ΄μμ μ λ¬ν΄μΌ ν©λλ€. ) ex.content-type, HTTP method
- HATEOAS : hypermedia as the engine of application state ( μ ν리μΌμ΄μ μνμ λν μμ§μΌλ‘μ νμ΄νΌλ―Έλμ΄ ) : μ΄ν리μΌμ΄μ μ μ¬μ©μκ° μ΄λ€ νμλ₯Ό νλλμ λ°λΌ μνκ° λ°λκ² λ©λλ€.
- Stateless (무μνμ±) : μνμ 보λ₯Ό λ°λ‘ μ μ₯νκ±°λ κ΄λ¦¬νμ§ μλ νΉμ§μ κ°μ§λλ€. μ¦, μΈμ λ° μΏ ν€κ°μ μ 보λ₯Ό μ μ₯νμ§ μκΈ° λλ¬Έμ API μλ²λ λ€μ΄μ€λ μμ²μ μ²λ¦¬λ§ νλ©΄ λ©λλ€. λ°λΌμ μλΉμ€μ μμ λκ° λμμ§κ³ μλ²κ° λΆνμν λ΄μ©λ€μ κ΄λ¦¬νμ§ μμμΌλ‘μ¨ λΉμ©μ΄ μ€μ΄λ€κ² λ©λλ€. λ¨, ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ²μ μλ²κ° μμ²μ μμλ€μ μ μκ²λ λͺ¨λ μ 보λ₯Ό λ΄κ³ μμ΄μΌ ν©λλ€.
- Cacheable (μΊμ±) : HTTPλΌλ κΈ°μ‘΄ μΉνμ€μ κ·Έλλ‘ μ¬μ©νκΈ°μ, μΉμμ μ¬μ©νλ κΈ°μ‘΄ μΈνλΌλ₯Ό μ¬μ© ν μ μκ³ κ²°κ΅ HTTPκ° κ°μ§ μΊμ± κΈ°λ₯μ μ¬μ© ν μ μμ΅λλ€.
- Server / Client ꡬ쑰 : ν΄λΌμ΄μΈνΈμ μλ²μ κ΄μ¬μ¬κ° λͺ νν λΆλ¦¬λμ΄ μμ΄μΌ ν©λλ€. μλ²λ ν΄λΌμ΄μΈνΈκ° μνλ λ°μ΄ν°λ₯Ό μ 곡νλ μν , ν΄λΌμ΄μΈνΈλ μλ²κ° 보λ΄μ€ λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ μ¬μ©μκ° μνλ νλ©΄μ 보μ¬μ£Όλ μν μ λ΄λΉν©λλ€.
- κ³μΈ΅ν ꡬ쑰 : REST μλ²λ λ€μ€ κ³μΈ΅μΌλ‘ ꡬμ±λ μ μμΌλ©° 보μ, λ‘λ λ°Έλ°μ±, μνΈν κ³μΈ΅μ μΆκ°ν΄ ꡬ쑰μμ μ μ°μ±μ λ μ μκ³ νλ‘μ, κ²μ΄νΈμ¨μ΄ κ°μ λ€νΈμν¬ κΈ°λ°μ μ€κ°λ§€μ²΄λ₯Ό μ¬μ©ν μ μκ² ν©λλ€.
- Code-On-Demand : μλ²κ° λ€νΈμν¬λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈμ νλ‘κ·Έλ¨μ μ λ¬νλ©΄ κ·Έ νλ‘κ·Έλ¨μ΄ ν΄λΌμ΄μΈνΈμμ μ€νλ μ μμ΄μΌ ν©λλ€. (νμλ μλ option)
μ°Έκ³ ν μ¬μ΄νΈ
'Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] gradle build μ€ν μλ¬ (0) | 2021.11.21 |
---|---|
[Spring] @WebMvcTest λ¨μ ν μ€νΈμ Bean μ£Όμ μλ¬ ν΄κ²° (0) | 2021.11.21 |
[Spring] PSA - μΌκ΄μ± μλ μλΉμ€ μΆμν (0) | 2021.10.04 |
[Spring] AOP μ λν΄μ (2) (0) | 2021.10.04 |
[Spring] IoC/DI μ μ΄μ μμ /μμ‘΄μ± μ£Όμ (3) (0) | 2021.10.03 |
λκΈ