[Web] REST & RESTful
REST & RESTful
RESTλ HTTP, νλ‘ν μ½μ΄ μλλ€! RESTλ μΌμ’ μ κ°μ΄λλΌμΈμ΄λ€.
REST API λ REST κΈ°λ°μΌλ‘ μλΉμ€ APIλ₯Ό ꡬνν κ²
REST μ리λ₯Ό λ°λΌλ₯΄λ μμ€ν (μλΉμ€)λ₯Ό RESTful μ΄λΌκ³ νλ€. = REST API λ₯Ό μ 곡νλ μΉ μλΉμ€λ₯Ό RESTful νλ€κ³ ν μ μλ€.
REST
RESTλ Representational State Transferμ μ½μλ‘ λΆμ° νμ΄νΌ λ―Έλμ΄ μμ€ν μ μν μννΈμ¨μ΄ μν€ν μ²μ ν νμμ΄λ€.
μΉμ μ‘΄μ¬νλ λͺ¨λ μμ(μ΄λ―Έμ§, λμμ, DBμμ)μ κ³ μ ν URLμ λΆμ¬ν΄ νμ©νλ κ²μΌλ‘ μμμ μ μνκ³ μμμ λν μ£Όμλ₯Ό μ§μ νλ λ°©λ²λ‘ μ μλ―Ένλ€. → URLμ μμμ νννλ κ²
HTTP URI λ₯Ό ν΅ν΄ μμμ λͺ μνκ³ HTTP Methodλ₯Ό ν΅ν΄ ν΄λΉ μμμ λν CRUD Operation(μμ±, μ‘°ν, λ³κ²½, μμ )μ μ μ©νλ€.
HTTP URI(Uniform Resource Identifier)
URIλ λ€νΈμν¬ μμ μ‘΄μ¬νλ μμμ ꡬλΆνλ μλ³μμ΄λ€. URIμ URL, URNλ‘ μ΄λ£¨μ΄μ ΈμμΌλ©° URLμ Whereμ κ°λ , 리μμ€μ ꡬ체μ μΈ μμΉλ₯Ό μλ €μ£Όκ³ , URNμ Whatμ κ°λ , μ΄λ¦μΌλ£ νμλλ©° μ μΌν κ°μ΄κ³ λ 립μ μ΄λ€.
URN, URLμ ν©μ³ νλμ μλ³μλ‘ νμ©ν μ μλ€. (μΆμ²)
HTTP Method
HTTP μλ΅μ½λ λ©μλ μ 리 GET, POST, PUT, PATCH, DELETE, TRACE, OPTIONS
HTTP Request μ 보 GET /index.html HTTP/1.1 μμ² URLμ 보 (Mehotd /URI HTTPλ²μ Ό) user-agent: MSIE 6.0; Window NT 5.0 μ¬μ©μ μΉ λΈλΌμ°μ Έ μ’ λ₯ accept: test/html; */* μμ² λ°μ΄ν° νμ (μλ΅..
javaplant.tistory.com
ꡬμ±μμ
- Resource : μμ, HTTP URI
- Verb : μμμ λν νμ, HTTP Method
- Representations : μμμ λν νμμ λ΄μ©, HTTP Message Pay Load
REST μ νΉμ§
6κ°μ§ μ μ½ μ‘°κ±΄. ν΄λΉ νΉμ§μ μ§μΌμΌ APIκ° RESTfulλ‘ κ°μ£Όλ μ μλ€.
- ν΄λΌμ΄μΈνΈ / μλ² κ΅¬μ‘° (Client-Server)
μμμ΄ μλ Server , μμμ μμ²νλ Clientμ ꡬ쑰 - 무μν (Stateless)
HTTPλ Stateless νλ‘ν μ½ μ΄λ―λ‘ REST μμ 무μνμ±μ κ°μ§λ€. ν΄λΌμ΄μΈνΈμ Content λ₯Ό μλ²μ μ μ₯νμ§ μλλ€.
λμ μΈμ μ μνμ λν μ λ³΄κ° ν΄λΌμ΄μΈνΈμ μ μ₯λ¨ - μΊμ μ²λ¦¬ κ°λ₯ (Cacheable)
μΉ νμ€ HTTP νλ‘ν μ½μ κ·Έλλ‘ μ¬μ©νλ―λ‘ , μΉμμ μ¬μ©νλ κΈ°μ‘΄μ μΈνλΌλ₯Ό κ·Έλλ‘ νμ© κ°λ₯νλ€.
ν΄λΌμ΄μΈνΈ-μλ² μνΈ μμ©μ κ°μνν¨
β·GET - μΌλ°μ μΌλ‘ λΈλΌμ°μ μμ cache μ¬μ© κ°λ₯
β·POST - μΌλ°μ μΌλ‘ cache μ¬μ© λΆκ°λ₯. νμ§λ§ Expiresμ Cache-Control headerλ₯Ό μ΄μ©νμ¬ cachingμ ꡬννμ¬ μλ΅ν μ μλ€.
β·PUT, DELETE - ν΄λΉ Requestλ cacheλ₯Ό μ μ©ν μ μλ€. - κ³μΈ΅ν
API μλ²λ μμ λΉμ¦λμ€ λ‘μ§μ μννκ³ κ·Έ μλ¨μ μ¬μ©μ μΈμ¦ , μνΈν , λ‘λλ°Έλ°μ± λ±μ νλ κ³μΈ΅μ μΆκ°νμ¬ κ΅¬μ‘°μμ μ μ°μ±μ μ€ μ μλ€. - μΈν°νμ΄μ€ μΌκ΄μ±(Uniform Interface)
URIλ‘ μ§μ ν μμμ λν μ‘°μμ ν΅μΌλκ³ νμ μ μΈ μΈν°νμ΄μ€λ‘ μννλ€.
HTTP νμ€μλ§ λ°λ₯Έλ€λ©΄ λͺ¨λ νλ«νΌμ μ¬μ©μ΄ κ°λ₯νλ€. - μ체 νν ꡬ쑰
λμ¬(Method) + λͺ μ¬(URI) λ‘ μ΄λ£¨μ΄μ Έμμ΄ μ΄λ€ λ©μλμ λ¬΄μ¨ νμλ₯Ό νλμ§ μ μ μμΌλ©° REST API μμ²΄κ° λ§€μ° μ¬μμ API λ©μΈμ§ μμ²΄λ§ λ³΄κ³ λ APIλ₯Ό μ΄ν΄ν μ μλ€.
REST API μμ λ©±λ±μ±μ΄λ?
λ©±λ±μ±μ΄λ μ΄λ€ λμμ κ°μ μ°μ°μ μ¬λ¬λ² μ μ©ν΄λ κ²°κ³Όκ° λ¬λΌμ§μ§ μλ μ±μ§μ΄λ€.
REST API μμ λ©±λ±μ±μ΄λ μλ΅μ΄ λ€λ₯Ό μλ μμ§λ§, μμ²μ΄ μλν ν¨κ³Όλ₯Ό λ°νν λ λ©±λ±μ±μ΄ μ μ§λ¨μ μλ―Ένλ€. (μ¬λ¬λ² μμ²μ 보λ΄λ μμ²μ μν μλ²μ μνλ νμ κ°μ)
Method | λ©±λ±μ± 보μ₯ | μ€λͺ |
GET | O | λ¨μ 리μμ€ μ½μ΄μ€λ νμμ΄λ―λ‘ μ¬λ¬λ² μνν΄λ κ²°κ³Όκ° λ¬λΌμ§μ§ μμ |
HEAD | O | GETκ³Ό λ§μ°¬κ°μ§ |
PUT(μμ μ 체 κ°±μ ) | O | λ°μ΄ν°κ° μλ κ²½μ° μμ±λ μ μμ, μ΄λ―Έ μ‘΄μ¬νλ€λ©΄ λ°μ΄ν°λ μμ λλ€. μμ²μ λ΄κΈ΄ 리μμ€λ‘ κΈ°μ‘΄ 리μμ€λ₯Ό λ체ν΄λ²λ¦¬κΈ° λλ¬Έμ μ¬λ¬λ² μνν΄λ μμ²μ λ΄κΈ΄ 리μμ€κ° λ³νμ§ μλ μ΄μ μ°μ° κ²°κ³Όλ λμΌ |
DELETE | O | μ΄λ―Έ μ‘΄μ¬νλ , μ‘΄μ¬νμ§ μλ κ·Έ λ°μ΄ν°λ DELETE μμ²μ λ³΄λΈ μμ μμ μ¬λΌμ§κ² λλ€. μ¦, μ°λ¦¬κ° μμ²ν μ¬νμ μ΄λ£¨μ΄ μ‘μ |
POST | X | 리μμ€λ₯Ό μλ‘κ² μμ±νλ νμμ΄κΈ° λλ¬Έμ μ¬λ¬λ² μννκ² λλ©΄ λ§€λ² μλ‘μ΄ λ¦¬μμ€κ° μμ±λ κ²μ΄κ³ , μ°μ°μ μνν κ²°κ³Όκ° λ§€λ² λ¬λΌμ§λ€. |
PATCH(μμμ μΌλΆ κ΅μ²΄) | β³ | ꡬν λ°©λ²μ λ°λΌ PUT λ©μλμ²λΌ 보μ₯λ μλ μκ³ , 보μ₯λμ§ μμ μλ μλ€. PUT λ©μλμ²λΌ 리μμ€λ₯Ό λ체νλ νμκ° μλκΈ° λλ¬Έμ μμ²μ μ΄λ€ λ°©μμΌλ‘ μ¬μ©νλμ§μ λν μ νμ΄ λ±ν μκΈ° λλ¬Έμ΄λ€. 1. μμ ν 리μμ€μ μΌλΆλΆλ§ λ΄μμ μμ²νλ κ²½μ°μλ λΉμ°ν λ©±λ±μ±μ΄ 보μ₯λλ€. 2. νμ§λ§, μλμ κ°μ κ²½μ° $increaseνλ κ°μ μ¦κ°μν€κ³ μΆμ μμ±μ μλ―Ένκ³ , value νλ κ°μ κ·Έ μμ±μ μΌλ§λ μ¦κ°μν¬ κ²μΈμ§λ₯Ό λνλΈλ€. μ΄ κ²½μ° APIκ° νΈμΆλ λλ§λ€ λμ΄κ° 1μ© μ¦κ°νκΈ° λλ¬Έμ μ΄ APIλ λ©±λ±μ±μ 보μ₯νμ§ μλλ€. PATCH users/1 { $increase: 'age', value: 1, } μ΄λ°μμΌλ‘ PATCH λ©μλλ₯Ό μ¬μ©νλ κ²½μ°λ λͺ»λ΄€μ§λ§ μ€ν μ μ μ½μ΄ μκΈ° λλ¬Έμ νμ€μ μ΄κΈ°λ κ²μ μλλ€. λ°λΌμ PATCH λ©μλλ APIλ₯Ό μ΄λ»κ² ꡬννλλμ λ°λΌ λ©±λ±μ±μ 보μ₯ν μλ μκ³ μλ μλ μλ€. |
μμ ν λ©μλ : GET, HEADμ κ°μ΄ μλ²μΈ‘μ μν μ 보λ₯Ό λ³κ²½νμ§ μλ λ©μλ
λ©±λ±ν λ©μλ : μλ²μ μνλ₯Ό λ³κ²½μν¬ μλ μκ³ , μν€μ§ μμ μλ μλ€. λ€λ§, μ°λ¦¬κ° μμ²ν μ¬νμ μλ¬κ° λκ±°λ, μ§μ°μ΄ λ°μνμ§ μλ ν μμ²μ λν μλ²μ μνλ νμ κ°λ€.
REST μ₯λ¨μ
μ₯μ
- μ¬μ΄ μ¬μ©
HTTP μΈνλΌλ₯Ό κ·Έλλ‘ μ¬μ©νλ―λ‘ λ³λμ μΈνλΌ κ΅¬μΆμ΄ νμ μλ€. - ν΄λΌμ΄μΈνΈ-μλ² μν μ λͺ
νν λΆλ¦¬
ν΄λΌμ΄μΈνΈμ Contextλ₯Ό μ μ§ν νμ μμ - νΉμ λ°μ΄ν° ννμ μ¬μ© κ°λ₯
ν€λ λΆλΆμ URI μ²λ¦¬ λ©μλλ₯Ό λͺ μνκ³ νμν μ€μ λ°μ΄ν°λ₯Ό bodyμ ννν μ μλλ‘ λΆλ¦¬μν΄. JSON, XML λ± μνλ Representation μΈμ΄λ‘ μ¬μ© κ°λ₯
λ¨μ
- λ©μλ νκ³
HTTP Methodλ‘ URIλ₯Ό νννκΈ° λλ¬Έμ μ½μ§λ§ ννκ° μ νμ μ - νμ€μ΄ μμ
RESTλ μ€κ³ κ°μ΄λμΌ λΏ λͺ νν νμ€μ΄ μλ€.
μ°Έκ³
- medium.com/@hckcksrl/rest%EB%9E%80-c602c3324196
- poiemaweb.com/js-rest-api
- https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
- https://sabarada.tistory.com/34
- https://oen-blog.tistory.com/211
- https://velog.io/@dion/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1-%EA%B7%B8%EA%B2%8C-%EB%AD%94%EB%8D%B0