2012-11-06 3 views
3

웹 응용 프로그램을 만들기 위해 REST API를 시작합니다.REST API 동시성 검사?

대부분의 웹 사이트에서는 DELETE HTTP 요청을 /{resource}/{resource-id}과 같은 URI로 삭제하는 방법을 알려줍니다. 나는 그것을 검색 한 이후로 업데이트되었을 수있는 리소스를 삭제하거나 두 번째 리소스를 삭제하는 것을 두려워합니다.

요청과 함께 리소스의 타임 스탬프를 보내도록 할 수 있습니까? 나는 그것을 어디에서나 보지 못했지만 실제로 유용 할 수 있다고 생각합니다. 동시성을 검사하고 이전에 검색하지 않고 임의의 리소스를 삭제하지 못하도록합니다.

답변

6

귀하의 DELETE 요청에 ETagIf-Match의 HTTP 헤더를 사용하십시오.

클라이언트GET의 자원 :

GET /things/42 

서버 응답 :

클라이언트 자원 DELETE 싶어
200 OK 
ETag: "foo-bar-baz" 

:

DELETE /things/42 
If-Match: "foo-bar-baz" 

사례 1 : 건 42는 변경되지 않았으므로 삭제 될 수 있습니다. 서버 응답 :

410 Gone 

사례 2 : 일 (42)이 변경되었습니다하고 ETag: "foo-bar-baz" 일치하지 않습니다. 그것은 하지 삭제서버 reponds입니다 :

409 Conflict 

변형 :

또한 헤더 Last-ModifiedIf-Unmodified-Since 대신 또는 ETagIf-Match에 추가하여 사용할 수 있습니다.

Hypertext Transfer Protocol (HTTP) Status Code Registry을 참조하십시오.

+0

고마워요 @Tichodroma, 당신은 정말로 올바른 방향으로 나를 지적했습니다! Wikipedia는 전체 응답을 작성하는 동안도 도움이되었습니다. [HTTP_ETag] (http://en.wikipedia.org/wiki/HTTP_ETag#Typical_usage). –

+0

@ tinchou 그런 다음 가서, 호랑이 :) –