당신이 웹 개발자라면, 가장 간단한 방법인 GET 메소드를 사용해서 데이터를 전송하는 방법을 배웠을 것이다.
소셜 서비스를 만든다고 가정해보자. 사용자 목록을 관리해야 하고, 모든 사용자는 사용자 페이지가 있어야 할 것이다.
그리고 각각의 사용자를 위한 페이지를 만들려면 페이지 마다 식별된 파라미터 경로가 필요한데, 다음과 같은 GET 파라미터를 사용할 수 있을 것이다.
/users?**id**=123 # 아이디가 123인 사용자를 가져온다.
그럼 서버로 부터 id 변수를 얻을 수 있다. 이것이 Query String이 동작하는 방식이다. (이 글에서는 서버단에서의 동작까지는 설명하지 않을 것이다.)
하지만 데이터를 넘기는 방법 중의 하나로 Path Variable도 사용할 수 있다.Path Variable은 다음과 같이 사용한다.
/users/123 # 아이디가 123인 사용자를 가져온다.
이 경우에, 123 을 서버단에 전달한다. 경로를 변수로서 사용하는 것이다.
만약 어떤 resource를 식별하고 싶으면 Path Variable을 사용하고, 정렬이나 필터링을 한다면 Query Parameter를 사용하는 것이 Best Practice이다.
/users # 사용자 목록을 가져온다.
/users?occupation=programer # 프로그래머인 사용자 목록을 가져온다.
/users/123 # 아이디가 123인 사용자를 가져온다.
또한, 기본적인 CRUD 기능을 위해서 또 다른 URL이나 query parameter를 정의할 필요는 없다.대신 원하는 기능에 맞게 HTTP 메소드를 바꾸어야 한다.
/users [GET] # 사용자 목록을 가져온다.
/users [POST] # 새로운 사용자를 생성한다.
/users/123 [PUT] # 사용자를 갱신한다.
/users/123 [DELETE] # 사용자를 삭제한다.
그렇다! 거의 모든 CRUD 프로세스를 추가적인 endpoint(예를 들어 users/create) 또는query parameter(예를 들어 users?action=create) 없이 수행할 수 있다. 게다가 단순하고 예측 가능하다.