TIL 7์ฃผ์ฐจ REST API

lim1313ยท2021๋…„ 9์›” 3์ผ
0

๋ถ€ํŠธ์บ ํ”„ TIL

๋ชฉ๋ก ๋ณด๊ธฐ
27/49

๐Ÿ“Œ REST API

REST?

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

REST์˜ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ
HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์–ด๋–ค URI์— ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์— ์ง€์ผœ์ง€๋Š” ์•ฝ์†

RESTful API

RESTful์€ REST์˜ ๋น„๊ณต์‹์  ๊ตฌํ˜„ ๊ฐ€์ด๋“œ์ด๋‹ค. ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๋ฒ•์น™์„ ๋งŒ๋“ค์–ด์„œ ๊ณตํ‘œํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋น„๊ณต์‹์ ์œผ๋กœ ์˜๊ฒฌ์„ ์ œ์‹œํ•œ ๊ฒƒ๋“ค์˜ ๋ชจ์Œ์œผ๋กœ, ์ฆ‰ ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ์ƒ๊ฐํ•˜๋Š” RESTful์˜ ๋‚ด์šฉ์ด ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.

REST API๊ฐ€ ๊ทœ์ •(๊ถŒ๊ณ )ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ

1) HTTP ํ†ต์‹ ์„ ํ•  ๋•Œ ๋ฆฌ์†Œ์Šค๋Š” URI๋ฅผ ํ†ตํ•ด์„œ ์‹๋ณ„,
2) ํ–‰์œ„๋Š” HTTP method(POST,GET,DELETE, PUT, Patch)๋ฅผ ํ†ตํ•ด์„œ,
3) ๊ฒฐ๊ณผ๋Š” ์‘๋‹ต ์ฝ”๋“œ(201, 403 ~~)๋กœ ์•Œ๋ ค์ค€๋‹ค.

  • ๋ฆฌ์†Œ์Šค : resource๋Š” URI๋ฅผ ํ†ตํ•ด์„œ ํ‘œํ˜„๋œ๋‹ค.
    ex) http://example.com/topics
    URI๋Š” ํ•ด๋‹น ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ด๋ฆ„์ผ ๋ฟ, ์ด ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ method๋กœ ํ•œ๋‹ค.
  • method : GET, POST, DELETE, PUT(์ „๋ถ€ ์ˆ˜์ •), Patch(์ผ๋ถ€ ์ˆ˜์ •)

๐Ÿ“Œ CRUD

GET

POST

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("/");
      }
    });
  };

PUT

 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);
      }
    });
  };

Patch

DELETE

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๋ฅผ ํฌํ•จํ•œ๋‹ค

์ด์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•œ๋‹ค.


๐Ÿ“Œ ์ƒํƒœ์ฝ”๋“œ status codes

  • 100 : informational

: 100 : continue : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์š”์ฒญํ–ˆ์„ ๋•Œ

: 102 : processing : ์š”์ฒญ ์ฒ˜๋ฆฌ ์ค‘

  • 200 : successful

: 200 : ok : ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ์„ฑ๊ณต ์ˆ˜ํ–‰

: 201 : created : ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ

: 204 : no content : ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ์ˆ˜ํ–‰ but ๋‚ด์šฉ์€ ์—†์Œ

  • 300 : redirection

: 301 : ์š”์ฒญ๋œ ๊ฒƒ์ด ๋‹ค๋ฅธ url๋กœ ์˜ฎ๊ฒจ์ง

: 302 : ์š”์ฒญ๋œ ๊ฒƒ์ด ์ž„์‹œ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์˜ฎ๊ฒจ์ง

: 303 : get ์š”์ฒญ์—์„œ๋งŒ ์‚ฌ์šฉ, 302์™€ ์œ ์‚ฌ

: 307 : post ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋งŒ, ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ž„์‹œ์ ์œผ๋กœ ์˜ฎ๊ฒจ์ง

: 308 : ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์˜๊ตฌ์ ์œผ๋กœ ์˜ฎ๊ฒจ์ง

  • 400 : client error

: 400 : ์ž˜๋ชป๋œ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ

: 401 : ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ๋žŒ์ด ์š”์ฒญ(๋กœ๊ทธ์ธ์ด ์•ˆ๋œ ๊ฒฝ์šฐ)

: 403 : ํŠน์ •ํ•œ ์ผ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์—†์„ ๋•Œ(๋กœ๊ทธ์ธ์ด ๋˜์—ˆ์ง€๋งŒ ์ผ๋ถ€ ์ œํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ)

: 404 : ํ•ด๋‹น url์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ

: 405 : ํ•ด๋‹น url๋ฅผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ

: 409 : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ถฉ๋Œํ•  ๋•Œ

  • 500 : server error

: 500 : ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ๋ฌธ์ œ ๋ฐœ์ƒ

: 502 : ์ค‘๊ฐ„ ์„œ๋ฒ„์˜ ์‘๋‹ต ๋ฌธ์ œ

: 503 : ์„œ๋ฒ„๊ฐ€ ํŠน์ • url์„ ์ฒ˜๋ฆฌํ•  ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์„ ๋•Œ

profile
start coding

0๊ฐœ์˜ ๋Œ“๊ธ€