Representational State Transfer API
HTTPμ μ₯μ μ κ·Ήλν ν μ μλ λ€νΈμν¬ μν€ν μ³
μΉμμ μ¬μ©λλ λ°μ΄ν°λ μμ(Resource)μ HTTP URIλ‘ νννκ³ , HTTP νλ‘ν μ½μ ν΅ν΄ μμ²κ³Ό μλ΅μ μ μνλ λ°©μ
(URIλ₯Ό μ΄λ»κ² μ μν 건μ§μ λν κ·μΉ)
β μ μΌ ν΅μ¬μ 리μμ€(URI) μλ³
βοΈ λ¦¬μμ€ (Resource)
λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ λ°μ΄ν°, λ¬Έμ, μ΄λ―Έμ§, λμμ λ± HTTP ν΅μ μ ν΅ν΄ μ£Όκ³ λ°μ μ μλ λͺ¨λ κ²
ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄μμ λ°μ΄ν°μ 리μμ€λ₯Ό μμ²νκ³ μλ΅ν λ λ°λ₯΄λ κ·μΉ
( μ΄ κ·μΉλλ‘ μμ²κ³Ό μλ΅μ μ§νν΄μΌν¨ )
[μ°Έκ³ ] https://docs.spring.io/spring-framework/docs/current/javadoc-api/
βοΈ μλν¬μΈνΈ μ λ λ°©λ²
CamelCase - λͺ¨λ λΆμ¬μ°κ³ λ¨μ΄μ μμμ λλ¬Έμλ‘ (맨μμ λμλ¬Έμ μκ΄ μμ)
Snake_case - μΈλλ°λ‘ λ¨μ΄ μκΈ°
Spinal-case - νμ΄νμΌλ‘ λ¨μ΄ μκΈ° (URI μΈ λ μ¬μ© - URIλ λͺ¨λ μλ¬Έμ)
β λ³΄ν΅ CamelCase μ¬μ©νκ³ λλ¨Έμ§λ κ±°μ μμ
βοΈ CRUD
λλΆλΆμ μ»΄ν¨ν° μννΈμ¨μ΄κ° κ°μ§λ κΈ°λ³Έμ μΈ λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μΈ Create(μμ±) - POST, Read(μ½κΈ°) - PUT, Update(κ°±μ ) - PUT, Delete(μμ )λ₯Ό λ¬Άμ΄μ μΌμ»«λ λ§
3λ¨κ³ : HATEOAS μμΉ μ€μ
β νμ΄νΌλ―Έλμ΄ μ»¨νΈλ‘€μ μ μ©
( HATEOAS(Hypertext As The Engine Of Application State)μ μ½μ΄ )
β μμ²μ 2λ¨κ³μ λμΌνμ§λ§, μλ΅μλ 리μμ€(URI)λ₯Ό ν¬ν¨ν λ§ν¬λ₯Ό μ½μ
νμ¬ μλ‘μ΄ κΈ°λ₯μ μ κ·Όν μ μλλ‘ ν¨
( λ μ½κ³ , ν¨μ¨μ μΌλ‘ 리μμ€μ κΈ°λ₯μ μ κ·Όν μ μκ² νλ νΈλ¦¬κ±°κ° λ μ μμ )
β
Ex. μ’μ μμ½ μ, μμ½ κ°λ₯ μκ° νμΈ νμ κ·Έ μκ°λμ μμ½ν μ μλ λ§ν¬ μ½μ
or μμ½ μλ£ ν κ·Έ μμ½μ λ€μ νμΈν μ μλ λ§ν¬ μ½μ
[μ°Έκ³ ] https://cloud.google.com/apis/design?hl=ko
[μ°Έκ³ ] https://sanghaklee.tistory.com/57
GET
β νΉμ 리μμ€ μ‘°ν (Read)
( λ°μ΄ν°μ μμ μμ΄ λ°μ΄ν°λ₯Ό λ°κΈ°λ§ ν¨ )
β bodyλ₯Ό κ°μ§μ§ μμ query parameter μ¬μ©νμ¬ λ¦¬μμ€ μ λ¬
Ex. μ’μ μ‘°ν, κ²μν΄μ μλ£ λ³΄κΈ°
HEAD
β GETκ³Ό λμΌν μλ΅μ΄μ§λ§, μλ΅μ body κ° ν¬ν¨λμ§ μμ
POST
β μμ²λ§λ€ μλ‘μ΄ λ¦¬μμ€ μμ± (λ©±λ±μ± κ°μ§μ§ μμ) (Creat)
( μκΈ°μΉ λͺ»ν inputμΌλ‘ μλ²μ μν λ³νλ λΆμμ©μ μΌμΌν¬ μλ μμ )
β μ μμ±λλ©΄ μλ΅μ 201 createdλ‘ μ΄
Ex. μ’μ μμ½, νμ κ°μ
PUT
β μμ²λ§λ€ κ°μ 리μμ€ λ°ν (λ©±λ±μ± κ°μ§)
β λͺ©μ 리μμ€μ λͺ¨λ νμ¬ νμλ₯Ό μμ²νλ κ°μΌλ‘ κ΅μ²΄ (μ 체 μμ ) (Update)
DELETE
β νΉμ 리μμ€ μμ
Ex. νμ νν΄
PATCH
β 리μμ€μ μΌλΆλΆλ§ μμ (Update)
Ex. λΉλ°λ²νΈ μμ
OPTIONS
β 리μμ€μ λν ν΅μ μ΅μ
μ€λͺ
TRACE
β 리μμ€μ λν κ²½λ‘λ₯Ό λ°λΌ λ©μμ§ λ£¨νλ°± ν
μ€νΈ μν
βοΈ λ©±λ±μ± (Idempotent)
β 맀 μμ²λ§λ€ κ°μ 리μμ€λ₯Ό λ°ννλ νΉμ§
Ex.
- λ©€λ² λ±λ‘ /members β POST
- λ©€λ² λͺ©λ‘ μ‘°ν /members β GET
- λ©€λ² μ‘°ν /members/{id} β GET
- λ©€λ² μμ /members/{id} β PUT/PATCH
- λ©€λ² μμ /members/{id} β DELETE
Ex. μ΄ 120κ°μ νΈμ μ€ μΈλ±μ€κ° 20~30μΈ νΈμ, μ¦ μ΄ κ°μ νΈμλ§ κ°μ Έμ¨λ€κ³ ν λ,
β GET /tweets?offset=20&limit=10 λ‘ μμ²
β μ 보 κ°μ Έμ / νΈμ μ 보 / κ±°κΈ°μ 20λΆν° 10κ°
β
( Query Parameter μ€ offset(νμ¬ μμΉ), limit(컨ν μΈ μ)κ° κ΄μ΅μ μΌλ‘ μ¬μ©λ¨ )
( μλ΅ν λ 보λ΄λ κ² )
200
: OK
β μ±κ³΅μ μΌλ‘ μλ΅μ λ§μΉ¨
201
: CREATED
β μλ‘μ΄ λ¦¬μμ€κ° μμ±λ¨
204
: NO CONTENT
β 리μμ€κ° μ±κ³΅μ μΌλ‘ μμ λμ΄ λ΄μ©μ΄ μμ
302
: Found
β 리λ€μ΄λ νΈν URLμ νμΈν¨
304
: NOT MODIFIED
β μμ²λ 리μμ€λ₯Ό μ¬μ μ‘ν νμκ° μμ
( μμ²ν 리μμ€μ λ³κ²½μκ°κ³Ό ν¬κΈ°λ±μ΄ μλ μλ κ±°λ μλ‘ κ°μ )
400
: BAD REQUEST
β μμ²μ΄ μλͺ»λμκ±°λ μ²λ¦¬ν μ μμ
401
: UNATHORIZED
β μμ²μλ μ¬μ©μ μΈμ¦μ΄ νμ
403
: FORBIDDEN
β μλ²κ° μμ²μ μ΄ν΄νμ§λ§ κ±°λΆνκ±°λ μ‘μΈμ€κ° νμ©λμ§ μμ
404
: Not Found
β ν΄λΌμ΄μΈνΈκ° μλͺ»λ νμ΄μ§λ₯Ό μλ²μ μμ²νμ¬ νμ΄μ§λ₯Ό μ°Ύμ μ μμ ( URI λ€μ 리μμ€κ° μμ )
406
: Not Acceptable
β ν΄λΌμ΄μΈνΈκ° μλ΅ μ½λλ₯Ό λ°μ μ μμ
409
: Conflict
β μμ²μ΄ νμ¬ μλ²μ μνμ μΆ©λλ λ
500
: Internal Server Error
β μλ²μμ μλ¬κ° λ°μν¨
503
: Service Unavailable
β νμ¬ μλ²κ° λ¬Έμ κ° μμ΄ μ¬μ©μ΄ λΆκ°λ₯ν μνμ
1xx
- μ 보 νμΈ (κ±°μ μ¬μ© X)2xx
- ν΅μ μ±κ³΅3xx
- 리λ€μ΄λ μ νμ (μΆκ°μ μΈ μμ μ΄ νμν λ)4xx
- ν΄λΌμ΄μΈνΈ μ€λ₯ (ν΄λΌμ΄μΈνΈμμ μλͺ» μμ²μ 보λμ κ²½μ°)5xx
- μλ² μ€λ₯ (μλ²κ° μ£½μ΄μμ λ, μλ²μμ μ€λ₯κ° λ¬μ λ)
[μ°Έκ³ ] https://developer.mozilla.org/ko/docs/Web/HTTP/Status
Ex. λ μ¨ API - https://openweathermap.org/api
ν μ€νΈλ₯Ό μν΄ λ§€λ² μ½λ μμ±νλ κ²μ λ무 λ²κ±°λ‘κΈ°μ API ν μ€νΈ λκ΅¬λ‘ κ°νΈνκ² ν μ€νΈν΄λ³Ό μ μλ€.
μ€λμ μ¬λ¬ API ν μ€νΈ λκ΅¬λ€ μ€ Postmanμ μ¬μ©νμ¬ λ©μλλ€μ ν μ€νΈ ν΄λ³΄μλ€ !
POST λ©μλλ‘ λ΄ κΉν μμ΄λμ λ©μΈμ§λ₯Ό λ¨κ²¨λ³΄μκ³ β¬οΈ
GET λ©μλλ‘ λ΄κ° postν λ©μΈμ§λ₯Ό μ‘°νν΄λ³΄μλ€ β¬οΈ
POST λ©μλλ‘ clear μμ²νλ©΄ λ΄κ° μ¬λ Έλ λ©μΈμ§λ€ μ΄κΈ°νλ λ¨ β¬οΈ
But, μ΄κ±΄ μΌλ°μ μΌλ‘ μ¬μ©λμ§ μλ κ²½μ°μ΄κ³ DELETE μ¬μ©ν¨
κ·Έλ¦¬κ³ μ€λ₯Έμͺ½μ μκ² μνμ½λλ νμΈ κ°λ₯! β¬οΈ
( μ¬μ§λ§μ λ무 μλ€,,γ
γ
)
μ€λμ μ¬μ΄κ°λ νμκ°λ€!!
λ§μ΄ μ΄λ ΅μ§λ μκ³ νμ΄μ μ€μ΅λ μμ£Ό 빨리 λλ¬λ€ γ
γ
λ€λ₯Έ κ±° 볡μ΅ν΄μΌκ² λ€!!