๐ก ์น์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ ์์(Resource)์ HTTP URI๋ก ํํํ๊ณ , HTTP ํ๋กํ ์ฝ์ ํตํด์ ์์ฒญ๊ณผ ์๋ต์ ์ ๋ฆฌํ๋ ๋ฐฉ์
๋จ๊ณ | ๋ด์ฉ |
---|---|
0๋จ๊ณ | HTTP ์ฌ์ฉ |
1๋จ๊ณ | ๊ฐ๋ณ ๋ฆฌ์์ค์์ ํต์ ์ค์ |
2๋จ๊ณ | HTTP ๋ฉ์๋ ์์น ์ค์ |
3๋จ๊ณ | HATEOAS ์์น ์ค์ |
๐ 0๋จ๊ณ
๋จ์ํ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ฒ
๋จ ํ๋์ endpoint(/appointment)์์ ์๋ก ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ฉฐ ์๋.
๋งค๊ฐ๋ณ์๋ฅผ body๋ก ์ ๋ฌํ๊ธฐ ์ํด HTTP Method๋ POST๋ฅผ ์ฌ์ฉ
์์ฒญ | ์๋ต |
---|---|
POST /appointment HTTP 1.1 //ํค๋ ์๋ต// { ย ย ย ย "name" : "a" ย ย ย ย "date" : "2022-12-02" } |
HTTP 1.1 200 OK //ํค๋ ์๋ต// { ย ย ย ย "slots" : [ ย ย ย ย ย ย {"id" : "1", "name" : "a", "time" : "09:00"} ย ย ย ย ย ย {"id" : "2", "name" : "a", "time" : "10:00"} ย ย ย ย ] } |
์์ฒญ | ์๋ต |
---|---|
POST /appointment HTTP 1.1 //ํค๋ ์๋ต// { ย ย ย ย "name" : "a" ย ย ย ย "time" : "09:00" ย ย ย ย "patient" : "A" } |
HTTP 1.1 200 OK //ํค๋ ์๋ต// |
๐ 1๋จ๊ณ
๊ฐ๋ณ ๋ฆฌ์์ค์ ๋ง๋ endpoint ์ฌ์ฉ(/doctors/a)
์์ฒญํ๊ณ ๋ฐ๋ ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌํด์ผ ํจ
์์ฒญ | ์๋ต |
---|---|
POST /doctors/a HTTP 1.1 //ํค๋ ์๋ต// { ย ย ย ย date : "2022-12-02" } |
HTTP 1.1 200 OK //ํค๋ ์๋ต// { ย ย ย ย "slots" : [ ย ย ย ย ย ย {"id" : "1", "name" : "a", "time" : "09:00"} ย ย ย ย ย ย {"id" : "2", "name" : "a", "time" : "10:00"} ย ย ย ย ] } |
์์ฒญ | ์๋ต |
---|---|
POST /slots/1 //ํค๋ ์๋ต// { ย ย ย ย patient : "A" } |
HTTP 1.1 200 OK { ย ย ย ย "appointment" : { ย ย ย ย ย ย ย ย "slot" : {"id" : "1", "name" : "a", "time" : "09:00"}, ย ย ย ย ย ย ย ย "patient" : "A" ย ย ย ย } } |
๐ 2๋จ๊ณ
CRUD์ ์ ํฉํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉ
์์ฒญ | ์๋ต |
---|---|
GET /doctors/a/slots?date=2022-12-02 //ํค๋ ์๋ต// |
HTTP 1.1 200 OK //ํค๋ ์๋ต// { ย ย ย ย "slots" : [ ย ย ย ย ย ย {"id" : "1", "name" : "a", "time" : "09:00"} ย ย ย ย ย ย {"id" : "2", "name" : "a", "time" : "10:00"} ย ย ย ย ] } |
์์ฒญ | ์๋ต |
---|---|
POST /slots/1 //ํค๋ ์๋ต// { ย ย ย ย patient : "A" } |
HTTP 1.1 201 Created Location: /slots/1/appointment { ย ย ย ย "appointment" : { ย ย ย ย ย ย ย ย "slot" : {"id" : "1", "name" : "a", "time" : "09:00"}, ย ย ย ย ย ย ย ย "patient" : "A" ย ย ย ย } } |
โพ๏ธ GET : ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํค์ง ์๋ ์์ฒญ์ ์ฌ์ฉ
โพ๏ธ POST : ์์ฒญ๋ง๋ค ์๋ก์ด ๋ฆฌ์์ค ์์ฑ
โพ๏ธ PUT : ์์ฒญ๋ง๋ค ๊ฐ์ ๋ฆฌ์์ค ๋ฐํ(๋ฉฑ๋ฑ์ฑ), ๊ต์ฒด
โพ๏ธ PATCH : ์์
๐ 3๋จ๊ณ
2๋จ๊ณ์ ๊ฑฐ์ ๋์ผํ๋ ์๋ต์๋ ๋ฆฌ์์ค์ URI๋ฅผ ํฌํจํ ๋งํฌ ์์๋ฅผ ์ฝ์
ํด์ผํจ
์ด ๋ ๋งํฌ์์๋ ์๋ก์ด ๋งํฌ๋ฅผ ๋ฃ์ด ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ
์์ฒญ | ์๋ต |
---|---|
GET /doctors/a/slots?date=2022-12-02 //ํค๋ ์๋ต// |
HTTP 1.1 200 OK //ํค๋ ์๋ต// { ย ย ย ย "slots" : [ ย ย ย ย ย ย {"id" : "1", "name" : "a", "time" : "09:00"} ย ย ย ย ย ย {"id" : "2", "name" : "a", "time" : "10:00"} ย ย ย ย ], ย ย ย ย "links" : { ย ย ย ย ย ย "appointment" : { ย ย ย ย ย ย ย ย "href" : "http://localhost:8080/slots/1", ย ย ย ย ย ย ย ย "method" : "POST" ย ย ย ย ย ย ย ย } ย ย ย ย ย ย } } |
์์ฒญ | ์๋ต |
---|---|
POST /slots/1 //ํค๋ ์๋ต// { ย ย ย ย patient : "A" } |
HTTP 1.1 201 Created Location: /slots/1/appointment { ย ย ย ย "appointment" : { ย ย ย ย ย ย ย ย "slot" : {"id" : "1", "name" : "a", "time" : "09:00"}, ย ย ย ย ย ย ย ย "patient" : "b" ย ย ย ย }, ย ย ย ย "links" : { ย ย ย ย ย ย "self" : { ย ย ย ย ย ย ย ย "href" : "http://localhost:8080/slots/1", ย ย ย ย ย ย ย ย "method" : "GET" ย ย ย ย ย ย ย ย } ย ย ย ย ย ย }, ย ย ย ย ย ย "cancel" : { ย ย ย ย ย ย ย ย "href" : "http://localhost:8080/slots/1/cancel", ย ย ย ย ย ย ย ย "method" : "DELETE" ย ย ย ย ย ย ย ย } ย ย ย ย ย ย } } |
๐ก ๋๊ตฌ์๊ฒ๋ ์ด๋ ค์์ง๋ง, ์ ํด์ง ์ด์ฉ์์น์ ๋ฐ๋ผ ์ ํ(๊ฐ๊ฒฉ, ์ ๋ณด์ ์ ํ ๋ฑ)์ด ์กด์ฌํจ
์) Open Weather Map - ๋ ์จ ์ ๋ณด ์ ๊ณต, JSONํํ๋ก ์๋ต
๐ก API๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ๊ฒ
๐ก ๋ก๊ทธ์ธํ ์ด์ฉ์์๊ฒ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ API Key์ ํํ๋ก ์ ๊ณตํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ API Key๋ฅผ ์ ๋ฌํ๋ฉด, ์๋ต์ ๋ฐ์ ์ ์์
REST API ์ฑ์๋ ๋ชจ๋ธ (Maturity Model)
Richardson ์ฑ์๋ ๋ชจ๋ธ
์ฝ๋์คํ
์ด์ธ ๊ต๊ณผ์