REST
: 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다.
- 자원의 식별
- 쿼리스트링을 사용하면 네트워크를 중간에 가로채서 조작될 수 있음
➡︎ REST 구조: path만 가지고 자원을 식별하고, 요청방식으로 기능을 처리(설정)
http://호스트:포트/패스?쿼티스트링
- 요청방식
- GET: 조회 기능
- POST: 데이터를 추가할때 사용
- PUT
- DELETE
- API를 제공하는 쪽(네이버, 카카오 ..)에서 REST형식으로 많이 사용함
- 자원을 식별하는 path 구성을 어떻게 할 것인가 어려움
- ex) 답글에 대한 게시글, 게시글에 대한 답글로 구성할 것인가..
- 기본 JSON으로 요청, 응답하는 것으로 권장한다.
- 네트워크 요금상, 보안상 RESTFUL로 설정하는 것이 좋다.
- 자원이란 URI.
- URI는 자원을 식별해주는 것(naver.com
?mode=LSD&sid1=100
, board/download?boardNum=14&opt=attachment
)- URL은 자원이 있는 곳 (naver.com, http://localhost:8888/myback)
- 오른쪽 쿼리스트링을 이용한 방법은 권장하지 않는다. 같은 URI여도 요청방식으로 구분할 수 있기 때문에 똑같아도됨!
- PUT은 JSON으로 요청, 응답해~
- 기존 queryString을 이용했던 정보들은 모두 json으로 주고받음
Optional
- board/list + json을 이용해서 현재 페이지를 받아올 수 있지만, board/list/{currentPage}로 파라미터로도 받아올 수 있음
"list/{currentPage}"
는 페이지 별로 게시글을 보여주는 것이고,"list"
는 전체 게시글을 다 보여줄 때이다. 한번에 value를 지정해 줄 수 있음.
단, 이때는 currentPage의 값이 전달되지 않으므로 currentPage에 대한 설정을 해줘야한다.@Pathvariable
은 값이 전달되지 않았을 때의 처리를 무조건 해줘야한다.
- @RequestParam은 defaultValue가 있지만
@Pathvariable
는 이 프로퍼티가 없음!- int타입 또는 String을 사용하지 않고 자료형을
Optional
로 설정해줌!!Optional
은 전달되지 않을 경우도 체크해줄 수 있음.- Optional의
isPresent()
메서드를 통해 처리할 수 있음.- isPresent와 다르게
ifPresent()
는 람다식을 요구함.
@PutMapping("{boardNum}")
public ResponseEntity<?> modify(
@PathVariable int boardNum, @RequestBody Board b) throws JsonMappingException, JsonProcessingException {
// ObjectMapper mapper = new ObjectMapper(); // 안해줘도됨. spring mvc 모듈안에 handler adapter가 매핑을 진행시킴
// Board b = mapper.readValue(requestBody, Board.class); // 전달된 문자를 객체로 반환
System.out.println("수정할 글 번호 : " + boardNum);
System.out.println("수정할 글 번호 : " + b.getBoardTitle());
System.out.println("수정할 글 번호 : " + b.getBoardContent());
return new ResponseEntity<>(HttpStatus.OK);
}
@RequestBody String requestBody
를 받아오고, ObjectMapper mapper = new ObjectMapper();
와 Board b = mapper.readValue(requestBody, Board.class);
를 이용해서 객체와 매핑시켜줬다면, spring에서는 mvc 모듈안에 handler adapter가 Controller의 메서드를 불러와서 알아서 값을 넣어줌!