REST APIλ?
REST λ?
REST κ΅¬μ± 3κ°μ§ : μμ, νμ, λ©μμ§
1. μμ(resource) : μ κ·Όν λμ
2. λ©μλ : HTTP Method - GET(μ‘°ν) , POST(μμ±) , PUT(μμ ), DELELTE(μμ )
* μΌλ°μ μΌλ‘λ GET, POST λ°©μμ μ¬μ©νλ, RESTμμλ PUT, DELETEλ μ¬μ©νλ€.
3. λ©μμ§
ex) " μνλͺ
μ΄ μ§λΌλ©΄μΈ μνμ μμ±νλ€” λΌλ νΈμΆμ΄ μμ λ,
“μν”μ μμ±λλ μμ (resource)
“μμ±νλ€”λΌλ νμλ λ©μλ (post)
"μνλͺ
μ΄ μ§λΌλ©΄μΈ μν"μ λ©μμ§ ({"name":"μ§λΌλ©΄","price":"1000"})
μμ μμλ₯Ό rest ννλ‘ νννλ©΄?
HTTP POST , http://localhost/products/ {
"products": {
"name":"μ§λΌλ©΄",
"price":"1000"
}
}
- “Representational State Transfer”μ μ½μ, μμμ μ΄λ¦(μμμ νν)μΌλ‘ ꡬλΆνμ¬ ν΄λΉ μμμ μν(μ 보)λ₯Ό μ£Όκ³ λ°λ λͺ¨λ κ²μ μλ―Ένλ€.
- μ¦, μμ(resource)μ νν(representation)μ μν μν μ λ¬
A. μμ(resource)μ νν(representation)μ΄λ?
μμ: ν΄λΉ swκ° κ΄λ¦¬νλ λͺ¨λ κ² ( λ¬Έμ, κ·Έλ¦Ό, λ°μ΄ν°, ν΄λΉ μννΈμ¨μ΄ μ체 λ±)
μμμ νν: κ·Έ μμμ νννκΈ° μν μ΄λ¦
B. μν(μ 보) μ λ¬
- λ°μ΄ν°κ° μμ²λμ΄μ§λ μμ μμ μμμ μν(μ 보)λ₯Ό μ λ¬νλ€. JSON νΉμ XMLλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
- μλ μμ΄λ μΉ (WWW)κ³Ό κ°μ λΆμ° νμ΄νΌλ―Έλμ΄ μμ€ν μ μν μννΈμ¨μ΄ κ°λ° μν€ν μ²μ ν νμRESTλ κΈ°λ³Έμ μΌλ‘ μΉμ κΈ°μ‘΄ κΈ°μ κ³Ό HTTP νλ‘ν μ½μ κ·Έλλ‘ νμ©νκΈ° λλ¬Έμ μΉμ μ₯μ μ μ΅λν νμ©ν μ μλ μν€ν μ² μ€νμΌμ΄λ€.
- RESTλ λ€νΈμν¬μμμ Clientμ Server μ¬μ΄μ ν΅μ λ°©μ μ€ νλμ΄λ€.
REST μ ꡬ체μ μΈ κ°λ
- HTTP(HyperText Transfer Protocol) λ μΉμμμ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν νλ‘ν μ½μ μλ―Ένλ€.
- HTTP URL(Uniform Resource Identifier)μ ν΅ν΄ μμ(Resource)μ λͺ μνκ³ , HTTP Method(POST, GET, PUT, DELETE)λ₯Ό ν΅ν΄ ν΄λΉ μμμ λν CRUD Operationμ μ μ©νλ κ²μ μλ―Ένλ€.
- μ¦, RESTλ μμ κΈ°λ°μ ꡬ쑰(ROA, Resource Oriented Architecture) μ€κ³μ μ€μ¬μ Resourceκ° μκ³ HTTP Methodλ₯Ό ν΅ν΄ Resourceλ₯Ό μ²λ¦¬νλλ‘ μ€κ³λ μν€ν μ²λ₯Ό μλ―Ένλ€.
- μΉ μ¬μ΄νΈμ μ΄λ―Έμ§, ν
μ€νΈ, DB λ΄μ© λ±μ λͺ¨λ μμμ κ³ μ ν IDμΈ HTTP URLλ₯Ό λΆμ¬νλ€.
- Create : μμ±(POST)
- Read : μ‘°ν(GET)
- UPdate : μμ (PUT)
- Delete : μμ (DELETE)
- HEAD : header μ 보 μ‘°ν(HEAD)
REST μ νμμ±
- ‘μ ν리μΌμ΄μ λΆλ¦¬ λ° ν΅ν©’
- ‘λ€μν ν΄λΌμ΄μΈνΈμ λ±μ₯’
- μ΅κ·Όμ μλ² νλ‘κ·Έλ¨μ λ€μν λΈλΌμ°μ μ μλλ‘μ΄λν°, μμ΄ν°κ³Ό κ°μ λͺ¨λ°μΌ λλ°μ΄μ€μμλ ν΅μ μ ν μ μμ΄μΌνλ€.
- μ΄λ¬ν λ©ν° νλ«νΌμ λν μ§μμ μν΄ μλΉμ€ μμμ λν μν€ν
μ²λ₯Ό μΈμ°κ³ μ΄μ©νλ λ°©λ²μ λͺ¨μν κ²°κ³Ό, RESTμ κ΄μ¬μ κ°μ§κ² λμλ€.
REST κ΅¬μ± μμ
μμ(Resource): URL
- λͺ¨λ μμμ κ³ μ ν idκ° μ‘΄μ¬νκ³ , μ΄ μμμ serverμ μ‘΄μ¬νλ€.
- μμμ ꡬλ³νλ id λ '/groups/:group_id'μ κ°μ http urlμ΄λ€.
- client λ urlλ₯Ό μ΄μ©ν΄μ μμμ μ§μ νκ³ ν΄λΉ μμμ μν(μ 보)μ λν μ‘°μμ serverμ μμ²νλ€.
νμ (Verb) : http method
- httpνλ‘ν μ½μ Methodλ₯Ό μ¬μ©νλ€.
- httpνλ‘ν μ½μ get, post, put, deleteμ κ°μ λ©μλλ₯Ό μ 곡νλ€.
νν(Representation of Resource): νμ΄λ‘λλ₯Ό μ΄
- clientκ° μμμ μν(μ 보)μ λν μ‘°μμ μμ²νλ©΄ Serverλ μ΄μ μ μ ν μλ΅(Representation)μ 보λΈλ€.
- Restμμ νλμ μμμ json, xml, rss, text λ± μ¬λ¬ ννμ RepresentationμΌλ‘ λνλ΄μ΄ μ§ μ μλ€.
- jsonνΉμ xmlλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
REST νΉμ§
Server-Client (μλ²- ν΄λΌμ΄μΈνΈ ꡬ쑰)
ν΄λΌμ΄μΈνΈ(Client) = κ³ κ°
μλ²(Server) : μλΉμ€ μ 곡μ
- μμμ΄ μλ μͺ½μ΄ server, μμμ μμ²νλ μͺ½μ΄ Clientκ° λλ€.
REST Server: apiλ₯Ό μ 곡νκ³ , λΉμ¦λμ€ λ‘μ§ μ²λ¦¬ λ° μ μ₯μ μ± μμ§λ€.
client: μ¬μ©μ μΈμ¦μ΄λ context(μΈμ , λ‘κ·ΈμΈ μ 보) λ±μ μ§μ κ΄λ¦¬νκ³ μ± μμ§λ€.
- μλ‘κ° μμ‘΄μ±μ΄ μ€μ΄λ λ€.
Stateless (무μν)
- httpνλ‘ν μ½μ Stateless Protocolμ΄λ―λ‘ rest μμ 무μνμ±μ κ°λλ€.
- clientμ contextλ₯Ό Serverμ μ μ₯νμ§ μλλ€. ( μ¦, μΈμ κ³Ό μΏ ν€μ κ°μ contextμ 보λ₯Ό μ κ²½μ°μ§ μμλ λλ―λ‘ κ΅¬νμ΄ λ¨μν΄μ§λ€.)
- Serverλ κ°κ°μ μμ²μ μμ ν λ³κ°μ κ²μΌλ‘ μΈμνκ³ μ²λ¦¬νλ€.
- κ° api μλ²λ clientμ μμ²λ§μ λ¨μ μ²λ¦¬νλ€.
- μ¦, μ΄μ μμ²μ΄ λ€μ μμ²μ μ²λ§ μ°κ΄λμ΄μλ μλλ€.
- λ¬Όλ‘ μ΄μ μμ²μ΄ DBλ₯Ό μμ νμ¬ DBμ μν΄ λ°λλ κ²μ νμ©νλ€.
- serverμ μ²λ¦¬ λ°©μμ μΌκ΄μ±μ λΆμ¬νκ³ λΆλ΄μ΄ μ€μ΄λ€λ©°, μλΉμ€μ μμ λκ° λμμ§λ€.
Cacheable(μΊμ μ²λ¦¬ κΈ°λ₯)
- μΉ νμ€ httpνλ‘ν μ½μ κ·Έλλ‘ μ¬μ©νλ―λ‘ μΉμμ μ¬μ©νλ κΈ°μ‘΄μ μΈνλΌλ₯Ό κ·Έλλ‘ νμ©ν μ μλ€.
- μ¦, httpκ° κ°μ§ κ°μ₯ κ°λ ₯ν νΉμ§ μ€ νλμΈ μΊμ± κΈ°λ₯μ μ μ©ν μ μλ€.
- httpνλ‘ν μ½ νμ€μμ μ¬μ©νλ Last-Modifiedνμ€λ E-Tagλ₯Ό μ΄μ©νλ©΄ μΊμ± ꡬνμ΄ κ°λ₯νλ€.
- λλμ μμ²μ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ μΊμκ° μꡬλλ€.
- μΊμ μ¬μ©μ ν΅ν΄ μλ΅μκ°μ΄ λΉ¨λΌμ§κ³ REST ServerνΈλμμ μ΄ λ°μνμ§ μκΈ° λλ¬Έμ μ 체 μλ΅μκ°, μ±λ₯, μλ²μ μμ μ΄μ©λ₯ μ ν₯μμν¬ μ μλ€.
Layered System(κ³μΈ΅ν)
- Clientλ REST API serverλ§ νΈμΆνλ€.
- REST Serverλ λ€μ€ κ³μΈ΅μΌλ‘ ꡬμ±λ μ μλ€.
- API Serverλ μμ λΉμ¦λμ€ λ‘μ§μ μννκ³ κ·Έ μλ¨μ 보μ, λ‘λλ°Έλ°μ±, μνΈν, μ¬μ©μ μΈμ¦ λ±μ μΆκ°νμ¬ κ΅¬μ‘°μμ μ μ°μ±μ μ€ μ μλ€.
- λν λ‘λλ°Έλ°μ±, 곡μ μΊμ λ±μ ν΅ν΄ νμ₯μ±κ³Ό 보μμ±μ ν₯μμν¬ μ μλ€.
- PROXY, κ²μ΄νΈμ¨μ΄ κ°μ λ€νΈμν¬ κΈ°λ°μ μ€κ° 맀체λ₯Ό μ¬μ©ν μ μλ€.
REST APIλ?
API(Application Programming Interface) λ?
- apiλ ν΄λΌμ΄μΈνΈκ° 리μμ€λ₯Ό μμ²ν μ μλλ‘ μλ² μΈ‘μμ μ 곡λ μΈν°νμ΄μ€λ₯Ό λ§νλ€.
- REST API: REST μν€ν μ²λ₯Ό λ°λ₯΄λ APIλ₯Ό μλ―Έ
- REST APIνΈμΆ : REST λ°©μμ λ°λ₯΄κ³ μλ μλ²μ νΉμ ν μμ²μ μ μ‘νλ κ²μ μλ―Έ (μ¬κΈ°μ μ΄λ€ νμμΌλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μμ§ λͺ μν νμκ° μλλ°, λ°λ‘ μ¬κΈ°μ JSONν¬λ§·μ΄ μ¬μ©λλ€.)
+ ) JSONμ΄λ? JavaScript Object Notation, λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λκ² μ¬μ©νλ κ²½λμ λ°μ΄ν° νμ
- μ΄λ¬ν apiλ‘ λ°μ΄ν°μ κΈ°λ₯μ μ§ν©μ μ 곡νμ¬ μ»΄ν¨ν° νλ‘κ·Έλ¨ κ° μνΈμμ©μ μ΄μ§νλ©°, μλ‘ μ 보λ₯Ό κ΅νκ°λ₯νλλ‘ νλ€.
- μλ²λ₯Ό κ°λ°νλ€λ κ²μ apiμ λν λ§μ€ν° κΆνμ΄ μκΈ°λ κ²μ΄λ€.
- apiμ ν¨κ» νμ λ©λ΄μΌλ μ 곡λμ΄μΌ νλ€.
REST APIμ μ μ
- REST κΈ°λ°μΌλ‘ μλΉμ€ APIλ₯Ό ꡬννλ κ²
- μ΅κ·Ό OPEN API(λꡬλ μ¬μ©ν μ μλλ‘ κ³΅κ°λ API) , λ§μ΄ν¬λ‘ μλΉμ€(νλμ ν° μ ν리μΌμ΄μ μ μ¬λ¬ κ°μ μμ μ ν리μΌμ΄μ μΌλ‘ μͺΌκ°μ΄ λ³κ²½κ³Ό μ‘°ν©μ΄ κ°λ₯νλλ‘ λ§λ μν€ν μ³) λ±μ μ 곡νλ μ 체 λλΆλΆμ REST APIλ₯Ό μ 곡νλ€.
REST API μ€κ³ μμ
μ°Έκ³ : μλ΅ μν μ½λ
1XX : μ μ‘ νλ‘ν μ½ μμ€μ μ 보 κ΅ν
2XX : ν΄λΌμ΄μΈνΈ μμ²μ΄ μ±κ³΅μ μΌλ‘ μνλ¨
3XX : ν΄λΌμ΄μΈνΈλ μμ²μ μλ£νκΈ° μν΄ μΆκ°μ μΈ νλμ μ·¨ν΄μΌ ν¨
4XX : ν΄λΌμ΄μΈνΈμ μλͺ»λ μμ²
5XX : μλ²μͺ½ μ€λ₯λ‘ μΈν μνμ½λ