본문 바로가기
React/1

REST, JSON

by lacuca9 2024. 11. 2.

REST API 란?

REpresentional State Transfer의 약자로서, 어떤 자원에 대해 CRUD를 진행할 수 있게

HTTP Method(GET, POST, PUT, DELETE)를 사용하여 요청을 보내는 것.

이 때, 요청을 위한 자원은 특정한 형태로 표현된다.

# CRUD - Create, Read, Update, Delete 를 처리하는 동작

 

간단하게 : "URI를 통해 정보의 자원을(only 자원만을) 표현하고, 자원의 행위HTTP Method로 명시한다.

 

# 규칙

http://example.com/posts     (O)
http://example.com/posts/    (X)
http://example.com/post      (X)
http://example.com/get-posts (X)
--> URI는 명사를 사용하고 소문자로 작성되어야 한다.
--> 명사는 복수형을 사용한다.
--> URI의 마지막에는 /를 포함하지 않는다.

http://example.com/post-list  (O)
http://example.com/post_list  (X)
--> URI에는 언더바가 아닌 하이픈을 사용한다.

http://example.com/post/assets/example  (O)
http://example.com/post/assets/example.png  (X)
--> URI에는 파일의 확장자를 표시하지 않는다.

RestFul 하다 - 누가봐도 이해하기 쉽고, 위 조건을 만족 시킨 상태

 

Path Variable vs Query Parameter

  • Path Variable 
    /users/10
    - 유츄 가능. 전체 데이터 or 특정 데이터를 다룰 때 처럼, 리소스를 식별하기 위해 씀
  • Query Parameter
    /users?user_id=10
    - 데이터를 정렬하거나 필터링 하는 경우 더 적합

JSON ( JavaScript Object Notation )

자바스크립트 객체 문법에 토대를 둔, 문자 기반의 데이터 교환 형식

 

구조 :

일반적인 JSON 구조는 JS 객체 리터럴 작성법을 따름.
JS의 원시 자료형인 문자열, 숫자, 불리언을 가질 수 있고 중첩된 계층 구조 또한 가질 수 있다.

메서드 : 

JSON -> 문자열 형태 -> 서버 - 클라이언트 간 데이터 전송 시 사용

but, 다음 두 경우를 위해 파싱(parsing)과정이 필요.

  1. JS 객체를 JSON 형태로 전송

  2. JSON 형태를 JS 객체 형태로 사용


# stringify()
: JS 객체 -> JSON 문자열 변환.
네트워크를 통해 JSON 문자열로 변환할 때 주로 사용

console.log(JSON.stringify({ x: 5, y: 6 }));
// Expected output: "{"x":5,"y":6}"

console.log(JSON.stringify([new Number(3), new String('false'), new Boolean(false)]));
// Expected output: "[3,"false",false]"

console.log(JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] }));
// Expected output: "{"x":[10,null,null,null]}"

console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)));
// Expected output: ""2006-01-02T15:04:05.000Z""

 

# parse()

: JSON 문자열 -> JS 객체 변환. 네트워크 통신의 결과를 통해 받아온 JSON 문자열을

프로그램 내부에서 사용하기 위해 JS 객체로 변환할 때 사용

const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);

console.log(obj.count);
// Expected output: 42

console.log(obj.result);
// Expected output: true

 

# JSONPlaceholder
: 가짜 서버(= fake server, mock API server)

 

애래 API를 통해 JSON 기반 DB 통신을 일으켜보기

fetch('https://jsonplaceholder.typicode.com/posts')
  .then((response) => response.json())
  .then((json) => console.log(json));

 

App.jsx

import "./App.css";
import { useEffect, useState } from "react";

function App() {
  const [data, setData] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/posts")
      .then((response) => {
        console.log();
        console.log("response.json()", response);
        return response.json();
      })
      .then((json) => {
        console.log("json", json);
        setData([...json]);
      });
  }, []);

  return (
    <div>
      {data.map((item) => {
        return (
          <div
            style={{
              border: "1px solid black",
              margin: "3px",
            }}
            key={item.id}
          >
            <ul>
              <li>userId : {item.userId}</li>
              <li>id : {item.id}</li>
              <li>title : {item.title}</li>
              <li>body : {item.body}</li>
            </ul>
          </div>
        );
      })}
    </div>
  );
}

export default App;

 

결과

'React > 1' 카테고리의 다른 글

나만의 React App 만들기  (1) 2024.11.02
비동기 프로그래밍  (0) 2024.11.02
react-router-dom  (2) 2024.11.02
why React  (0) 2024.11.02
Redux  (0) 2024.11.01