πRESTλ
RESTλ Representational State Transferμ μ½μλ‘ μμμ μ΄λ¦μΌλ‘ ꡬλΆνμ¬ ν΄λΉ μμ(Resourse)μ μνλ₯Ό μ£Όκ³ λ°λ λͺ¨λ κ²μ μλ―Ένλ€.
μ¦, μμμ ννμ μν μν μ λ¬μ΄λ€. μμμ ννμ κ·Έ μμμ νννκΈ° μν μ΄λ¦μ μλ―Ένκ³ μν μ λ¬μ λ°μ΄ν°κ° μμ²λλ μμ μμ μμμ μνλ₯Ό μ λ¬νλκ²μ΄λ€.μΌλ°μ μΌλ‘ JSON μ΄λ XMLμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μλ€.
WWW(World Wide Web)κ³Ό κ°μ λΆμ νμ΄νΌλ―Έλμ΄ μμ€ν μ μν μννΈμ¨μ΄ κ°λ° μν€νμ³μ ν νμμ΄λ€.RESTλ κΈ°λ³Έμ μΌλ‘ μΉμ κΈ°μ‘΄μ κΈ°μ κ³Ό HTTPνλ‘ν μ½μ κ·Έλλ‘ νμ©νκΈ° λλ¬Έμ μΉμ μ₯μ μ μ΅λν νμ©ν μ μλ μν€νμ³μ΄λ€.
RESTμ μμΈν κ°λ μ HTTP URIλ₯Ό ν΅ν΄ μμμ λͺ μνκ³ ,HTTP Method(POST,GET,PUT,DELETE)λ₯Ό ν΅ν΄ ν΄λΉ μμμ λν CRUD μμ μ μ μ© νλκ²μ΄λ€.
RESTλ μμ κΈ°λ°μ ꡬ쑰 μ€κ³μ μ€μ¬μ μμ(Resourse)κ° μκ³ HTTP Methodλ₯Ό ν΅ν΄ μμμ μ²λ¦¬νλλ‘ μ€κ³λ μν€ν μ³μ΄λ€.
πRESTκ° νμν μ΄μ
- μ ν리μΌμ΄μ μ λΆλ¦¬ λ° ν΅ν©
- λ€μν ν΄λΌμ΄μΈνΈ λ±μ₯
- μλ²νλ‘κ·Έλ¨μ λ€μν λΈλΌμ°μ μ μλλ‘μ΄λ ,μμ΄ν° λ± λͺ¨λ°μΌ λλ°μ΄μ€μμλ ν΅μ μ΄ κ°λ₯ν΄μΌνλ€.
πRESTμ μ₯λ¨μ
- μ₯μ
- REST APIλ₯Ό μ¬μ©νκΈ°μν΄ λ³λλ‘ μΈνλΌλ₯Ό ꡬμΆν νμκ° μλ€.
- HTTP νμ€ νλ‘ν μ½μ λ°λ₯΄λ λͺ¨λ νλ«νΌμ΄ μ¬μ©κ°λ₯νλ€.
- νμ΄νΌλ―Έλμ΄API μ κΈ°λ³Έμ μΆ©μ€ν μ§ν€λ©΄μ λ²μ©μ±μ 보μ₯νλ€.
- μλ²μ ν΄λΌμ΄μΈνΈ μν λΆλ¦¬κ° νμ€νλ€.
- HTTP νλ‘ν μ½μ νμ€μ μ΅λν νμ©νμ¬ μΆκ°μ μΈ μ₯μ μ ν¨κ» κ°μ Έκ° μ μκ² ν΄μ€λ€.
- λ¨μ
- λͺ νν νμ€μ΄ μ‘΄μ¬νμ§ μλλ€.
- HTTP Methodννκ° μ νμ μ΄λ€.
- ꡬν λΈλΌμ°μ λ μμ§ μ λλ‘ μ§μν΄μ£Όμ§ λͺ»ν΄ PUT,DELETEλ₯Ό μ¬μ©νμ§ λͺ»νλ€.
πRESTμ ꡬμ±μμ
- μμ(Resourse)
- λͺ¨λ μμμλ κ³ μ ν IDκ° μ‘΄μ¬νκ³ , μ΄ μμμ Serverμ μ‘΄μ¬νλ€.
- μμμ ꡬλ³νλ κ³ μ ν IDλ HTTP URIμ΄λ€.
- ν΄λΌμ΄μΈνΈλ URIλ₯Ό μ΄μ©ν΄μ μμμ μ ννκ³ ν΄λΉ μμμ μνμ λν μ‘°μμ Serverμ μμ²νλ€.
- νμ(Verb)
- HTTP νλ‘ν μ½μ GET, POST, PUT, DELETE μ κ°μ λ©μλλ₯Ό μ 곡νλ€.
- νν(Representations)
- ν΄λΌμ΄μΈνΈκ° μμμ μνμ λν μ‘°μμ μμ²νλ©΄ Serverλ μ΄μ μ μ ν μλ΅μ 보λΈλ€.
- RESTμμ νλμ μμμ JSON, XML, TEXT, RSS λ± μ¬λ¬ ννμ RepresentationμΌλ‘ λνλ΄μ΄ μ§ μ μλ€.
- JSON νΉμ XMLλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
πREST νΉμ§
- Server-Client
- μμμ΄ μλ μͺ½μ΄ Server, μμμ μμ²νλ μͺ½μ΄ Clientκ° λλ€.
- Server : APIλ₯Ό μ 곡νκ³ λΉμ¦λμ€ λ‘μ§ μ²λ¦¬ λ° μ μ₯μ μ± μμ§λ€.
- Client : μ¬μ©μ μΈμ¦μ΄λ contextλ±μ μ§μ κ΄λ¦¬νκ³ μ± μμ§λ€.
- μλ‘ κ°μ μμ‘΄μ±μ΄ μ€μ΄λ λ€.
- μμμ΄ μλ μͺ½μ΄ Server, μμμ μμ²νλ μͺ½μ΄ Clientκ° λλ€.
- Stateless(무μν)
- HTTP νλ‘ν μ½μ Stateless Protocolμ΄λ―λ‘ REST λν 무μνμ±μ κ°λλ€.
- ν΄λΌμ΄μΈνΈμ contextλ₯Ό μλ²μ μ μ₯νμ§ μλλ€.(μΈμ κ³Ό μΏ ν€μ κ°μ contextμ 보λ₯Ό μ κ²½μ°μ§ μμλ λλ―λ‘ κ΅¬νμ΄ λ¨μν΄μ§λ€.)
- μλ²λ κ°κ°μ μμ²μ μμ ν λ³κ°μ κ²μΌλ‘ μΈμνκ³ μ²λ¦¬νλ€.
- APIμλ²λ Clientμ μμ²λ§μ μ²λ¦¬νλ€.
- μ΄μ μμ²μ΄ λ€μμμ²μ μν₯μ μ£Όμ΄μλ μλλ€.(DBλ₯Ό μμ νμ¬ DBμ μν΄ λ°λλ κ²μ μκ΄μμ)
- μλ²μ μ²λ¦¬ λ°©μμ μΌκ΄μ±μ λΆμ¬νκ³ λΆλ΄μ΄ μ€μ΄λ€μ΄ μλΉμ€μ μμ λκ° λμμ§λ€.
- Cacheable
- HTTPνλ‘ν μ½μ μ¬μ©νλ―λ‘ μΉμμ μ¬μ©νλ κΈ°μ‘΄μ μΈνλΌλ₯Ό κ·Έλλ‘ νμ©κ°λ₯νλ€.(λνμ μΌλ‘ μΊμ±κΈ°λ₯ μ¬μ©κ°λ₯)
- λλμ μμ²μ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ μΊμκ° μꡬλλ€.
- μΊμ μ¬μ©μ ν΅ν΄ μλ΅μκ°μ΄ 빨리μ§κ³ REST μλ² νΈλμμ μ΄ λ°μνμ§ μκΈ° λλ¬Έμ μ 체 μλ΅μκ°μ΄λ μ±λ₯, μλ²μ μμ μ΄μ©λ₯ μ ν₯μ μν¬μ μλ€.
- Layered System
- ν΄λΌμ΄μΈνΈλ REST API μλ²λ§ νΈμΆνλ€.
- REST μλ²λ λ€μ€ κ³μΈ΅μΌλ‘ κ΅¬μ± κ°λ₯νλ€.(λ‘λλ°Έλ°μ±,곡μ μΊμ λ±μ ν΅ν΄ νμ₯μ±κ³Ό 보μμ±μ ν₯μμν¬ μ μλ€.)
- λ€νΈμν¬ κΈ°λ°μ μ€κ° 맀체λ₯Ό μ¬μ©ν μ μλ€.(EX: proxy,Gateway)
- Code-on-Demand
- μλ²λ‘ λΆν° μ€ν¬λ¦½νΈλ₯Ό λ°μμ Clientμμ μ€ννλ€.
- Uniform Interface
- URIλ‘ μ§μ ν Resourseμ λν μ‘°μμ ν΅μΌλκ³ νμ μ μΈ μΈν°νμ΄μ€λ‘ μννλ€.
- HTTP νμ€μ λ°λ₯΄λ λͺ¨λ νλ«νΌμμ μ¬μ©κ°λ₯νλ€.
πREST APIλ
API(Application programming Interface)
- λ°μ΄ν°μ κΈ°λ₯μ λͺ¨μμ μ»΄ν¨ν° νλ‘κ·Έλ¨κ°μ μνΈμμ©μ μ΄μ§νλ©°, μλ‘ μ 보λ₯Ό κ΅νκ°λ₯ νλλ‘ νλκ²
REST API
- REST APIλ RESTκΈ°λ°μΌλ‘ APIλ₯Ό ꡬνν κ²μ΄λ€.
- REST κΈ°λ°μΌλ‘ μμ€ν μ λΆμν΄ νμ₯μ±κ³Ό μ¬μ¬μ©μ±μ λμ¬ μ μ§λ³΄μ λ° μ΄μ©μ νΈλ¦¬νκ² ν μμλ€.
- RESTλ HTTP κΈ°λ°μΌλ‘ ꡬννλ―λ‘,HTTPλ₯Ό μ§μνλ νλ‘κ·Έλ¨μΈμ΄λ‘ ν΄λΌμ΄μΈνΈ ,μλ²λ₯Ό ꡬνν μ μλ€.
πREST API μ€κ³ κ·μΉ
URIλ μ 보μ μμμ ννν΄μΌ νλ€.
- 리μμ€λ λμ¬λ³΄λ€ λͺ μ¬,λλ¬Έμ보λ€λ μλ¬Έμλ₯Ό μ¬μ©νλ€.
- 리μμ€λ λνλ¨ΌνΈ μ΄λ¦μΌλ‘λ λ¨μ λͺ μ¬λ₯Ό μ¬μ©ν΄μΌ νλ€.
- 리μμ€μ 컬λ μ μ΄λ¦μΌλ‘λ 볡μ λͺ μ¬λ₯Ό μ¬μ©ν΄μΌ νλ€.
- 리μμ€μ μ€ν μ΄ μ΄λ¦μΌλ‘λ 볡μ λͺ
μ¬λ₯Ό μ¬μ©ν΄μΌ νλ€.
- EX) GET /Member/1 -> GET /members/1
리μμ€μ λν νμλ HTTP Method(GET, PUT ,POST DELETE)λ‘ νννλ€.
- URIμ HTTP Methodκ° λ€μ΄κ°λ©΄ μλλ€.
- EX)GET /store/delete/1 -> DELETE /stores/1
- URIμ νμμ λν λμ¬ ννμ΄ λ€μ΄κ°λ©΄ μλλ€.
- EX)GET /store/show/1 -> GET /stores/1
- EX)GET /store/insert/12 -> POST /store/1
- κ²½λ‘ λΆλΆ μ€ λ³νλ λΆλΆμ μ μΌν κ°μΌλ‘ λ체νλ€.
- id = 1 μΈ μν μμ νλ route : DELETE/product/1
πμ€κ³ κ·μΉ
- μ¬λμ(/)λ κ³μΈ΅ κ΄κ³λ₯Ό λνλ΄λλ° μ¬μ©νλ€.
- EX)http://localhost.com/product/1
- URI λ§μ§λ§ λ¬Έμλ‘ μ¬λμ(/)λ₯Ό ν¬ν¨νμ§ μλλ€.
- URIμ ν¬ν¨λλ λͺ¨λ κΈμλ 리μμ€μ μ μΌν μλ³μλ‘ μ¬μ©λμ΄μΌ νλ€.
- URI κ²½λ‘ λ§μ§λ§μλ μ¬λμ(/)λ₯Ό μ¬μ©νμ§ μλλ€.
- EX)http://localhost.com/product/1/ (X)
- νμ΄ν( - )μ κ°λ
μ±μ λμ΄λλ° νμ©νλ€.
- κΈ΄ URIκ²½λ‘λ₯Ό μ¬μ©νκ²λλ©΄ νμ΄νμ μ¬μ©ν΄ κ°λ μ±μ λμΈλ€.
- λ°μ€(_)μ URIμ μ¬μ©νμ§ μλλ€.
- λ¬Έμμ κ°λ €μ§μ μμΌλ―λ‘ λ°μ€μ μ¬μ©νμ§ μλλ€.
- URIκ²½λ‘μλ μλ¬Έμκ° μ ν©νλ€.
- RFC 3986μ URI μ€ν€λ§μ νΈμ€νΈλ₯Ό μ μΈνκ³ λ λμλ¬Έμλ₯Ό ꡬλ³νλλ‘ κ·μ νκΈ° λλ¬Έμ λλ¬Έμλ₯Ό μ¬μ©νμ§ μλλ€.
- νμΌνμ₯μλ URIμ ν¬ν¨νμ§ μλλ€.
- REST APIμμλ λ©μμ§ λ°λ λ΄μ©μ ν¬λ§·μ λνλ΄κΈ° μν νμΌ νμ₯μλ₯Ό URI μμ ν¬ν¨μν€μ§ μλλ€.
- Ex) http://localhost.com/product/1/photo.jpg (X)
Ex) GET /product/1/photo HTTP/1.1 Host: localhost.com Accept: image/jpg (O)
- REST APIμμλ λ©μμ§ λ°λ λ΄μ©μ ν¬λ§·μ λνλ΄κΈ° μν νμΌ νμ₯μλ₯Ό URI μμ ν¬ν¨μν€μ§ μλλ€.
πREFERENCE
'Dev' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[AWS]EC2μ JDK 11μ€μΉνκΈ° (0) | 2021.10.25 |
---|---|
μΈμ κ΄λ¦¬ μ λ΅ (0) | 2021.10.21 |
DataBase Engine(λ°μ΄ν° λ² μ΄μ€ μμ§) (0) | 2021.09.28 |
νλ‘μ(Proxy)λ (0) | 2021.07.26 |
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP) (0) | 2021.06.16 |