μΉμμ μ¬μ©λλ λ°μ΄ν°λ μμμ HTTP URIλ‘ νννκ³ , HTTP νλ‘ν μ½μ ν΅ν΄ μμ²κ³Ό μλ΅μ μ μνλ λ°©μ.
μλΉμμ μμ¬λ₯Ό μ£Όλ¬ΈνκΈ° μν΄ λ©λ΄νμ΄ μλ κ²κ³Ό κ°μ΄, Clientμ Server μ¬μ΄μλ λ°μ΄ν°μ 리μμ€λ₯Ό μμ²νκ³ , μμ²μ λ°λ₯Έ μλ΅μ μ λ¬νκΈ° μν λ©λ΄νμ΄ νμνλ€. μ΄λ, HTTP νλ‘ν μ½μ κΈ°λ°μΌλ‘ μμ²κ³Ό μλ΅μ λ°λΌ 리μμ€λ₯Ό μ£Όκ³ λ°κΈ° μν΄μλ μμ보기 μ½κ³ μ μμ±λ λ©λ΄νμ΄ νμνλ©°, μ΄ μν μ APIκ° μννλ€.
μλλ λ‘μ΄ νλ©μ RESTλ°©λ²λ‘ μ λ³΄λ€ λ μ€μ©μ μΌλ‘ μ μ©νκΈ° μν Richardsonμ REST μ±μλ λͺ¨λΈμ΄λ€.
REST μ±μλ λͺ¨λΈμ μ΄ 4λ¨κ³λ‘ λλμ΄μ§λ©°, λͺ¨λ λ¨κ³λ₯Ό μ§ν€κΈ° μ΄λ ΅κΈ° λλ¬Έμ 2λ¨κ³κΉμ§λ§ μ μ©ν΄λ μ’μ APIλΌκ³ λ³Ό μ μλ€.(HTTP API)
REST APIλ₯Ό μμ±νκΈ° μν κΈ°λ³Έ λ¨κ³λ‘, λ¨μν HTTP νλ‘ν μ½μ μ¬μ©νκΈ°λ§ ν΄λ λλ€.
μλλ νμ€μ΄λΌλ μ΄λ¦μ μ£ΌμΉμμ μμ½ κ°λ₯ν μκ°μ νμΈνκ³ , νΉμ μκ°μ μμ½νλ μν©μ μμμ΄λ€.
κ°λ³ 리μμ€μμ ν΅μ μ μ€μν΄μΌνλ€.
REST APIλ μΉμμ μ¬μ©λλ λͺ¨λ λ°μ΄ν°λ μμμ HTTP URIλ‘ νννκΈ° λλ¬Έμ λͺ¨λ μμμ κ°λ³ 리μμ€μ λ§λ μλ ν¬μΈνΈ(Endpoint)λ₯Ό μ¬μ©ν΄μΌ νλ©°, μμ²νκ³ λ°λ μμμ λν μ 보λ₯Ό μλ΅μΌλ‘ μ λ¬ν΄μΌ νλ€.
μμ 0λ¨κ³μμλ μμ²μμμ μλν¬μΈνΈλ‘ λͺ¨λ /appointment
λ₯Ό μ¬μ©νμ§λ§, 1λ¨κ³μμλ μλμ κ°μ΄ μμ²νλ 리μμ€κ° 무μμΈμ§μ λ°λΌ κ°κΈ° λ€λ₯Έ μλν¬μΈνΈλ‘ ꡬλΆνμ¬ μ¬μ©νλ€.
μμ μμμμ μμ½ κ°λ₯ν μκ° νμΈμ΄λΌλ μμ²μ μλ΅μΌλ‘ λ°κ² λλ μμ(리μμ€)μ νμ€μ΄λΌλ μμ¬μ μμ½ κ°λ₯ν μκ°λμ΄λ―λ‘, μμ² μ /doctors/νμ€
μ΄λΌλ μλν¬μΈνΈλ₯Ό μ¬μ©νλ€.
λν, νΉμ μκ°μ μμ½νκ² λλ©΄ μ€μ slotsλΌλ μμμ 123μ΄λΌλ idλ₯Ό κ°μ§ μμμ΄ λ³κ²½λκΈ° λλ¬Έμ, νΉμ μκ°μ μμ½μ΄λΌλ μμ²μμλ /slots/123
μΌλ‘ μ€μ λ³κ²½λλ 리μμ€λ₯Ό μλν¬μΈνΈλ‘ μ¬μ©νλ€.
λλΆμ΄ μμ²μ λ°λ₯Έ μλ΅μΌλ‘ 리μμ€λ₯Ό μ λ¬ν λμλ μ¬μ©ν 리μμ€μ λν μ 보μ ν¨κ» μλμ κ°μ΄ 리μμ€ μ¬μ©μ λν μ±κ³΅/μ€ν¨ μ¬λΆλ₯Ό λ°νν΄μΌ νλ€.
CRUD(Create, Read, Update, Delete)μ λ§κ² μ μ ν HTTP λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ€.
μμ 0λ¨κ³, 1λ¨κ³ μμμμλ λͺ¨λ μμ²μ CRUDμ μκ΄μμ΄ POST λ©μλλ₯Ό μ¬μ©νκ³ μκΈ° λλ¬Έμ CRUDμ λ°λ₯Έ μ ν©ν λ©μλλ₯Ό μ¬μ©ν κ²μ΄ μλλ€.
λ¨Όμ μμ½ κ°λ₯ν μκ°μ νμΈνλ€λ κ²μ μμ½ κ°λ₯ν μκ°μ μ‘°ν(READ)νλ νμλ₯Ό μλ―ΈνκΈ° λλ¬Έμ GET
λ©μλλ₯Ό μ¬μ©ν΄ μμ²μ 보λ΄λλ°, GET
λ©μλλ bodyλ₯Ό κ°μ§μ§ μμΌλ―λ‘ query parameter
λ₯Ό μ¬μ©ν΄ 리μμ€λ₯Ό μ λ¬νλ€.
λν, νΉμ μκ°μ μμ½νλ€λ κ²μ ν΄λΉ νΉμ μκ°μ μμ½μ μμ±(CREATE)νλ νμλ₯Ό μλ―ΈνκΈ° λλ¬ΈμPOST
λ©μλλ₯Ό μ¬μ©νμ¬ μμ²μ 보λ΄μΌ νλ€.
μ΄λ,POST
μμ²μ λν μλ΅μ μλ‘κ² μμ±λ 리μμ€λ₯Ό 보λ΄μ£ΌκΈ° λλ¬Έμ μλ΅ μ½λλ 201 Created
λ‘ λͺ
ννκ² μμ±ν΄μΌ νλ©°, κ΄λ ¨ 리μμ€λ₯Ό Clientκ° Location ν€λμ μμ±λ URIλ₯Ό ν΅ν΄ νμΈν μ μλλ‘ νλ©΄ μλ²½νκ² REST μ±μλ λͺ¨λΈμ 2λ¨κ³λ₯Ό μΆ©μ‘±ν κ²μ΄λΌκ³ λ³Ό μ μλ€.
GET
λ©μλλ μλ²μ λ°μ΄ν°λ₯Ό λ³νμν€μ§ μλ μμ²μ μ¬μ©ν΄μΌ νλ€.
POST
λ©μλλ μμ²λ§λ€ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ³ PUT
λ©μλλ μμ²λ§λ€ κ°μ 리μμ€λ₯Ό λ°ννλ€. μ΄λ κ² λ§€ μμ²λ§λ€ κ°μ 리μμ€λ₯Ό λ°ννλ νΉμ§μ λ©±λ±(idempotent)νλ€κ³ νλ©°,λ©±λ±μ±μ κ°μ§λ λ©μλ PUT
κ³Ό κ·Έλ μ§ μμ λ©μλ POST
λ ꡬλΆνμ¬ μ¬μ©ν΄μΌ νλ€.
PUT
λ©μλμ PATCH
λ©μλλ ꡬλΆνμ¬ μ¬μ©ν΄μΌ νλ©°, PUT
μ κ΅μ²΄, PATCH
λ μμ μ μ©λλ‘ μ¬μ©νλ€.
λ§μ§λ§ λ¨κ³λ HATEOAS(Hypertext As The Engine Of Application State)λΌλ νμ΄νΌλ―Έλμ΄ μ»¨νΈλ‘€μ μ μ©νλ€.
3λ¨κ³μ μμ²μ 2λ¨κ³μ λμΌνμ§λ§, μλ΅μ 리μμ€μ URIλ₯Ό ν¬ν¨ν λ§ν¬ μμλ₯Ό μ½μ νμ¬ μμ±ν΄μΌ νλ€.
μ΄λ μλ΅μ λ€μ΄κ°κ² λλ λ§ν¬ μμλ μλ΅μ λ°μ λ€μμ ν μ μλ λ€μν μ‘μ λ€μ μν΄ λ§μ νμ΄νΌλ―Έλμ΄ μ»¨νΈλ‘€μ ν¬ν¨νκ³ μλ€.
μλμ μμμμλ μμ½ κ°λ₯ μκ° νμΈ ν, κ·Έ μκ°λμ μμ½μ ν μ μλ λ§ν¬λ₯Ό μ½μ νκ±°λ μμ½μλ£ ν, μμ½μ νμΈν μ μλ λ§ν¬λ₯Ό μ½μ νλ€.
κΈμ κ·Έλλ‘ λꡬμκ²λ μ΄λ €μλ APIλ‘, κ°κ° μ ν΄μ§ μ΄μ©μμΉμ΄λ μ νμ¬νμ΄ μμ μ μλ€.
APIλ₯Ό μ΄μ©νκΈ° μν΄μ νμνλ©°, μλ²μ λ¬Έμ μ¬λ μ΄μ λ‘ λ³Ό μ μλ€.
λ‘κ·ΈμΈν μ΄μ©μμκ² μμμ μ κ·Όν μ μλ κΆνμ API Keyμ ννλ‘ μ 곡νκ³ , λ°μ΄ν°λ₯Ό μμ²ν λ API Keyλ₯Ό κ°μ΄ μ λ¬ν΄μΌλ§ μνλ μλ΅μ λ°μ μ μλ€.
Reference: μ½λμ€ν μ΄μΈ