Web
[Web] REST APIλ?
s_ih_yun
2025. 6. 4. 01:05
728x90
1. REST
π‘ REpresentational State Transfer
- λ±μ₯ λ°°κ²½ : 볡μ‘ν λ€νΈμν¬ ν΅μ (ex. μΈν°λ·)κ³Ό λ©ν° νλ«νΌ(ex. λ€μν λΈλΌμ°μ μ λͺ¨λ°μΌ λλ°μ΄μ€ λ±)μ λ±μ₯μ λ°λΌ μ΄λ₯Ό κ΄λ¦¬νκΈ° μν μ§μΉ¨μΌλ‘ λ§λ€μ΄μ‘λ€
1.1. REST λ?
- μννΈμ¨μ΄ νλ‘κ·Έλ¨ μν€ν
μ²μ ν νμ
- HTTP URI(Uniform Resource Identifier)λ₯Ό ν΅ν΄ μμ(Resource)λ₯Ό λͺ μνκ³
- HTTP Method (POST, GET, PUT, DELETE, PATCH λ±)μ ν΅ν΄
- ν΄λΉ μμ(URI)μ λν CRUD Operationμ μ μ©νλ κ²μ μλ―Έ
- Create : λ°μ΄ν° μμ± (POST)
- Read : λ°μ΄ν° μ‘°ν (GET)
- Update : λ°μ΄ν° μμ (PUT, PATCH)
- Delete : λ°μ΄ν° μμ (DELETE)μμμ μ΄λ¦μΌλ‘ ꡬλΆνμ¬ ν΄λΉ μμμ μνλ₯Ό μ£Όκ³ λ°λ λͺ¨λ κ²

1.2. ꡬμ±μμ
- μμ(Resource) : HTTP URI
- Clientλ URIλ₯Ό μ΄μ©ν΄ μμμ μ§μ ν΄λΉ μμμ μν(μ 보=Payload)μ μ‘°μμ Serverμ μμ²
- μμμ λν νμ(Verb) : HTTP Method
- μμμ λν νμμ νν(Representation of Resource)
- JSON, XML, TEXT, RSSλ± μ¬λ¬ ννμ μλ΅
1.3. νΉμ§ λ° μ₯λ¨μ
- νΉμ§
- Uniform (μ λνΌ μΈν°νμ΄μ€)
- 리μμ€μ λν μ‘°μμ ν΅μΌλκ³ νμ μ μΈ μΈν°νμ΄μ€λ‘ μννλ μν€ν μ² μ€νμΌ
- Stateless (무μνμ±)
- μμ μ μν μν μ 보λ₯Ό λ°λ‘ μ μ₯ / κ΄λ¦¬νμ§ μλλ€
- Cacheable (μΊμ κ°λ₯)
- HTTPλΌλ κΈ°μ‘΄ μΉ νμ€μ κ·Έλλ‘ μ¬μ©
- → HTTPμ μΊμ± κΈ°λ₯ μ μ© κ°λ₯ (Last-Modified νκ·Έ, E-Tagλ₯Ό μ΄μ©νμ¬ κ΅¬ν κ°λ₯)
- Self-descriptiveness (μ체 νν ꡬ쑰)
- REST API λ©μμ§λ§ λ³΄κ³ λ μ½κ² μ΄ν΄ κ°λ₯
- Client-Server ꡬ쑰
- Client, Serverμμ κ°λ°ν λ΄μ©μ΄ λͺ
ννκ³ μμ‘΄μ± κ°μ
- κ°κ° Clientλ μ¬μ©μ μΈμ¦μ΄λ 컨ν μ€νΈ(μΈμ , λ‘κ·ΈμΈ μ 보), Serverλ API μ 곡 λ±μ μ§μ κ΄λ¦¬νλ ꡬ쑰
- Client, Serverμμ κ°λ°ν λ΄μ©μ΄ λͺ
ννκ³ μμ‘΄μ± κ°μ
- κ³μΈ΅ν ꡬ쑰
- λ€μ€ κ³μΈ΅ κ΅¬μ± κ°λ₯→ PROXY, κ²μ΄νΈμ¨μ΄ κ°μ λ€νΈμν¬ κΈ°λ° μ€κ° 맀체 μ¬μ© κ°λ₯
- → 보μ, λ‘λ λ°Έλ°μ±, μνΈν κ³μΈ΅ μΆκ°νλ ꡬ쑰μ μ μ°μ±
- Uniform (μ λνΌ μΈν°νμ΄μ€)
- μ₯λ¨μ
| μ₯μ | - HTTP νλ‘ν μ½ μΈνλΌλ₯Ό κ·Έλλ‘ μ¬μ©νμ¬, REST APIλ₯Ό μν λ³λ μΈνλΌ κ΅¬μΆ νμ X - HTTP νλ‘ν μ½ νμ€μ μ΅λν νμ©νμ¬, μ¬λ¬ μΆκ°μ μΈ μ₯μ ν¨κ» κ°μ Έκ° - HTTP νμ€ νλ‘ν μ½μ λ°λ₯΄λ λͺ¨λ νλ«νΌμμ μ¬μ© κ°λ₯ - Hypermedia APIμ κΈ°μ€μ μΆ©μ€ν μ§ν€λ©° λ²μ©μ± 보μ₯ - REST API λ©μμ§κ° μλνλ λ°λ₯Ό λͺ νν λνλ → μλνλ λ° μ½κ² νμ κ°λ₯ - μ¬λ¬κ°μ§ μλΉμ€ λμμΈμμ μκΈΈ μ μλ λ¬Έμ μ΅μν - μλ²μ ν΄λΌμ΄μΈνΈ μν μ λͺ νν λΆλ¦¬ |
| λ¨μ | - νμ€μ΄ μ‘΄μ¬νμ§ μμ - μ¬μ© κ°λ₯ν λ©μλκ° 4κ°μ§ λΏμ (HTTP Method ννκ° μ νμ ) - λΈλΌμ°μ λ₯Ό ν΅ν΄ ν μ€νΈν μΌμ΄ λ§μ μλΉμ€λΌλ©΄, μ½κ² κ³ μΉ μ μλ URLλ³΄λ€ Header μ 보μ κ°μ μ²λ¦¬ν΄μΌ νλ―λ‘ μ λ¬Έμ±μ΄ μκ΅¬λ¨ - ꡬν λΈλΌμ°μ κ° μ λλ‘ μ§μν΄μ£Όμ§ λͺ»νλ λΆλΆ μ‘΄μ¬ (ex. PUT / DELETE μ¬μ© λΆκ°, pushState μ§μ μν¨) |
2. REST API
π‘RESTμ μ리λ₯Ό λ°λ₯΄λ API
2.0. API λ?
π‘Application Programming Interface
- μννΈμ¨μ΄ μμ© νλ‘κ·Έλ¨μμ λ€λ₯Έ μννΈμ¨μ΄ κ΅¬μ± μμ λλ μλΉμ€μ μνΈ μμ©νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡νλ νλ‘κ·Έλλ° κΈ°μ
2.1. REST API μ€κ³ κ·μΉ
2.1.1. μ€μ¬ κ·μΉ
- URIλ μ 보μ μμμ ννν΄μΌ νλ€
- μμμ λν νμλ HTTP Method (GET, POST, PUT, DELETE λ±)μΌλ‘ νννλ€
- νμλ URIμ ν¬ν¨νμ§ μλλ€
2.1.2. μΈλΆ κ·μΉ
- URIλ μ λ¬νκ³ μ νλ μμμ λͺ
μ¬λ₯Ό μ¬μ©νλ€
- 컨νΈλ‘€ μμμ μλ―Ένλ κ²½μ° μμΈμ μΌλ‘ λμ¬ νμ©
- URI κ²½λ‘μλ μλ¬Έμκ° μ ν©νλ€
- νμΌ νμ₯μλ URIμ ν¬ν¨νμ§ μλλ€
- λμ Accept Headerλ₯Ό μ¬μ© (ex. GET : http://syun.com/orders/2/Accept: image/jpg )
- μ¬λμ ꡬλΆμ(/)λ κ³μΈ΅ κ΄κ³λ₯Ό λνλ΄λλ° μ¬μ©νλ€
- URI λ§μ§λ§ λ¬Έμλ‘ μ¬λμ(/)λ₯Ό ν¬ν¨νμ§ μλλ€
- λ°μ€(_)μ URIμ μ¬μ©νμ§ μκ³ , νμ΄ν(-)μ μ¬μ©νλ€
- 리μμ€ κ°μ μ°κ΄ κ΄κ³κ° μλ κ²½μ°(ex. GET : /users/{userid}/devices (μΌλ°μ μΌλ‘ μμ (has)μ κ΄κ³λ₯Ό ννν λ) )
- → /리μμ€λͺ /리μμ€ ID/κ΄κ³κ° μλ λ€λ₯Έ 리μμ€λͺ
3. RESTful API
π‘REST APIμ μ€κ³ κ·μΉμ μ¬λ°λ₯΄κ² μ§ν¨ μμ€ν
- RESTλ₯Ό RESTλ΅κ² μ°κΈ° μν λ°©λ²μΌλ‘, λκ΅°κ° κ³΅μμ λ°νν κ²μ μλλ€
- REST APIμ κ΅¬μ± μμλ₯Ό λ°λ₯΄λ©΄μ, URIμ HTTP λ©μλλ₯Ό μ μ νκ² μ¬μ©νμ¬ μμ μ‘°μ
- REST APIλ₯Ό κ°μ νκ³ , λ³΄λ€ μΌκ΄μ± μλ API ꡬννλλ‘ ν΄μ€λ€
- μμ²μ 보λ΄λ μ£Όμλ§μΌλ‘λ μ΄λ€ κ²μ μμ²νλμ§ νμ κ°λ₯ (λ κ°νΈνκ³ μ§κ΄μ μΈ κ΅¬μ‘°)
- μ±λ₯μ΄ μ€μν μν©μ΄λΌλ©΄ κ΅³μ΄ RESTfulν APIλ₯Ό ꡬνν νμ X
- λͺ©μ : μ΄ν΄νκΈ° μ½κ³ μ¬μ©νκΈ° μ¬μ΄ REST APIλ₯Ό λ§λλ κ²
999. μ 리
- REST : HTTP κΈ°λ°μΌλ‘ λ€νΈμν¬ μμμ Client-Server μ¬μ΄ ν΅μ λ°©μ μ€ νλ
- REST API : RESTλ₯Ό κΈ°λ°μΌλ‘ μλΉμ€ APIλ₯Ό ꡬνν κ²
- RESTful : RESTλ₯Ό RESTλ΅κ², REST μ리λ₯Ό λ°λ₯΄λ μμ€ν
π References
https://junvelee.tistory.com/107
https://khj93.tistory.com/entry/λ€νΈμν¬-REST-APIλ-REST-RESTfulμ΄λ#google_vignette
https://velog.io/@dongjun187/APIλ-무μμΈκ°
https://dev-coco.tistory.com/97
https://velog.io/@somday/RESTful-API-μ΄λ#rest-api-νμ-λ°°κ²½
https://digitaloasis.tistory.com/entry/rest-api-and-restful-api
https://dev-coco.tistory.com/97
https://uiop5809.tistory.com/166
728x90