Programming

http DELETE를 사용하여 리소스 삭제

procodes 2020. 8. 13. 21:21
반응형

http DELETE를 사용하여 리소스 삭제


그래서, Http의 DELETE 동사가 멱 등성이라는 점을 감안할 때, 다음 요청을 발행 할 때 두 번째 (또는 세 번째, 네 번째 등)는 어떻게됩니까?

DELETE /person/123

처음에는 리소스가 삭제되고 204 (성공, 콘텐츠 없음)가 반환됩니다. 후속 호출에서 204를 반환해야합니까, 아니면 404 (찾을 수 없음)를 반환해야합니까?


상태 비 저장 시스템의 HTTP 요청은 독립적이어야하므로 한 요청의 결과가 이전 요청에 종속되어서는 안됩니다. 두 명의 사용자가 동일한 리소스에서 동시에 삭제를 수행 한 경우 어떻게되는지 고려하십시오. 두 번째 요청이 404를 얻는 것이 합리적입니다. 한 사용자가 두 번 요청하는 경우에도 마찬가지입니다.

나는 DELETE가 두 가지 다른 응답을 반환하는 것이 멱등하다고 느끼지 않는다고 생각합니다. 멱 등성 요청을 시스템을 동일한 상태로 남겨 두는 것으로 생각하는 것이 유용하며 반드시 동일한 응답을 가질 필요는 없습니다. 따라서 기존 자원을 삭제하든 존재하지 않는 자원을 삭제하려고하든 관계없이 서버 자원 상태는 동일합니다.


RESTful 웹 서비스 쿡북은이를위한 훌륭한 리소스입니다. 우연히 Google 미리보기 는 DELETE에 대한 페이지를 표시합니다 (11 페이지).

DELETE 메소드는 멱 등성입니다. 이는 서버가 이전 요청에서 리소스를 삭제 한 경우에도 서버가 응답 코드 200 (OK)을 반환해야 함을 의미합니다. 그러나 실제로 DELETE를 멱등 작업으로 구현하려면 서버가 삭제 된 모든 리소스를 추적해야합니다. 그렇지 않으면 404 (찾을 수 없음)를 반환 할 수 있습니다.


첫 번째 삭제 : 200 또는 204.

후속 DELETE : 200 또는 204.

근거 : DELETE는 멱등 적이어야합니다. 두 번째 DELETE에서 404를 반환하면 응답이 성공 코드 에서 오류 코드로 변경 됩니다. 클라이언트 프로그램은 DELETE가 실패했다고 가정하여 잘못된 작업을 수행 할 수 있습니다.

:

  • DELETE 작업이 클라이언트 프로그램에 의해 실행되는 다단계 작업 (또는 "saga")의 일부라고 가정합니다.
  • 클라이언트 프로그램은 예를 들어 은행 거래를 수행하는 모바일 앱일 수있다.
  • 클라이언트 프로그램이 DELETE 작업에 대한 자동 재 시도를한다고 가정 해 봅시다 (DELETE가 멱 등성을 가져야하기 때문에 의미가 있습니다).
  • 첫 번째 DELETE가 성공적으로 실행되었지만 200 응답이 클라이언트 프로그램으로가는 도중에 손실되었다고 가정 해 보겠습니다.
  • 클라이언트 프로그램은 DELETE를 재 시도합니다.
  • 두 번째 시도에서 404가 반환되면 클라이언트 프로그램이이 오류 코드로 인해 전체 작업을 취소 할 수 있습니다.
  • 그러나 첫 번째 DELETE가 서버에서 성공적으로 실행 되었기 때문에 시스템이 일관되지 않은 상태로 남아있을 수 있습니다 .
  • 두 번째 시도가 200 또는 204를 반환하면 클라이언트 프로그램이 예상대로 진행됩니다.

참고 URL : https://stackoverflow.com/questions/6439416/deleting-a-resource-using-http-delete

반응형