π€ What is RESTful API?
RESTλ?
μλ μμ΄λ μΉμ μν€ν μ² μ€κ³ λ° κ°λ°μ μλ΄νκΈ° μν΄ λ§λ€μ΄μ§ μννΈμ¨μ΄ μν€ν μ² μ€νμΌ
- λΆμ°ν μΈν°λ· κ·λͺ¨ νμ΄νΌλ―Έλμ΄ μμ€ν μ μν€ν μ²κ° μ΄λ»κ² μλν΄μΌ νλμ§μ λν μΌλ ¨μ μ μ½ μ‘°κ±΄μ μ μ
- ν΅μΌλ μΈν°νμ΄μ€, κ΅¬μ± μμμ λ 립μ λ°°ν¬, κ΅¬μ± μμ κ°μ μνΈ μμ© νμ₯μ±μ κ°μ‘°
- μΊμ±μ μ΄μ§νμ¬ μ¬μ©μκ° μΈμνλ λκΈ° μκ°μ μ€μ΄κ³ 보μμ κ°ννλ©° λ κ±°μ μμ€ν μ μΊ‘μννλ κ³μΈ΅ν μν€ν μ²λ₯Ό μμ±νλ€.
μ¦, μΈν°λ·κ³Ό κ°μ 볡μ‘ν λκ·λͺ¨ κ³ μ±λ₯ ν΅μ μ μμ μ μΌλ‘ μ§μν μ μλλ‘ λ§λ€μ΄μ§ μννΈμ¨μ΄ μν€ν μ²λ€.
RESTμ ꡬμ±
βοΈ μμ(Resource) - URI
βοΈ νμ(Verb) - HTTP Method
βοΈ νν(Representations) - JSON, XML
REST Constraints
RESTλ 곡μμ μΌλ‘ λ€μκ³Ό κ°μ μ μ½ μ‘°κ±΄μ λ°λΌμΌ νλ€.
Client-Server Architecture
- ν΄λΌμ΄μΈνΈ-μλ² λμμΈ ν¨ν΄μ μ¬μ©μ μΈν°νμ΄μ€ λ¬Έμ μ λ°μ΄ν° μ μ₯μ λ¬Έμ λ₯Ό λΆλ¦¬νλ λ¬Έμ λΆλ¦¬ μμΉμ μ μ©
- κ΅¬μ± μμμ λ λ¦½μ± ν₯μ
Stateless
- μλ²κ° μΈμ μ 보λ₯Ό μ μ§νμ§ μμ
- λ€μ΄μ€λ μμ²λ§μ λ¨μν μ²λ¦¬νλ©΄ λλ―λ‘ μλΉμ€μ μμ λκ° λμ
- λμ©λ μ ν리μΌμ΄μ μ μ΄μμ μ΄λ©° μΈμ μ 보 보쑴μΌλ‘ μΈν΄ λ°μνλ μλ² λΆν μλ°©
Cacheability
- μΊμ κ°λ₯
- HTTP κΈ°μ‘΄ μΉνμ€μ κ·Έλλ‘ μ¬μ©νκΈ° λλ¬Έμ HTTPκ° κ°μ§ μΊμ± κΈ°λ₯ μ μ© κ°λ₯
- HTTP νλ‘ν μ½ νμ€μμ μ¬μ©νλ Last-Modified νκ·Έλ E-Tagλ₯Ό μ΄μ©νλ©΄ μΊμ± ꡬν κ°λ₯
Layered system
- REST μλ²λ λ€μΆ© κ³μΈ΅μΌλ‘ ꡬμ±λ μ μκ³ λ‘λ λ°Έλ°μ±, μνΈν κ³μΈ΅μ μΆκ°ν΄ ꡬ쑰μμ μ μ°μ±μ λ μ μκ³ Proxy, κ²μ΄νΈμ¨μ΄ κ°μ λ€νΈμν¬ κΈ°λ°μ μ€κ°λ§€μ²΄λ₯Ό μ¬μ©ν μ μκ² ν¨
Code on demand (optional)
- μλ²κ° ν΄λΌμ΄μΈνΈμκ² μ€ν κ°λ₯ν μ½λλ₯Ό λ€μ΄λ‘λνμ¬ μ€νν μ μλ κΈ°λ₯μ μ 곡
- μ μΌνκ² optionalν μμΉμ΄λ©°, νμ¬λ 보μ λ° νΈνμ± λ¬Έμ λ‘ μ μ¬μ©λμ§ μμ
Uniform interface
- URIλ‘ μ§μ ν 리μμ€μ λν μ‘°μμ ν΅μΌλκ³ νμ μ μΈ μΈν°νμ΄μ€λ‘ μννλ μν€ν μ² μ€νμΌ
RESTful APIλ?
REST μν€ν μ² μ μ½ μ‘°κ±΄μ μ€μνλ μ ν리μΌμ΄μ
- μλ²μ μμμ ν΄λΌμ΄μΈνΈμ ꡬμ λ°μ§ μκ³ μ¬μ©ν μ μκ² νλ μ€κ³ λ°©μ. HTTP μμ²μ λν μλ΅μΌλ‘ μλ²μ μμμ λ°ννλ€.
- λ°νλλ λ°μ΄ν°λ λͺ¨λ κΈ°κΈ°μμ ν΅μ©λ μ μλ€.
- μΉμμ μ€μ λ‘ REST μ€νμΌμ λͺ¨λ μ§ν€λ λ°λ μ΄λ €μμ΄ μλ€. λ°λΌμ, λͺ¨λ REST μ μ½ μ‘°κ±΄μ μ§ν€μ§ λͺ»νλλΌλ RESTful APIλΌκ³ λΆλ¦¬λ κ²½μ°κ° λ§λ€.
- RESTλ κ·Έ μ체λ‘λ νμ€μ΄ μλμ§λ§ RESTful ꡬνμ HTTP, URI, JSON λ° XMLκ³Ό κ°μ νμ€μ μ¬μ©νλ€.
- μλ²λ ν΄λΌμ΄μΈνΈμ μμ²μ λν μλ΅μΌλ‘ νλ©΄μ΄ μλ λ°μ΄ν°λ₯Ό μ μ‘νλ€.
- μ΄λ μ¬μ©νλ μλ΅ λ°μ΄ν°κ°
JSON(Javascript Object Notation)
μ΄λ€.
β API(Application Programming Interface)
- μ ν리μΌμ΄μ μ κ°νΈν μ¬μ©ν μ μκ² νλ 미리 μ ν΄μ§ μΌμ’ μ μ½μμΌλ‘ μ¬μ©μμ νλ‘κ·Έλ¨ κ° μνΈ μμ©μ λλλ€.
- REST APIλ ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄μ μνΈ μμ©, μ¦ HTTP μμ²μ λ°λ₯Έ JSON μλ΅μ λν μ½μμ΄λ€.
β JSON
ν€μ κ°μΌλ‘ ꡬμ±λ μ λ ¬λμ§ μμ μμ±(property)μ μ§ν©
1
2
3
4
5
{
"name": "λ§κ³ ",
"breeds": "골λ 리νΈλ¦¬λ²",
"age": 2
}
RESTful API λμμΈ κ°μ΄λ
π‘ URIλ μ 보μ μμμ ννν΄μΌ νλ€.
1
GET /members/delete/1
리μμ€λͺ μ λμ¬λ³΄λ€λ λͺ μ¬λ₯Ό μ¬μ©νλ€.
μμ κ°μ λ°©μμ RESTλ₯Ό μ λλ‘ μ μ©νμ§ μμ URIλ€. URIλ μμμ νννλλ° μ€μ μ λμ΄μΌ νκΈ° λλ¬Έμ delete
μ κ°μ νμμ λν ννμ΄ λ€μ΄κ°μ μλλ€.
π‘ μμμ λν νμλ HTTP Method(GET, POST, PUT, DELETE)λ‘ νννλ€.
1
DELETE /members/1
μ μ½λλ₯Ό HTTP Methodλ₯Ό ν΅ν΄ μμ ν΄ μλμ κ°μ΄ ννν΄μΌ νλ€.
μ 보λ₯Ό κ°μ Έμ€λ κ²½μ° GET, μΆκ°μ κ²½μ° POST Methodλ₯Ό μ¬μ©νμ¬ νννλ€.
μμ κ°μ΄ URIλ μμμ νννλ λ°μ μ§μ€νκ³ νμμ λν μ μλ HTTP Methodλ₯Ό ν΅ν΄ νλ κ²μ΄ RESTful APIλ₯Ό μ€κ³νλ μ€μ¬ κ·μΉμ΄λ€.
RESTful APIμ μ₯μ
- HTTP νν ν μ½μ νμ€ μΈνλΌλ₯Ό κ·Έλλ‘ μ¬μ©νλ―λ‘ REST API μ¬μ©μ μν λ³λμ μΈνλΌλ₯Ό ꡬμΆν νμκ° μλ€.
- HTTP νμ€ νλ‘ν μ½μ λ°λ₯΄λ λͺ¨λ νλ«νΌμμ μ¬μ© κ°λ₯νλ€.
- REST API λ©μμ§κ° μλνλ λ°λ₯Ό λͺ ννκ² λνλ΄λ―λ‘ μλνλ λ°λ₯Ό μ½κ² νμ ν μ μλ€.
- μλ²μ ν΄λΌμ΄μΈνΈμ μν μ λͺ ννκ² λΆλ¦¬νλ€.
RESTful APIμ λ¨μ
- νμ€μ΄ μ‘΄μ¬νμ§ μμ κ΄λ¦¬κ° μ΄λ ΅λ€.
- HTTP Method ννκ° μ νμ μ΄λ€.
- μν° ν¨ν΄μΌλ‘ μ€κ³λ κ°λ₯μ±μ΄ λλ€.
π μ°Έκ³ μλ£
- μ½λ© μμ¨νμ΅ μ€νλ§ λΆνΈ 3 μλ° λ°±μλ κ°λ° μ λ¬Έ
- Wikipedia - REST API
- NHN Cloud Meetup - REST API μ λλ‘ μκ³ μ¬μ©νκΈ°
π λ 곡λΆν΄μΌ ν κ²
- μν° ν¨ν΄