티스토리 뷰

Web

REST / RestFul

답답코더 2018. 1. 5. 16:16

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
댓글