γREST(Representational State Transfer) λ μΉ μν€ν μ²μ νμμΌλ‘, μμμ μ μνκ³ , μμμ λν μνλ₯Ό μ£Όκ³ λ°λ λ°©μμ κ·μ ν μν€ν μ²μ΄λ€. RESTλ λΆμ° μΉ μμ€ν μ μν νμ€μ μΈ μ κ·Ό λ°©μμΌλ‘ μ¬μ©λλ€.
γRESTful APIλ REST μν€ν μ²λ₯Ό λ°λ₯΄λ μΉ μλΉμ€μ νμ€μ΄λ©°, μ£Όλ‘ HTTP νλ‘ν μ½μ κΈ°λ°μΌλ‘ ꡬνλλ€. μΉ μλΉμ€μ νμ€μΌλ‘ μ¬μ©λλ RESTful APIλ HTTP method(GET, POST, PUT, DELETE λ±)λ₯Ό μ¬μ©νμ¬ μμμ λν CRUD(Create, Read, Update, Delete) μμ μ μννλ€. RESTful APIλ κ°λ¨νκ³ νμ₯ κ°λ₯ν μΈν°νμ΄μ€λ₯Ό μ 곡νμ¬ λ€μν ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ λλλ€.
γHTTP(HyperText Transfer Protocol)λ ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ μν νλ‘ν μ½μ΄λ€. HTTP λ©μλλ ν΄λΌμ΄μΈνΈκ° μλ²μκ² μ΄λ€ λμμ μνν κ²μΈμ§λ₯Ό μ§μ νλλ° μ¬μ©νλ€. HTTP λ©μλλ₯Ό ν΅ν΄μ μΉ μλΉμ€μμ νμν λ°μ΄ν°λ₯Ό μμ²νκ±°λ μ μ‘νλ€.
γμλ²λ‘λΆν° λ°μ΄ν°λ₯Ό κ°μ Έμ¬ λ μ¬μ©λλ©°, μμ²λ λ°μ΄ν°λ URLμ 쿼리 λ¬Έμμ΄μ ν¬ν¨λ μ μλ€. GET μμ²μ μ£Όλ‘ μλ²μ λ°μ΄ν°λ₯Ό μ μ‘νμ§ μκ³ λ¦¬μμ€λ₯Ό μμ²ν λ μ¬μ©λλ€. μλ²μ μνλ λ°μ΄ν°λ₯Ό λ³κ²½μν€μ§ μμΌλ―λ‘ idempotentνλ€. λμΌν GET μμ²μ μ¬λ¬ λ² μνν΄λ νμ λμΌν μλ΅μ νλ€.
Body: Body κ°μ΄ μ‘΄μ¬νμ§ μλλ€.
Content-Type: Content-Type ν€λλ GET λ©μλμ νμλ μλλ€. λλΆλΆμ κ²½μ° ν΄λΌμ΄μΈνΈκ° μμ²ν λ°μ΄ν°λ₯Ό μλ²κ° μ΄λ€ νμμΌλ‘ λ°νν μ§λ₯Ό λνλ΄κΈ° μν΄ μ¬μ©λλ€.
γν΄λΌμ΄μΈνΈκ° μλ²μ λ°μ΄ν°λ₯Ό λ³΄λΌ λ μ¬μ©λλ€. μ£Όλ‘ HTMLμ <form> μμμμ μ¬μ©λλ©°, λ°μ΄ν°λ λ³Έλ¬Έμ ν¬ν¨λλ€.
Body: Body κ°μ POST λ°μ΄ν°λ‘ μ¬μ©λλ©°, μ£Όλ‘ HTML νΌ λ°μ΄ν°λ JSON νμμ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λλ€.
Content-Type: μ μ‘λλ λ°μ΄ν°μ νμμ λνλ΄κΈ° μν΄ Content-Type ν€λκ° μ¬μ©λλ€. (application/x-www-form-urlencoded, multipart/form-data, application/json λ±)
γμλ²μ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ±°λ κΈ°μ‘΄μ 리μμ€λ₯Ό μμ ν λ μ¬μ©λλ€. ν΄λΌμ΄μΈνΈλ 리μμ€μ URIλ₯Ό μ§μ νκ³ ν΄λΉ URIμ λν λ°μ΄ν°λ₯Ό μ μ‘νλ€. λμΌν λ°μ΄ν°λ‘ μ¬λ¬ λ² PUTμ μνν΄λ μ΅μ’ μ μΌλ‘λ λμΌν μνλ‘ μ μ§λλ€.(idempotent)
Body: μ λ°μ΄νΈν λ°μ΄ν°κ° Body κ°μ ν¬ν¨λλ€.
Content-Type: μ λ°μ΄νΈλλ λ°μ΄ν°μ νμμ λνλ΄κΈ° μν΄ Content-Type ν€λκ° μ¬μ©λλ€.
γμλ²μμ μ§μ λ 리μμ€λ₯Ό μμ ν λ μ¬μ©λλ€. ν΄λΌμ΄μΈνΈλ μμ ν 리μμ€μ URIλ₯Ό μ§μ νμ¬ μλ²μ μμ²μ 보λΈλ€. λμΌν DELETE μμ²μ μ¬λ¬ λ² μννλλΌλ μμ λ μμμ μμΌλ―λ‘ κ²°κ³Όκ° λμΌνλ€.(idempotent)
Body: μμ ν λ°μ΄ν°λ₯Ό λͺ μνλ Body κ°μ΄ ν¬ν¨λ μ μμ§λ§, Body κ°μ΄ 무μλκΈ°λ νλ€.
Content-Type: μΌλ°μ μΌλ‘ μ¬μ©λμ§ μλλ€.
γPUT λ©μλμ λΉμ·νμ§λ§, 리μμ€μ μΌλΆλ§μ μμ ν λ μ¬μ©λλ€. ν΄λΌμ΄μΈνΈλ μμ ν 리μμ€μ URIλ₯Ό μ§μ νκ³ μμ ν λ°μ΄ν°λ₯Ό μμ² λ³Έλ¬Έμ ν¬ν¨νμ¬ μλ²μ μμ²μ 보λΈλ€.
γGET λ©μλμ λΉμ·νμ§λ§, μ£Όλ‘ λ¦¬μμ€μ λ©νλ°μ΄ν°λ₯Ό νμΈν λ μ¬μ©νλ€. 리μμ€μ ν€λ μ 보λ§μ λ°ννκ³ μ€μ λ°μ΄ν°λ λ°ννμ§ μλλ€. GETκ³Ό λ§μ°¬κ°μ§λ‘ idempotentνλ€.
γμλ²κ° μ§μνλ λ©μλλ₯Ό νμΈνκ±°λ 리μμ€μ λν νΉλ³ν μ΅μ μ μμ²ν λ μ¬μ©νλ€. Idempotentνλ€.
γμμ²μ΄ μλ²μ λλ¬νμ λ μ΄λ»κ² λ³κ²½λμλμ§ νμΈνκΈ° μν΄, μμ² λ©μμ§λ₯Ό μλ²μκ² λλλ € λ°μ λ μ¬μ©λλ€. 보μμ μ΄μ λ‘ λλΆλΆ λΉνμ±νλμ΄ μλ€.
γνλ‘μλ₯Ό ν΅ν΄ μ°κ²°μ μ€μ ν λ μ¬μ©νλ€. μ£Όλ‘ HTTPSμ ν°λλ§μ μν΄ μ¬μ©νλ€.
γHTTP λ©μλμ Idempotent(λ©±λ±μ±) μ λμΌν μμ²μ μ¬λ¬ λ² μννλλΌλ κ·Έ κ²°κ³Όκ° λμΌνκ² μ μ§λλ νΉμ±μ κ°λλ€. λ©±λ±μ±μ HTTP λ©μλμ μμ μ±(safe)κ³Ό μ μ¬νμ§λ§ μ½κ° λ€λ₯΄λ€. ν΄λΌμ΄μΈνΈκ° λ€νΈμν¬ λ¬Έμ , νμμμ λ±μΌλ‘ μΈν΄ μ΄μ μμ²μ΄ μ€ν¨νμ¬ λμΌν μμ²μ λ€μ 보λ΄λλΌλ μμ νκ² μ²λ¦¬νλ€.
γGET, HEAD, PUT, DELETE, OPTIONSκ° Idempotentλ₯Ό κ°λλ€.
-μ£Όλ‘ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±ν λ μ¬μ©
-μμ²μ΄ μνλ λλ§λ€ μλ‘μ΄ λ¦¬μμ€κ° μμ±λλ©°, μμ±λ 리μμ€μ URIλ μλ²μ μν΄ κ²°μ λ¨
-μ£Όλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ¬μ©λλ©°, μλ²κ° μμ²μ μ²λ¦¬νλ©΄ μλ‘μ΄ λ¦¬μμ€κ° μμ±λ¨
-μ£Όλ‘ νΉμ 리μμ€λ₯Ό μ
λ°μ΄νΈν λ μ¬μ©
-μμ²λ 리μμ€κ° μλ²μ μ΄λ―Έ μ‘΄μ¬νλ€κ³ κ°μ νκ³ , ν΄λΉ 리μμ€λ₯Ό μ
λ°μ΄νΈνλ€. λ§μ½ ν΄λΉ 리μμ€κ° μ‘΄μ¬νμ§ μμΌλ©΄ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±ν¨
-PUT μμ²μ idempotentνλ©°, κ°μ μμ²μ μ¬λ¬ λ² λ³΄λ΄λ νμ λμΌν κ²°κ³Όλ₯Ό λ°ν
-리μμ€ μ 체λ₯Ό μ
λ°μ΄νΈ = μμ²λ 리μμ€μ μ 체 λ΄μ©μ μλ‘μ΄ λ°μ΄ν°λ‘ λ체
-PUT μμ²μ 리μμ€μ λͺ¨λ νλλ₯Ό μ 곡ν΄μΌ ν¨. λ§μ½ μΌλΆ νλλ§ μ 곡λλ€λ©΄ λλ½λ νλλ λΉμ΄μλ κ°μΌλ‘ μ
λ°μ΄νΈ
-리μμ€μ μΌλΆλ₯Ό μ
λ°μ΄νΈ, PUTκ³Ό λ¬λ¦¬ μ 체 리μμ€λ₯Ό λ체νλ κ²μ΄ μλλΌ μΌλΆ νλλ§ μ
λ°μ΄νΈ
-PATCH μμ²μ 리μμ€μ νΉμ νλλ§μ μ 곡νμ¬ ν΄λΉ νλλ§ μ
λ°μ΄νΈ. λ€λ₯Έ νλλ μ λ¨
-μΌλΆλ₯Ό μμ νλ λ° μ¬μ©λλ―λ‘, μμ²λ λ°μ΄ν°μλ μ
λ°μ΄νΈν νλλ§ ν¬ν¨