REST (Representational State Transfer)
μ€λͺ
μμμ νν(Representational)μΌλ‘ ꡬλΆνμ¬ ν΄λΉ μμμ μν(State)λ₯Ό μ£Όκ³ λ°λ(Transfer)λ€.
HTTP URI(Uniform Resource Identifier)μ ν΅ν΄ μμ(Resource)μ λͺ
μνκ³ , Http Method(GET, POST, PUT, DELETE)μ ν΅ν΄ μμμ λν CRUD Operationμ μ μ©
β± URI (Uniform Resource Identifier)
μΈν°λ· μμμ λνλ΄λ μ μΌν μ£Όμ
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
- URN: μμμ μ΄λ¦ (μλ³μ)
- URL: μμμ μμΉ
ꡬμ±μμ
1. μμ (Resource)
β£ Http URI (ex. /users/:userId)
2. νμ (Method)
β£ GET, POST, PUT, DELETE,
β£ HEAD (μμ² header μ λ³΄λ§ μλ΅),
β£ PATCH (PUTκ³Ό λ€λ₯΄κ³ , μμμ μΌλΆλ§ μμ νκ³ μ ν λ μ¬μ©),
β£ OPTION (νμ¬ End-pointκ° μ 곡 κ°λ₯ν API methodλ₯Ό μλ΅)
3. νν (Representation of Resource)
Client(λΈλΌμ°μ )κ° μμμ μνμ λν μ‘°μμ μμ²(Request)νλ©΄ μλ²λ μ΄μ μ μ ν μλ΅(Response)μ 보λΈλ€.
JSON, XML, TEXT, RSS λ± μ¬λ¬ ννλ‘ νν
REST API νΉμ§
1. ν΄λΌμ΄μΈνΈ/μλ²
β£ μν€ν
μ²λ₯Ό λ¨μν μν€κ³ μμλ¨μλ‘ λΆλ¦¬ν¨μΌλ‘μ¨
ν΄λΌμ΄μΈνΈ - μλ² κ° ννΈκ° λ
립μ μΌλ‘ κ°μ λ μ μλλ‘ νλ€.
2. μνμμ
β£ ν΄λΌμ΄μΈνΈμ μνκ° μλ²μ μ μ₯λμ΄μλ μλλ€.
3. λ μ΄μ΄λ μν€ν
μ² (Layered Architecture)
β£ ν΄λΌμ΄μΈνΈ - μλ² μ°κ²° μ¬μ΄μ μ€κ° μλ²κ° μ‘΄μ¬νλ κ²½μ° (ν΄λΌμ΄μΈνΈ - μ€κ°μλ² - μλ²),
μ€κ°μλ²(κ²μ΄νΈμ¨μ΄, λ°©νλ²½, νλ‘μ etc)λ λ‘λλ°Έλ°μ± νΉμ 곡μ μΊμ κΈ°λ₯μ μ 곡ν¨μΌλ‘μ¨
μμ€ν
κ·λͺ¨ νμ₯μ±μ ν₯μμν€λλ° μ μ©
4. μΊμ (Cache)
β£ ν΄λΌμ΄μΈνΈ μλ΅μ μΊμ±ν μ μμ΄μΌ ν¨. μΊμ±ν¨μΌλ‘μ μλ²μ λΆν μ΅μν
5. μ½λ μ¨ λ맨λ(Code on demand)
β£ μμ²μ΄ μ€λ©΄ μ½λλ₯Ό μ€λ€λ μλ―Έλ‘ νΉμ μμ μ μλ²κ° νΉμ κΈ°λ₯μ μννλ μ€ν¬λ¦½νΈ λλ
νλ¬κ·ΈμΈμ ν΄λΌμ΄μΈνΈμ μ λ¬ν΄μ ν΄λΉ κΈ°λ₯μ λμνλλ‘ νλκ². (μλ°μ€ν¬λ¦½νΈ, νλμ etc)
6. ν΅ν© μΈν°νμ΄μ€
β£ μΌκ΄μ μΈ μΈν°νμ΄μ€λ‘ λΆλ¦¬ λμ΄μΌ ν¨.
REST μΈν°νμ΄μ€ κ·μΉ
1. 리μμ€ μλ³
β£ μμ² λ΄μ κΈ°μ λ κ°λ³ μμμ μλ³ν μ μμ΄μΌ νλ€. (URI)
2. ννμ ν΅ν 리μμ€ μ²λ¦¬
β£ λ€μν μ½ν
μΈ μ νμΌλ‘ νν κ°λ₯ (JSON, XML, HTML ..)
3. μκΈ° λ¬μ¬ λ©μΈμ§
β£ Http header μ λ©ν λ°μ΄ν° μ 보λ₯Ό μΆκ°ν΄μ μ€μ λ°μ΄ν°μλ κ΄λ ¨ μμ§λ§
λ°μ΄ν°μ λν μ€λͺ
μ λνλ΄λ μ 보λ₯Ό λ΄μ μ μμ.
4. μ΄ν리μΌμ΄μ
μ μνμ λν νμ΄νΌλ―Έλμ΄(HATEOAS, Hypermedia As The Engine Of Application State)
β£ REST API κ°λ°ν λμ λ¨μ λ°μ΄ν°λ§ μ λ¬νμ§ μκ³ , λ§ν¬ μ 보κΉμ§ ν¬ν¨νμ¬ μ λ¬ (νμ΄νΌ ν
μ€νΈ λ§ν¬)
⣠리μμ€ μνκ° μ μ΄λλ κ²½μ°μ λ³κ²½λλ μ 보λ₯Ό μ 곡νκ³ μ ν¨.
(λ±λ‘ μμ² ν, λ³κ²½ λ μ 보λ₯Ό μ’ λ μμΈν μκ³ μ ν λ νμ΄νΌ λ§ν¬λ κ°μ΄ μ 곡)
REST API
μ€λͺ
REST μν€ν μ²μ μ μ½ μ‘°κ±΄μ μ€μνλ μ ν리μΌμ΄μ νλ‘κ·Έλλ° μΈν°νμ΄μ€
RESTfulμ λͺ©μ
API μ΄μ©μκ° ν΄λΉ API μΌλ‘ λ°μ΄ν°λ₯Ό μ»κ³ , νΉμ κΈ°λ₯μ νμ ν μ μλλ‘ νλ κ²
리μμ€ μν
λνλ¨ΌνΈ (document)
β£ κ°μ²΄ μΈμ€ν΄μ€λ λ°μ΄ν°λ² μ΄μ€ λ μ½λμ μ μ¬ν κ°λ
컬λ μ
(collection)
β£ μλ²μμ κ΄λ¦¬νλ λλ ν°λ¦¬ 리μμ€
μ€ν μ΄ (store)
β£ ν΄λΌμ΄μΈνΈμμ κ΄λ¦¬νλ 리μμ€ μ μ₯μ
β£ API ν΄λΌμ΄μΈνΈκ° 리μμ€λ₯Ό λ±λ‘/μμ /μμ μ κ΄μ¬
컨νΈλ‘€λ¬ (controller)
β£ μ μ°¨μ μΈ κ°λ
μ λͺ¨λΈν ν κ²
β° REST API λμμΈμ μν κ·μΉ
μΆμμ μΈ κ² λ³΄λ¨, ꡬ체μ μΈ κ²μ΄ μ’λ€.
ex) /animals -> /pigs
λμ¬λ₯Ό μ¬μ©νμ§ μλλ€. (λͺ
μ¬λ₯Ό μ¬μ©)
method λ₯Ό λμ¬ λμ©μΌλ‘ μ¬μ©.
λ¨μ보λ¨, 볡μλ₯Ό μ¬μ©νλ κ²μ κΆμ₯νλ€.
ex) /thing -> /things or /things/{id}
μ¬λμ(/) μ μ¬μ©νμ¬ κ³μΈ΅κ΄κ³λ₯Ό νμν΄μΌ νλ€.
리μμ€κ° μ°κ΄κ΄κ³λ /리μμ€λͺ
/리μμ€ID/κ΄κ³κ° μλ λ€λ₯Έ 리μμ€λͺ
μΌλ‘ νννλ€.
ex) GET /users/{userid}/devices (μμ μκ° κ°μ§κ³ μλ λλ°μ΄μ€ λͺ©λ‘?)
URL λ§μ§λ§μ μ¬λμ(/) μ ν¬ν¨νμ§ μλλ€.
μ¬λμλ₯Ό ν¬ν¨νλ€λ©΄, μ¬λμ λ€μμ μλ³μκ° μμΌνλλ° μ€μ§ μμμΌλ‘ νΌλμ μ€ μ¬μ§κ° μμ.
URIμ κ°λ μ±μ λνλ €λ©΄ νμ΄ν(-)μ μ¬μ©ν΄μΌ νλ€.
URIμ λ°μ€(_)μ μ¬μ©ν΄μ μλλ€.
λ³΄κΈ°κ° μ΄λ €μ. κ°λ
μ±
URI κ²½λ‘μλ μλ¬Έμλ₯Ό μ¬μ©ν΄μΌ νλ€.
νμΌ νμ₯μλ μ¬μ©νμ§ μλλ€.
μ°Έκ³
https://www.redhat.com/ko/topics/api/what-is-a-rest-api
(μ± ) μ€νλ§ λΆνΈλ‘ λ°°μ°λ μλ° μΉ κ°λ°
https://spoqa.github.io/2013/06/11/more-restful-interface.html
https://dzone.com/articles/7-rules-for-rest-api-uri-design-1
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://www.slideshare.net/nexusz99/rest-api-48600643
https://zsgg.tistory.com/entry/REST-API-%EB%94%94%EC%9E%90%EC%9D%B8-%EA%B7%9C%EC%B9%99
https://sanghaklee.tistory.com/57
https://meetup.toast.com/posts/92
'κ°λ° > etc' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
SSE (Server Sent Event) (1) | 2023.08.20 |
---|---|
Vault (1) | 2023.02.07 |
ν₯μ¬κ³ λ μν€ν μ² (Hexagonal Architecture) (2) | 2022.09.25 |
JWT (JSON WEB TOKEN) (0) | 2021.12.22 |
HTTPκ΄λ ¨ (https, spdy, ajax, websocket) (0) | 2018.12.09 |