티스토리 뷰
REST 또는 RESTFul 하다 라는 말을 개발하면서 여기저기에서 들어봤지만, 정확하게 REST가 어떤 개념인지 RESTFul하다는게 어떤 것인지 확실히 알 수 없어서
여러 블로그를 읽고 구글링해봤습니다.
며칠간 공부하며 익혀온 것들을 잊지않고 기억하기위해 제가 이해한대로 포스팅을 해보겠습니다. 잘못된 정보가 있으면 댓글로 알려주세요~
REST / RESTFul
REST에 대해 위키백과 및 여러 블로그에 정의가 내려져 있지만 이해하기 쉽지않았습니다. 많은 블로그를 읽어본 결과 한문장으로 정리하자면 "자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반" 이라고 설명할 수 있습니다.
또한 REST의 기본원칙을 지킨 서비스 디자인은 "RESTFul하다" 라고 얘기합니다.
중심규칙
크게 2가지 규칙이 있습니다.
1. URI는 정보의 자원을 표현해야 한다.
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
이 2가지 규칙을 지키기 위해 주의해야 할 점에 대해 알아보겠습니다.
URI 설계하기
- 리소스명은 동사보다는 명사를 사용
URI는 자원을 표현하는데 중점을 두고, delete나 insert와 같은 CRUD 행위에 대한 표현이 들어가면 안됩니다.
GET /members/delete/1 (X)
GET /members/1 (O)
- 소문자를 사용
대소문자에 따라 다른 리소스로 인식하게 됩니다.
- URI의 마지막 문자로 슬래시(/)를 포함하지 않는다.
이것또한 대소문자와 마찬가지로 슬래시 여부에 따라 다른 리소스로 인식하게 되어 통신에 혼동을 줄 수 있습니다.
- 밑줄(_)을 사용하지 않는다. 필요한 경우 하이픈(-)을 사용한다.
밑줄은 글꼴에 따라 가려지거나 잘 보이지 않는 경우가 있습니다. 가독성을 높이기 위해서는 밑줄 대신 하이픈을 사용해야합니다.
- 파일 확장자를 URI에 포함하지 않는다.
확장자를 포함하지 않으면 리소스가 유연해집니다. 확장자는 Accept header를 사용해야 합니다.
HTTP Method
Method |
Action |
GET |
Read |
POST |
Create |
PUT |
Update |
DELETE |
Delete |
기본적으로 이 4가지 메서드를 이용해 CRUD를 합니다.
아래쪽에 내가 만들었던 코드 일부를 보여드리겠습니다.
컨트롤러의 일부입니다.
RequestMapping 어노테이션에서 메서드를 지정해주면 됩니다.
요청하는 쪽에서도 마찬가지로 method만 지정해주면 됩니다.
@RequestMapping(value = "/{id}", method = RequestMethod.GET) public User get(@PathVariable("id") String id) { return userService.get(id); } @RequestMapping(method = RequestMethod.POST) public User create(@RequestBody User user) { return userService.createUser(user); } @RequestMapping(value = "/{id}", method = RequestMethod.PUT) public User update(@PathVariable("id") String id, @RequestBody User user) { return userService.updateUser(id, user); } @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) public void delete(@PathVariable("id") String id) { userService.deleteUser(id); }
이 외에도 응답상태코드, HTTP Header등 에 관한 내용도 있지만, 기본적으로 이 정도의 개념만 이해해도 가장 심플한 RESTFul한 코드를 만드는데 도움이 될 듯합니다. 다른 내용은 공부하면서 차차 포스팅 하겠습니다^^
'Web' 카테고리의 다른 글
JWT Token (0) | 2018.01.22 |
---|---|
OAuth 2.0 (0) | 2018.01.10 |
쿠키(Cookie)와 세션(Session) & 캐시(Cache) (0) | 2018.01.09 |
- Total
- Today
- Yesterday
- KeepAlive
- authentication
- mod_deflate
- 아파치톰캣
- 구글로그인
- IntelliJ Download
- SpringBoot #스프링부트 #STS #이클립스
- IntelliJ
- 인텔리제이 무료설치
- claim토큰
- JWT
- jwt인증
- 티스토리 플러그인
- 인텔리제이
- SpringBoot
- 쿠키와세션
- OAuth
- 스프링부트
- 대용량트래픽
- HTTP method
- 기술면접
- 인텔리제이 학생인증
- max Client
- Apache튜닝
- apache 설정
- sns로그인
- 페이스북로그인
- 티스토리 소스코드
- Authorization
- HTTP프로토콜