1. REST(REpresentational State Transfer)
RESTλ μμμ μ΄λ¦μΌλ‘ ꡬλΆν΄ ν΄λΉ μμμ μνλ₯Ό μ£Όκ³ λ°λ λͺ¨λ κ²μ μλ―Ένλ€. μ¦, μμ(resource)μ νν(representation)μ μν μν μ λ¬μ λ»νλ€.
- μμ: ν΄λΉ μννΈμ¨μ΄κ° κ΄λ¦¬νλ λͺ¨λ κ²μ΄λ€. Ex) λ¬Έμ, κ·Έλ¦Ό, λ°μ΄ν°, ν΄λΉ μννΈμ¨μ΄ μ체 λ±
- νν: μμμ νννκΈ° μν μ΄λ¦μ΄λ€. Ex) DBμ νμ μ λ³΄κ° μμμ΄λ©΄ studentsλ₯Ό μμμ ννμΌλ‘ μ νλ€.
- μν μ λ¬: λ°μ΄ν°κ° μμ²λλ μμ μ μμμ μνλ₯Ό μ λ¬νλ€. JSON νΉμ XMLμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
κΈ°λ³Έμ μΌλ‘ μΉμ κΈ°μ‘΄ κΈ°μ κ³Ό HTTP νλ‘ν μ½μ κ·Έλλ‘ νμ©νκΈ° λλ¬Έμ μΉμ μ₯μ μ μ΅λν νμ©ν μ μλ μν€ν μ² μ€νμΌμ΄λ€.
1) κ΅¬μ± μμ
μ΄λ€ μμμ λν΄ CRUD(Create, Read, Update, Delete) μ°μ°μ μννκΈ° μν΄ URI(Resource)λ‘ GET, POST λ±μ λ°©μ(Method)μ μ¬μ©νμ¬ μμ²μ 보λ΄λ©°, μμ²μ μν μμμ νΉμ ν νν(Representation of Resource)λ‘ ννλλ€.
- μμ(Resource)
- λͺ¨λ μμμλ κ³ μ ν IDκ° μ‘΄μ¬νκ³ μ΄ μμμ Serverμ μ‘΄μ¬νλ€.
- μμμ ꡬλ³νλ IDλ '/exgroups/:exgroup_id'μ κ°μ HTTP URIμ΄λ€.
- Clientλ URIλ₯Ό μ΄μ©ν΄ μμμ μ§μ νκ³ ν΄λΉ μμμ μν(μ 보)μ λν μ‘°μμ Serverμ μμ²νλ€.
- νμ(Verb)
- HTTP νλ‘ν μ½μ Methodλ₯Ό μ¬μ©νλ€.
- HTTP νλ‘ν μ½μ GET, POST, PUT, PATCH, DELETEμ Methodλ₯Ό μ 곡νλ€. (CRUD)
- GET: Read, URIκ° κ°μ§ μ 보λ₯Ό κ²μνκΈ° μν΄ μλ²μ μμ²νλ€.
- POST: Create, ν΄λΌμ΄μΈνΈμμ μλ²λ‘ μ λ¬νλ €λ μ 보λ₯Ό 보λΈλ€.
- PUT: Update, λ°μ΄ν° μ 체λ₯Ό κ°±μ νκΈ° μν΄ μ¬μ©νλ€.
- PATCH: Update, λ°μ΄ν° μΌλΆλ§ κ°±μ νκΈ° μν΄ μ¬μ©νλ€.
- DELETE: Delete, μμ μ± λ¬Έμ λ‘ λλΆλΆ μλ²μμ λΉνμ±ννλ€.
- νν(Representation of Resource)
- Clientμ Serverκ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ ννλ‘ JSON, XML, TEXT, RSS λ±μ΄ μλ€.
- JSON, XMLμ ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
2) νΉμ§
- Server-Client(μλ²-ν΄λΌμ΄μΈνΈ ꡬ쑰)
- μμμ΄ μλ μͺ½μ΄ Serverμ΄κ³ μμμ μμ²νλ μͺ½μ΄ Clientμ΄λ€.
- Serverλ APIλ₯Ό μ 곡νκ³ λΉμ¦λμ€ λ‘μ§ μ²λ¦¬ λ° μ μ₯μ μ± μμ§κ³ Clientλ μ¬μ©μ μΈμ¦μ΄λ context(μΈμ , λ‘κ·ΈμΈ μ 보) λ±μ μ§μ κ΄λ¦¬νκ³ μ± μμ§λ€.
- μν μ νμ€ν ꡬλΆμν΄μΌλ‘μ¨ μλ‘ κ°μ μμ‘΄μ±μ μ€μΌ μ μλ€.
- Stateless(무μν)
- HTTP νλ‘ν μ½μ Stateless Protocolμ΄λ―λ‘ REST μμ 무μνμ±μ κ°λλ€.
- Clientμ contextλ₯Ό Serverμ μ μ₯νμ§ μλλ€. μ¦, μΈμ κ³Ό μΏ ν€μ κ°μ context μ 보λ₯Ό μ κ²½ μ°μ§ μμλ λλ―λ‘ κ΅¬νμ΄ λ¨μν΄μ§λ€.
- Serverλ κ°κ°μ μμ²μ μμ ν λ³κ°μ κ²μΌλ‘ μΈμνκ³ μ²λ¦¬νλ€.
- κ° API μλ²λ Clientμ μμ²λ§μ λ¨μ μ²λ¦¬νλ€. μ¦, μ΄μ μμ²μ΄ λ€μ μμ²μ μ²λ¦¬μ μ°κ΄λμ΄μλ μ λλ€.
- Serverμ μ²λ¦¬ λ°©μμ μΌκ΄μ±μ λΆμ¬νκΈ° λλ¬Έμ μλΉμ€μ μμ λκ° λμμ§λ€.
- Cacheable(μΊμ μ²λ¦¬ κΈ°λ₯)
- μΉ νμ€ HTTP νλ‘ν μ½μ κ·Έλλ‘ μ¬μ©νλ―λ‘ μΉμμ μ¬μ©νλ κΈ°μ‘΄μ μΈνλΌλ₯Ό κ·Έλλ‘ νμ©ν μ μλ€.
- μ¦, HTTPκ° κ°μ§ κ°μ₯ κ°λ ₯ν νΉμ§ μ€ νλμΈ μΊμ± κΈ°λ₯μ μ μ©ν μ μλ€.
- HTTP νλ‘ν μ½ νμ€μμ μ¬μ©νλ Last-Modified Tag λλ E-Tagλ₯Ό μ΄μ©ν΄ μΊμ±μ ꡬννλ€.
- λλμ μμ²μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μλ€.
- μΉ νμ€ HTTP νλ‘ν μ½μ κ·Έλλ‘ μ¬μ©νλ―λ‘ μΉμμ μ¬μ©νλ κΈ°μ‘΄μ μΈνλΌλ₯Ό κ·Έλλ‘ νμ©ν μ μλ€.
- Layered System(κ³μΈ΅ ꡬ쑰)
- Clientλ REST API Serverλ§ νΈμΆνλ€.
- REST Serverλ λ€μ€ κ³μΈ΅μΌλ‘ ꡬμ±λ μ μλ€.
- 보μ, λ‘λ λ°Έλ°μ±, μνΈν λ±μ μν κ³μΈ΅μ μΆκ°νμ¬ κ΅¬μ‘°λ₯Ό λ³κ²½ν μ μλ€.
- Proxy, Gatewayμ κ°μ λ€νΈμν¬ κΈ°λ°μ μ€κ° 맀체λ₯Ό μ¬μ©ν μ μλ€.
- νμ§λ§ Clientλ Serverμ μ§μ ν΅μ νλμ§, μ€κ° μλ²μ ν΅μ νλμ§λ μ μ μλ€.
- Uniform Interface(μΈν°νμ΄μ€ μΌκ΄μ±)
- URIλ‘ μ§μ ν Resourceμ λν μμ²μ ν΅μΌλκ³ νμ μ μΌλ‘ μννλ μν€ν μ² μ€νμΌμ μλ―Ένλ€.
- HTTP νμ€ νλ‘ν μ½μ λ°λ₯΄λ λͺ¨λ νλ«νΌμμ μ¬μ©μ΄ κ°λ₯νλ©°, Loosely Coupling(λμ¨ν κ²°ν¨) ννλ₯Ό κ°λλ€. μ¦, νΉμ μΈμ΄λ κΈ°μ μ μ’ μλμ§ μλλ€.
- Self-Descriptiveness(μ체 νν)
- μμ² λ©μμ§λ§ λ³΄κ³ λ μ½κ² μ΄ν΄ν μ μλ μ체 νν κ΅¬μ‘°λ‘ λμ΄μλ€.
2. REST API
REST APIλ RESTμ νΉμ§μ κΈ°λ°μΌλ‘ μλΉμ€ APIλ₯Ό ꡬνν κ²μ λ§νλ€.
- κ°μ₯ ν° νΉμ§μ κ° μμ²μ΄ μ΄λ€ λμμ΄λ μ 보λ₯Ό μν κ²μΈμ§λ₯Ό κ·Έ μμ²μ λͺ¨μ΅ μμ²΄λ‘ μΆλ‘ μ΄ κ°λ₯νλ€λ μ μ΄λ€.
- μ΅κ·Ό OpenAPI, λ§μ΄ν¬λ‘ μλΉμ€ λ±μ μ 곡νλ κΈ°μ λλΆλΆμ REST APIλ₯Ό μ 곡νλ€.
REST API μ€κ³ μ κ°μ₯ μ€μν νλͺ©μ λ€μκ³Ό κ°λ€.
첫 λ²μ§Έ, URIλ μ 보μ μμμ ννν΄μΌ νλ€.
λ λ²μ§Έ, μμμ λν νμλ HTTP Method(GET, POST, PUT, PATCH, DELETE)λ‘ νννλ€.
3. RESTful API
RESTfulμ RESTμ μ€κ³ κ·μΉμ μ μ§μΌμ μ€κ³λ APIλ₯Ό RESTfulν APIλΌκ³ νλ€. μ¦, RESTμ μ리λ₯Ό μ λ°λ₯΄λ μμ€ν μ RESTfulμ΄λ μ©μ΄λ‘ μ§μΉλλ€.
- RESTfulνκ² λ§λ APIλ μμ²μ 보λ΄λ μ£Όμλ§μΌλ‘λ μ΄λ€ κ²μ μμ²νλμ§ νμ μ΄ κ°λ₯νλ€.
- RESTful APIλ μ΄ν΄νκΈ° μ½κ³ μ¬μ©νκΈ° μ¬μ΄ REST APIλ₯Ό λ§λλ κ²μ΄ λͺ©μ μ΄λ€. λ§μ½, μ±λ₯μ΄ μ€μν μν©μ΄λΌλ©΄ κ΅³μ΄ RESTful APIλ₯Ό ꡬνν νμλ μλ€.