HTTP ๋ฉ์๋ 4๊ฐ๋ฅผ ํตํด api๋ฅผ ๋์์ธ ํ๋ ๊ฒ.
rest api๋ web์ ํต์ ๊ท์ฝ์ธ HTTP๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ HTTP method๋ฅผ ์ด์ฉํ๋ค.
HTTP URI(Uniform Resource Identifier)์ ํตํด ์์(Resource)์ ๋ช ์ํ๊ณ , HTTP Method(POST, GET, PUT, Patch, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์ค๊ณ์ ์ค์ฌ์ Resource๊ฐ ์๊ณ HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ฒ๋ฅผ ์๋ฏธํ๋ค
REST์ ํน์ง์ ๊ธฐ๋ฐ์ผ๋ก API๋ฅผ ์ ๊ณตํ๋ ๊ฒ
HTTP ์์ฒญ์ ๋ณด๋ผ ๋ ์ด๋ค URI์ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ง ๊ฐ๋ฐ์๋ค ์ฌ์ด์ ์ง์ผ์ง๋ ์ฝ์
RESTful์ REST์ ๋น๊ณต์์ ๊ตฌํ ๊ฐ์ด๋์ด๋ค. ๋ฐ๋์ ๋ฐ๋ผ์ผ ํ๋ ๋ฒ์น์ ๋ง๋ค์ด์ ๊ณตํํ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๊ฐ๋ฐ์๋ค์ด ๋น๊ณต์์ ์ผ๋ก ์๊ฒฌ์ ์ ์ํ ๊ฒ๋ค์ ๋ชจ์์ผ๋ก, ์ฆ ๊ฐ๋ฐ์๋ง๋ค ์๊ฐํ๋ RESTful์ ๋ด์ฉ์ด ๋ค๋ฅผ ์๋ ์๋ค.
1) HTTP ํต์ ์ ํ ๋ ๋ฆฌ์์ค๋ URI๋ฅผ ํตํด์ ์๋ณ,
2) ํ์๋ HTTP method(POST,GET,DELETE, PUT, Patch)๋ฅผ ํตํด์,
3) ๊ฒฐ๊ณผ๋ ์๋ต ์ฝ๋(201, 403 ~~)๋ก ์๋ ค์ค๋ค.
const onAddClick = () => {
fetch("http://localhost:3001/days/", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
id: Date.now(),
day: days.length + 1,
}),
}).then(res => {
if (res.ok) {
alert("์ ์ฅ ์๋ฃ");
history.push("/");
}
});
};
const onChange = () => {
fetch(`http://localhost:3001/words/${word.id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
...word,
isDone: !isDone,
}),
}).then(res => {
if (res.ok) {
setIsDone(!isDone);
}
});
};
const onDelClick = () => {
if (window.confirm("are your sure?")) {
fetch(`http://localhost:3001/words/${word.id}`, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
},
}).then(res => {
if (res.ok) {
setWord({
...word,
id: 0,
});
}
});
}
};
if (word.id === 0) {
return null;
}
๋ฆฌ์์ค์ ๋ฆฌ์์ค๊ฐ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์์ ๊ฒฝ์ฐ
topics(๋ถ๋ชจ)/1(๋ถ๋ชจ์ element id)/comments(์์)
// topics์ 1๋ฒ ์ธ๋ฑ์ค๊ฐ comments๋ฅผ ํฌํจํ๋ค
์ด์ ๊ฐ์ด ํํํ๋ค.
: 100 : continue : ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฐ๋ฅธ ์์ฒญํ์ ๋
: 102 : processing : ์์ฒญ ์ฒ๋ฆฌ ์ค
: 200 : ok : ์์ฒญ๋ ๋ฆฌ์์ค ์ฑ๊ณต ์ํ
: 201 : created : ์์ฒญ๋ ๋ฆฌ์์ค ์ฑ๊ณต์ ์ผ๋ก ์์ฑ
: 204 : no content : ์์ฒญ๋ ๋ฆฌ์์ค ์ํ but ๋ด์ฉ์ ์์
: 301 : ์์ฒญ๋ ๊ฒ์ด ๋ค๋ฅธ url๋ก ์ฎ๊ฒจ์ง
: 302 : ์์ฒญ๋ ๊ฒ์ด ์์์ ์ผ๋ก ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ฎ๊ฒจ์ง
: 303 : get ์์ฒญ์์๋ง ์ฌ์ฉ, 302์ ์ ์ฌ
: 307 : post ์์ฒญ์ ๋ํด์๋ง, ๋ค๋ฅธ ๊ณณ์ผ๋ก ์์์ ์ผ๋ก ์ฎ๊ฒจ์ง
: 308 : ๋ค๋ฅธ ๊ณณ์ผ๋ก ์๊ตฌ์ ์ผ๋ก ์ฎ๊ฒจ์ง
: 400 : ์๋ชป๋ ์์ฒญ์ ํ์ ๋
: 401 : ๊ถํ์ด ์๋ ์ฌ๋์ด ์์ฒญ(๋ก๊ทธ์ธ์ด ์๋ ๊ฒฝ์ฐ)
: 403 : ํน์ ํ ์ผ์ ๋ํ ๊ถํ์ด ์์ ๋(๋ก๊ทธ์ธ์ด ๋์์ง๋ง ์ผ๋ถ ์ ํ์ด ์๋ ๊ฒฝ์ฐ)
: 404 : ํด๋น url์ด ์กด์ฌํ์ง ์์ ๋
: 405 : ํด๋น url๋ฅผ ์ฌ์ฉ๋๋ ๊ฒ์ด ํ์ฉ๋์ง ์์ ๋
: 409 : ํด๋ผ์ด์ธํธ๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ๋ฆฌ์์ค๊ฐ ์ด๋ฏธ ์กด์ฌํ๊ฑฐ๋ ์ถฉ๋ํ ๋
: 500 : ์๋ฒ ๋ด๋ถ์์ ๋ฌธ์ ๋ฐ์
: 502 : ์ค๊ฐ ์๋ฒ์ ์๋ต ๋ฌธ์
: 503 : ์๋ฒ๊ฐ ํน์ url์ ์ฒ๋ฆฌํ ์์ง ์ค๋น๋์ง ์์์ ๋