[개발일지] REST API

오늘은 REST API에 대해서 써보려고 합니다. REST API는 요청 방식중에 하나입니다. 예전에는 SOAP방식을 썼지만 지금은 85%가 REST 방식을 사용한다고 합니다.

REST는 URI와 HTTP 메소드를 이용하여 요청을 합니다. 학교에서 웹을 배웠을때 GET방식이라고 http://localhost/deleteMember.php?id=111 이런식으로 보냈던 기억이 있습니다. 하지만 REST방식으로 표현하면 위 요청처럼 파라미터가 아니라 멤버변수를 따라가듯 http://localhost/member/111 이렇게 표현됩니다. 이 URI를 DELETE 메소드로 전송 하면 위 요청과 같은 표현이 됩니다.

REST는 같은 URI지만 메소드를 다르게하면 다른 요청으로 구분되게 할수있습니다.

HTTP 메소드와 그 의미

http://localhost/member POST방식 = member를 생성하여라

http://localhost/member/111 GET방식 = id가 111인 member를 조회하여라

http://localhost/member/111 PUT방식 = id가 111인 member를 업데이트 하여라

http://localhost/member/111 DELETE방식 = id가 111인 member를 삭제 하여라

REST API의 특징으로는

  1. HTTP 표준에만 따른 다면, 어떠한 기술이라던지 사용이 가능한 인터페이스 스타일이다. 예를 들어 HTTP + JSON으로 REST API를 정의했다면, HTTP 와 JSON이 사용가능한 모든 플랫폼에서 사용 가능합니다.
  2. 기존 SOAP방식 보다 요청이 가벼워서 처리 속도가 빠릅니다.
  3. REST는 서버와 접속을 유지하고있지 않고 그때그때 요청을 처리하기 때문에 이전 상태 정보가 필요하지 않습니다.
  4. REST API 자체가 매우 쉬워서 API 메시지 자체만 보고도 API를 이해할 수 있는 구조를 갖습니다.

이정도가 있습니다.

다음으로 저번 포스팅 주제였던 Spring+Mybatis에서 사용했을때 생겼던 이슈를 적어보겠습니다.

컨트롤러 부분
요청을 보내는 jsp부분

REST방식으로 요청을 받기위해 RequestMapping을 요청 값을 /member/{id} (111이 id에 해당), 메소드를 DELETE로 하고 아래 사진처럼 DELETE로 요청을 전송하였는데 요청을 받지 못한다는 에러가 떴습니다. 그래서 찾아보았더니 HTTP에서는 PUT과 DELETE 메소드를 지원하지만, HTML에서는 PUT과 DELETE 메소드를 지원하지 않고 GET방식으로 전송 한다고 합니다.

따라서 Spring에서는 HiddenHttpMethodFilter를 지원 해주는데, HiddenHttpMethodFilter는 HTML이 보내는 요청을 받아 컨트롤러 한테 DELETE로 변환해서 보내줍니다.

그런데 DELETE요청이 같은 코드여도 톰캣7에서는 되고 톰캣8에서는 안됩니다. 이부분에 대해선 다음에 찾아서 올리겠습니다.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.