RESTFUL, Optional

0

개념정리

목록 보기
28/33

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의 메서드를 불러와서 알아서 값을 넣어줌!
  • 첨부파일이 있는경우에는 FormData 객체를 사용해야하는데 이는 json객체가 없기때문에 첨부될 파일 제외하고 다른 데이터들은 요청전달데이터로 전달돼야함
    -> 복잡함
profile
백엔드를 공부하고 있습니다.

0개의 댓글