RESTful APIλ REpresentational State Transfer (μν μ λ¬ νν) μν€ν μ² μ€νμΌμ κΈ°λ°μΌλ‘ ν μΉ APIμ λλ€. RESTλ μΉ μλΉμ€μ μ€κ³λ₯Ό μν μν€ν μ²μ κ·μΉκ³Ό μ μ½μ λ°λ₯΄λ©°, HTTP νλ‘ν μ½μ ν΅ν΄ μμ(Resource)μ μ μνκ³ , μ΄λ₯Ό HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ‘ μ²λ¦¬νλ λ°©μμ λλ€.
RESTful APIμ μ£Όμ νΉμ§
- μμ(Resource): RESTful APIμμλ "μμ"μ΄ κΈ°λ³Έμ μΈ κ°λ μ λλ€. μμμ μΉμμ μ²λ¦¬νκ³ μ νλ λμμ΄λ©°, URLμ ν΅ν΄ μλ³λ©λλ€. μλ₯Ό λ€μ΄, "μ± "μ΄λΌλ μμμ λ€λ£¬λ€λ©΄, κ·Έ μ± μ http://example.com/books/123μ κ°μ΄ URLλ‘ ννλ©λλ€. μ¬κΈ°μ 123μ νΉμ μ± μ κ³ μ μλ³μ(ID)κ° λ©λλ€.
- HTTP λ©μλ (CRUDμ λ§€ν): RESTful APIμμλ HTTP λ©μλ(GET, POST, PUT, DELETE λ±)λ₯Ό μ¬μ©νμ¬ μμμ λν μμ
μ μ μν©λλ€. κ° HTTP λ©μλλ CRUD(Create, Read, Update, Delete) μμ
κ³Ό λ§€νλ©λλ€.
- GET: μμμ μ‘°ν(μ½κΈ°)ν©λλ€. (GET /books → μ± λͺ©λ‘ μ‘°ν, GET /books/123 → νΉμ μ± μ‘°ν)
- POST: μλ‘μ΄ μμμ μμ±ν©λλ€. (POST /books → μλ‘μ΄ μ± μμ±)
- PUT: κΈ°μ‘΄ μμμ μ λ°μ΄νΈν©λλ€. (PUT /books/123 → νΉμ μ± μμ )
- DELETE: μμμ μμ ν©λλ€. (DELETE /books/123 → νΉμ μ± μμ )
- μν λΉμ μ₯μ± (Stateless): RESTful APIλ μν λΉμ μ₯μ±(Stateless)μ μ μ§ν΄μΌ ν©λλ€. μ΄λ κ° μμ²μ΄ λ 립μ μ΄μ΄μΌ νλ©°, μλ²λ ν΄λΌμ΄μΈνΈμ μ΄μ μμ² μνλ₯Ό μ μ₯νμ§ μμμΌ νλ€λ μλ―Έμ λλ€. μ¦, μλ²λ κ° μμ²μμ νμν λͺ¨λ μ 보λ₯Ό μμ² λ³Έλ¬Έμ ν¬ν¨νμ¬ λ³΄λ΄μΌ νλ©°, μλ²λ μ΄μ μ μνλ₯Ό κΈ°μ΅νμ§ μμ΅λλ€.
- μΊμ μ²λ¦¬ (Cacheable): RESTful APIμ μλ΅μ μΊμ κ°λ₯ν΄μΌ ν©λλ€. μλ²μμ λ°νλ μλ΅μ μΊμκ° κ°λ₯νλλ‘ λͺ μμ λλ μμμ μΌλ‘ μ²λ¦¬λ©λλ€. μ΄λ₯Ό ν΅ν΄ μλ΅ μκ°μ μ€μ΄κ³ μλ²μ λΆνλ₯Ό μ€μΌ μ μμ΅λλ€.
- κ³μΈ΅νλ μμ€ν (Layered System): RESTful APIλ μ¬λ¬ κ³μΈ΅μΌλ‘ ꡬμ±λ μ μμ΅λλ€. ν΄λΌμ΄μΈνΈλ μ€κ° μλ²λ νλ‘μ μλ²λ₯Ό ν΅ν΄ μ΅μ’ μλ²μ ν΅μ ν μ μμ΅λλ€. ν΄λΌμ΄μΈνΈλ κ° κ³μΈ΅μ μ νμ μμ΄ μ΅μ’ μλ²μ ν΅μ ν μ μμ΄ μ μ°ν μν€ν μ² μ€κ³λ₯Ό μ§μν©λλ€.
- μΌκ΄λ μΈν°νμ΄μ€ (Uniform Interface): RESTful APIλ μΌκ΄λ μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬, ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ λ¨μνν©λλ€. μ΄λ₯Ό μν΄ νΉμ κ·μΉμ λ°λΌ URL, HTTP λ©μλ, μν μ½λ λ±μ μ μνκ³ μ¬μ©ν©λλ€.
RESTful APIμ κ΅¬μ± μμ
1. μμ(Resouces): μμμ URI(Uniform Resource Identifier)λ‘ μλ³λλ©°, RESTful APIμμ λ€λ£¨λ κΈ°λ³Έμ μΈ κ°μ²΄μ λλ€. μμμ λ³΄ν΅ λͺ μ¬λ‘ ννλ©λλ€.
- μμ:
- GET /books → μ± λͺ©λ‘ μ‘°ν
- GET /books/{id} → νΉμ μ± μ‘°ν
- POST /books → μλ‘μ΄ μ± μμ±
- PUT /books/{id} → νΉμ μ± μ 보 μμ
- DELETE /books/{id} → νΉμ μ± μμ
2. HTTP λ©μλμ μμ RESTful APIμμ μμμ λν μ‘°μμ HTTP λ©μλ(λλ λμ¬)λ‘ κ²°μ λ©λλ€:
- GET: μμ μ‘°ν
- POST: μμ μμ±
- PUT: μμ μμ
- DELETE: μμ μμ
μμ:
- GET /users → μ¬μ©μ λͺ©λ‘ μ‘°ν
- POST /users → μ¬μ©μ μΆκ°
- GET /users/{id} → νΉμ μ¬μ©μ μ‘°ν
- PUT /users/{id} → νΉμ μ¬μ©μ μ 보 μ λ°μ΄νΈ
- DELETE /users/{id} → νΉμ μ¬μ©μ μμ
3. HTTP μν μ½λ (HTTP Status Codes) RESTful APIλ HTTP μν μ½λλ₯Ό ν΅ν΄ μμ²μ κ²°κ³Όλ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬ν©λλ€. λ€μμ μμ£Ό μ¬μ©λλ μν μ½λμ λλ€:
- 200 OK: μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λ¨
- 201 Created: μ μμμ΄ μμ±λ¨
- 400 Bad Request: μλͺ»λ μμ² (μ: νλΌλ―Έν° λΆμ‘±)
- 404 Not Found: μμ²ν μμμ΄ μμ
- 500 Internal Server Error: μλ² μΈ‘ μ€λ₯
4. JSON λλ XML μλ΅ νμ RESTful APIλ λ³΄ν΅ JSON νμμΌλ‘ μλ΅μ λ°νν©λλ€. μ΄λ μ¬λμ΄ μ½κΈ° μ½κ³ , λλΆλΆμ μΈμ΄μμ μ½κ² μ²λ¦¬ν μ μκΈ° λλ¬Έμ λ리 μ¬μ©λ©λλ€.
μμ (JSON νμ):
{
"id": 1,
"title": "The Great Gatsby",
"author": "F. Scott Fitzgerald"
}
RESTful APIμ μ₯μ
- νμ₯μ±: RESTful APIλ λ€μν μμ€ν κ°μ μ½κ² νμ₯ κ°λ₯νκ³ , λ€λ₯Έ μμ€ν κ³Ό ν΅ν©μ΄ μ©μ΄ν©λλ€.
- νμ€ν: HTTP νλ‘ν μ½μ μ¬μ©νμ¬ νμ€νλ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ―λ‘ λ€μν ν΄λΌμ΄μΈνΈ(λͺ¨λ°μΌ, μΉ λ±)μ μλ² κ°μ μνΈ μμ©μ μννκ² ν©λλ€.
- λ 립μ±: μλ²μ ν΄λΌμ΄μΈνΈλ λ 립μ μΌλ‘ λμν μ μμΌλ©°, ν΄λΌμ΄μΈνΈκ° μλ²μ λ΄λΆ λμ λ°©μμ μ νμκ° μμ΅λλ€.
- μ μ°μ±: RESTful APIλ λ€μν λ°μ΄ν° νμ(JSON, XML λ±)μ μ§μνλ―λ‘ λ€μν ν΄λΌμ΄μΈνΈ νκ²½μ μ ν©ν©λλ€.
RESTful APIμ μμ
- μμ μ‘°ν (GET):
- GET /users → μ¬μ©μ λͺ©λ‘ μ‘°ν
- GET /users/{userId} → νΉμ μ¬μ©μ μ 보 μ‘°ν
- μμ μμ± (POST):
- POST /users → μλ‘μ΄ μ¬μ©μ μμ±
- μμ μμ (PUT):
- PUT /users/{userId} → νΉμ μ¬μ©μ μ 보 μμ
- μμ μμ (DELETE):
- DELETE /users/{userId} → νΉμ μ¬μ©μ μμ
κ²°λ‘
RESTful APIλ HTTPλ₯Ό κΈ°λ°μΌλ‘ νμ¬ μμμ HTTP λ©μλλ₯Ό ν΅ν΄ λ€μν λ°μ΄ν° νμ(JSON, XML λ±)μΌλ‘ μ²λ¦¬νλ λ°©μμ λλ€. μ΄λ₯Ό ν΅ν΄ μμ€ν κ°μ ν¨μ¨μ μ΄κ³ νμ€νλ ν΅μ μ΄ κ°λ₯νλ©°, νΉν μΉ μλΉμ€λ λͺ¨λ°μΌ μ ν리μΌμ΄μ μμ λ리 μ¬μ©λ©λλ€.
'SpringBoot' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [SpringBoot] AJAX μ¬μ© λ°©λ²κ³Ό λκΈ°(Synchronous), λΉλκΈ°(Asynchronous) μ°¨μ΄ (0) | 2025.01.14 |
|---|---|
| [SpringBoot] μΏ ν€, μΉ μ€ν 리μ§(LocalStorage, SessionStorage) (0) | 2025.01.14 |
| [SpringBoot] 쿼리μ€νΈλ§(Query String)κ³Ό μ£Όμλ³μλ§€ν(Path variable) (0) | 2025.01.14 |
| [SpringBoot] DI(Dependency injection) (0) | 2025.01.12 |
| [SpringBoot] maven VS gradle (0) | 2025.01.12 |