2012-02-23 2 views
0

POST 요청뿐만 아니라 GET 요청에도 내 웹 사이트에 사용자 작업을 기록하고 싶습니다. 예를 들어, 사용자는 다음과 같은 GET 요청과 함께 도시를 검색하려고한다고 가정?GET 호출시 서버에 물건을 쓸 때 RESTful을 위반합니까?

/search_city 이름 = 그린빌

이 요청이 이름이 "그린빌"로 도시의 목록을 반환합니다. 또한이 키워드를 사용자의 "검색 내역"으로 서버에 저장하고 싶습니다. GET 호출을 처리하는 동안이 정보를 저장하려고합니다.

RESTful 원칙에 위배됩니까? 그렇다면 올바른 방법으로 어떻게해야합니까?

답변

3

이러한 유형의 감사 로깅은 눈에 보이지 않는 부작용으로 간주됩니다. 다음 사람이

/search_city?name=greenville 

를 호출 할 경우 여전히 은 GET가 유효 다음 같은 대답을 가져옵니다. 비슷한 경우는 일종의 캐시 구축이 될 것이고, GET의 호출자는 당신이 약간의 추가 작업을하고 있다는 것을 알 필요가 없다.

정식 API에 중점을 둡니다.이 요청을 보내면이 응답을받습니다.

+0

즉, ** NO **,이 작업을 수행하는 것은 REST를 위반하지 않습니다. –

1

사용자 검색 기록을 사용할 수있는 API에서 사용할 수있는 리소스가있는 경우 GET 요청에 부작용이 있기 때문에이를 수행하는 것이 좋지 않습니다. 예를 들어, 응답을 캐싱하는 클라이언트는 GET 요청을 다른 사람에게했기 때문에 리소스가 변경되었음을 알 필요가 없습니다. 이 작업을 수행하고 규격을 준수하는 유일한 방법은 부작용이있는 리소스를 캐시 할 수없는 것으로 명시 적으로 표시하는 것입니다.

특히 GET 및 HEAD 메서드는 검색 이외의 다른 작업을 취하는 것이 중요하다는 규칙이 설정되었습니다. 이러한 방법은 "안전"하다고 간주되어야합니다. 이것은 사용 도구가 특별한 방법으로 POST, PUT, DELETE와 같은 다른 메소드를 나타낼 수있게하여 안전하지 않은 작업이 요청되었다는 사실을 사용자가 알게합니다.

당연히 GET 요청을 수행 한 결과로 서버가 부작용을 일으키지 않도록 보장 할 수 없습니다. 사실, 일부 동적 리소스는 기능을 고려합니다. 여기서 중요한 차이점은 사용자가 부작용을 요청하지 않았으므로 책임을지지 않을 수 있다는 것입니다.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

이이 내부 사용에 대해서만 유지 있다면

, 나는 그것을 그런 식으로 할 좋은 것 같아요,하지만, 난 여전히 반대하는 것이 좋습니다.

관련 문제