[CS/API] RESTful API λ? +URI, HATEOAS
2024.12.14 - [π»/CS] - [CS/ API] API λ?
[CS/ API] API λ?
νλ‘κ·Έλλ° κ³΅λΆλ₯Ό νλ©° μμμ΄ λ€μ΄λ³΄κ² λλκ² λ°λ‘ ' API ' λ€. APIμ λν΄ λͺ ννκ² μ 리ν΄λ³΄μ. βΊοΈ 1. API λ?: Application Programming Interface μ½κ² λ§ν΄ ' μνΈκ°μ μν΅μ μν μ μ ' μ΄λΌκ³
soonybutter.tistory.com
μ λ²μ APIμ κ°λ
μ λν΄ κ°λ΅ν μ 리 νλ€.
μ΄λ²μλ REST API, μ ννκ²λ RESTful APIμ λν΄ μ 리ν΄λ³΄μ. βΊοΈ

1. RESTful API λ?
RESTful APIλ λ€μν νμλ€ μ€ μ€λλ κ°μ₯ λ리 μ¬μ©λλ κ²μ΄λ€.
RESTful APIλ Aκ° μ΄λ€λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μμ²νλ©΄, Bκ° μ΄λ€ λ°©μμΌλ‘ μλ΅ν μ§ μ§μ ν΄λμ λ€μν νμ μ€ νλμ΄λ€.
μ μ΄ λ°©μμ APIκ° μΈκΈ°κ° λ§κ³ μ’μ λ°©μμ΄λΌλ κ²μΌκΉ?
μ΄λ ν μΈν°νμ΄μ€μ μλ²κ° RESTful API νμμ APIλ₯Ό ν΅ν΄ μν΅μ νλ€κ³ νλ©΄,
μ΄λ€μ ν¬κ² 'CRUD'λ°©μμΌλ‘ μλνλ€.
Create : μ 보λ₯Ό μμ±ν΄μ λ£λ κ² (μ 보μΆκ°)
Read : μ‘°ννλ κ²
Update : νμ‘΄νλ νΉμ μ 보λ₯Ό λ³κ²½νλ κ²
Delete : νΉμ μ 보λ₯Ό μμ νλ κ²
CRUDμ λν μμΈν λ΄μ©μ μ΄μ μ κ²μλ¬Όμ μ°Έκ³ νμ. βΊοΈ
2024.10.31 - [π»/Server] - [μλ²] CRUD λ? + CRUDμ REST
[μλ²] CRUD λ? + CRUDμ REST
1. CRUD λ?Create, Read, Update, Deleteμ μ½μ΄λ‘ λ°μ΄ν°λ² μ΄μ€ λ±μ μμ€ν μμ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ κΈ°λ³Έμ μΈ κΈ°λ₯μ μλ―Ένλ€. CRUD κ°λ μ μΉμμ€ν λΏλ§ μλλΌ κ±°μ λͺ¨λ μμ€ν μμ μ μ©λλ€. 2. DBμ
soonybutter.tistory.com
2. RESTful API νΉμ§1- URI
λ€μ RESTful APIλ‘ λμμμ,
μ΄ 4κ°μ§ μμ
μ μν μμ²(Request)λ€μ RESTfulν μμ²μΌλ‘ 보λ΄κΈ° μν πURIμ μμ±ν΄λ³΄λ©΄ μλμ κ°λ€.
π
URI : Uniform Resource Identifier, ν΅ν©μμμλ³μ
μΈν°λ·μ μλ μμμ λνλ΄λ μ μΌν μ£Όμ. μΈν°λ·μ μ‘΄μ¬νλ κ°μ’
μ 보λ€μ μ μΌν μ΄λ¦μ΄λ μμΉλ₯Ό νμνλ μλ³μμ΄λ€.
URL: Uniform Resource Locator
μΉμ£Όμμ΄λ€. μ»΄ν¨ν° λ€νΈμν¬ μμμ 리μμ€κ° μ΄λμλμ§ μλ €μ£ΌκΈ° μν κ·μ½μ΄λ€.

λ€μ μμ APIλ₯Ό μμ²ν νμμ μ΄ν΄λ³΄λ©΄,
λͺ¨λ HTTP νλ‘ν μ½μ μ¬μ©ν΄ μμ
μ μμ²νκ³ μλ€.
HTTPλ RESTful APIμ νμμμλ μλμ§λ§, RESTful APIμ 쑰건μ ꡬννκΈ°μ μ©μ΄ν¨μΌλ‘,
νμ
μμλ μ£Όλ‘ HTTPκ° μ¬μ©λλ€κ³ νλ€.
μμ μμμμ
v1μ apiμ λ²μ μ 보λ₯Ό λνλ΄κ³ μλ€.
κ° uriμ λΆνκΈμ¨μ booksλ κ° μμ²μ΄ μ΄λ€ λ°μ΄ν°μ κ΄ν κ²μΈμ§λ₯Ό λͺ
μνκ³ μλ€.
μ¦,
λ§μ½ API κ° RESTμμΉμ μ μ§μΌ λ§λ€μ΄μ‘λ€λ©΄
κ° μμ²μ λ©μλ(REST)μ URI μμ²΄κ° κ·Έκ²μ λͺ©μ μ λͺ
νν λνλ΄κΈ° λλ¬Έμ
κ°λ°μλ λ€λ₯Έ νκ³Ό νμ
μ νκ±°λ, μ΄λ€ APIλ₯Ό μ²μμΌλ‘ μ¬μ©ν΄μΌν λμλ μ API μ μ¬μ©λ²μ μ½κ² μ΅ν μ μλ€.
RESTful APIμμμ μμ²κ³Ό μλ΅μμλ ꡬ쑰νλ λ°μ΄ν°ννμ΄ κ°λ₯νλ©΄μλ κ°λ²Όμ΄ JSONμ΄ λ§μ΄ μ¬μ©λλ€.
(JSONμ λν΄μλ μΆνμ κΈ°νκ° λλ©΄ μ 리ν μμ μ΄λ€.βΊοΈ)
κ°κ°μ URI λ³λ‘ μ΄λ€ μ 보λ₯Ό λνλ΄λμ§ λͺκ°μ§ URIλ₯Ό ν΅ν΄ μμ보μ.
CASE 1.
μμλ‘ GET λ°©μμΌλ‘ APIλ₯Ό μμ²νμλ€κ³ νλ€λ©΄,
μ΄λ λμ μ 보λ₯Ό λͺ¨λ λΆλ¬λ¬λΌλ κ²μ μλ―Ένλ€.
μλμ URIμμλ κ±°κΈ°μ λλΆμ΄ 'status=available'μ΄λΌλ 쑰건μ λͺ
μνλ€.
μ΄λ¬ν 쑰건μ λͺ
μν¨μΌλ‘μ statusκ° availableμΈ μνμ μ±
λ€λ§ νμΈνλλ‘ νλ κ²μ΄λ€.

CASE2.
μ€λ¬΄μμλ URIμ νμ΄μ§μ λν 쑰건μ λ£μ΄λ μΌλ‘μ
ν νμ΄μ§μ 10κΆμ© λ¨κ² ν΄λ¬λΌλ 쑰건μ λΆμ¬
ν νμ΄μ§λ΄ νμλ λ°μ΄ν°μ μλ₯Ό μ ννλλ°, μ΄λ λ°μ΄ν°λ₯Ό λ‘λνλ κ³Όμ μΌλ‘λΆν° κ³ΌλΆνλ₯Ό λ°©μ§νλ€.

CASE3.
PUTκ³Ό PATCHλ λͺ¨λ Updateμ ν΄λΉνλ€.

PUTμ μ λΆλ₯Ό κ°μ μλλ€.

λ°λ©΄, PATCHλ λΆλΆλ§ μμ νλ€λ μ°¨μ΄κ° μλ€.

3.RESTful API νΉμ§2 - HATEOAS
RESTful APIμμ κΆμ₯λλ λλ€λ₯Έ μμΉμ HATEOAS μ΄λ€.
Hypermedia
As
The
Engine
Of
Application State
μ΄λ κ° μμ²μ μλ΅μ, κ°μ©ν λ€λ₯Έ μμ²λ€μ μ 보λ₯Ό ν¬ν¨μν€λ κ²μ΄λ€.
μ΄ λ¦¬μμ€μ λν΄ μ΄λ¬ν κΈ°λ₯λ€λ μ΄μ κ°μ΄ μμ²ν μ μλ€κ³ 첨λΆν΄μ£Όλ κ²μ΄λ€!

μ΄ λ§ν¬ μ 보λ€μ ν΅ν΄ κ°λ°μλ APIλ¬Έμλ₯Ό λ€ λ€μ Έλ³΄μ§ μμλ
λ€μμ μ΄λ€ μμ²μ λ³΄λΌ μ μλμ§ λ³Ό μ μμΌλ©°,
μ΄ λΆλΆμ APIμ μΈλΆμ¬νμ΄ λ³κ²½λλλΌλ, ν΄λΌμ΄μΈνΈλ μ΄ μ 보λ₯Ό μ°Έμ‘°νκ² λ§λ€λ©΄ ν΄λΌμ΄μΈνΈμ μ½λλ₯Ό κ³ μΉ νμλ μμ΄μ§λ κ²μ΄λ€.
κ° APIλ HATEOASλ₯Ό κ°μ§κ³ μμΌλ©΄ μ’λ€.
4. RESTful API νΉμ§3 - μλ΅μ μνμ½λ
: μλ²μ μλ΅μλ μμ²μ μ²λ¦¬ν κ²°κ³Όλ₯Ό μλ €μ£Όλ μνμ½λκ° λ΄κ²¨μ¨λ€.
2XX : Success
4XX : Client Error (URIκ° μλͺ»λ¨ or κΆν μΈμ μμ²μ ν¨ . μ¦, ν΄λΌμ΄μΈνΈμ μμ² μλͺ»)
5XX : Server Error
ν¬κ²λ μ΄λ κ² κ΅¬λΆν μ μμΌλ©°, μμΈν μνμ½λλ μ΄μ μ κΈμ μ°Έκ³ νμ.βΊοΈ
2024.10.29 - [π»/Network] - [HTTP] Http μν μ½λ (Http Status Code)
[HTTP] Http μν μ½λ (Http Status Code)
Http μν μ½λ -> νΉμ HTTP μμ²μ΄ μ μμ μΌλ‘ μλ£λμλμ§ μ¬λΆλ₯Ό λνλ΄λ 3μ리 μ«μ μ½λμ΄λ€.100λ² λΆν° μμν΄μ 500λ²λκΉμ§ ν¬κ² μ΄ 5κ°μ νμ μΌλ‘ λλ μ μλ€.μν μ½λλ νμ μνλ©
soonybutter.tistory.com
5. RESTful API νΉμ§4- Stateless
λν Restful APIλ 'Stateless' νΉμ±μ κ°μ§λ€.
Statelessλ ν΄λΌμ΄μΈνΈμ μν μ λ³΄κ° μλ²μ μ μ₯λμ§ λ§μμΌ νλ€λ κ²μ΄λ€.
μ¦, μλ²λ ν¬λΌμ΄μΈνΈμ λν΄ μ무κ²λ κΈ°μ΅νλ©΄ μλλ€λ κ²μ΄λ€.
μ΄ νΉμ± λλ¬Έμ ν΄λΌμ΄μΈνΈλ μμ²μ λͺλ²μ§Έ λ°λ³΅ν΄μ 보λ΄λ μ§ κ°μ, νμν λ΄μ©μ λ§€λ² λͺ¨λ ν¬ν¨νκ³ μμ΄μΌνλ€.
ν΄λΌμ΄μΈνΈ : μκΉ λ΄κ° μμ²νλκ±° λ€μ μμ²νλ€~ ν΄μ€ ~~
μλ² : μλ¨! λ€μ μμ²ν΄μ£ΌμΈμ.
ν΄λΌμ΄μΈνΈμ μλ²λ μλ‘λ₯Ό κΈ°μ΅ν΄μλ μλλ€.νμ§λ§, κ°κ° λ³ΈμΈμ΄ μ΄λ€ μμ²μ 보λλμ§ λ, μ΄λ€ μλ΅μ 보λλμ§, μ΄λ€ μλ΅μ λ°μλμ§λ κΈ°μ΅ν΄λλκ² μ’λ€. -> μΊμ±(Caching)
ν΄λΌμ΄μΈνΈκ° μ΄λ€ μμ²μ λν μλ΅μ λ³ΈμΈμκ² μΊμ±ν΄λλ©΄, κ°μ λ°μ΄ν°κ° νμν λλ§λ€ μμ²μ 보λ΄μ§ μμλ λκ³ ,μλ²λ νΉμ μμ²μ λν΄ μλ΅ν κ²μ μΊμ±ν΄λλ©΄, κ°μ μμ²μ΄ λ€μ΄μμλ λ DBμμ μ 보λ₯Ό μΊλ΄μ§ μμλ λλ€λ κ²μ΄λ€.
* μ νλΈ μνν μ½λ©μ¬μ λ- μμ μ°Έκ³