REST API

  • REST API의 의미

    • REpresentational State Transfer 

    • Application Programming Interface

    • 특정 시점의 [자원] [상태] [전달]

    • stateless - 어느 시점, 상태더라도 상호 소통이 가능

 

  • REST API의 특징

    • 자원 - URI

      • URI는 자원(명사)을 표현해야한다. 띄어쓰기는 하이픈으로 표현

    • 행위 - Http Method

      • 행위는 Http Method로 표현 (GET, POST, PUT(갈아끼기), PATCH(부분 수정), DELETE)

    • 표현 - JSON

      • 자원의 표현은 주로 JSON(key, value) 형식으로 전달된다.

    • 웹에서는 일련의 문자열(byte)로 직렬화하여 송수신하고, 역직렬화(객체화) 과정을 통해 데이터를 사용한다.

 

  • RestController

    • @RestController = @Controller + @ResponseBody 

    • json 형태로 응답한다.
      - new ResponseEntity(T, HttpStatus) 반환
      - Custom Response 객체 반환

    • @RequestBody로 json 요청 객체를 받는다. 

 

  • Ajax 사용법

    • type에는 GET, POST, PATCH, DELETE 등 HTTP METHOD가 들어간다.

    • url - GET 요청 시에는 파라미터와 쿼리스트링을 문자열에 붙여 전달 가능하다.

    • data는 요청 시 필요한 객체를 전달한다.

      • GET 방식이면 url뒤에 쿼리스트링으로 붙어서 전달된다. 

      • POST 방식이면 JSON.stringify()로 형태 변환이 필요하다.

    • contentType은 요청하는 데이터의 형태이다.  

      • json 형태는 application/json; charset=utf-8

      • form 형태는 applicaiton/x-www-form-urlencoded; charset=utf-8 (기본값)

      • multipart/form-data 형태는 contentType: false, processData: false로 지정한 후
        enctype: "multipart/form-data"로 설정한다.

    • dataType은 응답받는 데이터의 형태이다.

      • 기본값은 text이며, json 형태일 경우 json으로 설정해주면 된다.

 

$.ajax({
    type: "GET",
    url: `/api/board/${id}`,
    dataType: "json",
    success: function(result){
        // 반환된 객체 처리
        // 객체 상태에 따라 성공, 에러 분기 처리
    }
});
$.ajax({
    type: "POST",
    url: "/api/board",
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf8",
    dataType: "json",
    success: function(result){
        location.href=`/board/detail/${result.body}`;
        // result.body == entity의 id
        // 서버에서 return id하고 dataType text로 받으면 result == id
    },
    error: function(error){
        // http status를 200으로 보내지 않으면 해당 분기 타게 됨
        // 반환 객체는 responseText에 text로 담기기 때문에 JSON으로 변환 시켜줌

        let errRes = JSON.parse(error.responseText); 
        alert(errRes.body);
 
    }
});
$.ajax({
    type: "POST",
    url: "/api/board",
    data: new FormData($("form")[0]),
    enctype: "multipart/form-data",
    contentType: false,
    processData: false,
    dataType: "json",
    success: function(result){
    }

});

 

댓글을 작성해보세요.

채널톡 아이콘