2008-11-12 4 views
11

우리는 클라이언트가 정기적으로 POST 및 PUT 데이터를 보내는 REST API를 가지고 있습니다. 이 작업을 수행 할 때 가끔 POST 데이터로 인해 시스템에서 변경되지 않습니다. POST와 PUT은 올바른 형식이지만 보내고있는 데이터는 우리 데이터베이스의 데이터와 동일합니다. 이런 일이 생기면 방금 400 개의 HTTP 상태를 반환한다는 것을 알았습니다. 불행히도 이것은 "잘못된 구문으로 인해 서버가 요청을 이해할 수 없습니다"와 같은 "잘못된 요청"을 의미합니다.REST : 무시되는 POST의 올바른 HTTP 응답 코드

분명히이 경우는 아니지만 적절한 상태 코드가 없으므로이 코드를 사용하겠다고 들었습니다. 고려한 선택 사항 :

  • 304 수정되지 않음. 이것은 유감스럽게도 GET 요청에만 해당됩니다.
  • 204 콘텐츠 없음. 가까이 있지만 엔터티 본문을 금지합니다.

다른 선택도 똑같이 나빠 보인다. 우리는 200 OK으로 가서 우리가 반환하는 XML 문서에 관련 정보를 가지고있을 수 있습니다. 그러나 이것은 매우 "RESTish"하지 않습니다. REST 세계는 일반적으로 어떻게 이것을 처리합니까? 요청 내용은 오른쪽

(수정되지 수정했습니다 응답 코드. 감사합니다 Mkoeller) 클라이언트에서

+0

HTTP 상태 302의 이름은 "Found"입니다. – mkoeller

답변

17

이 경우 200 OK를 반환해도 문제가 없으며 데이터가 올바르게 처리되었으며 서버가 수행 한 작업을 수행 한 것으로 보입니다. 서버가 데이터를 올바르게 처리했기 때문에 OK 상태 코드를 반환해야합니다. 내부적으로 무시한다는 사실은 부적절하거나 또는 부적절해야합니다.

서버가 데이터에 대해 수행 한 작업은 클라이언트에게 전달되어서는 안되며 요청에 어떤 일이 발생했는지 (ok 처리, 오류 발생 등) 알려야합니다.

그리고 이상한 이유로 (나는 유효한 것, btw라고 생각할 수 없다.) 클라이언트에게 관심이 있다면 그렇게 말할 응답이있다.

1

서버의 상태를 볼 수는 동일 서버에서 동일이었다 아닌지? 이후에 서버가 전송 된 내용을 제대로 보관하고 있기 때문에 서버가 어떤 종류의 오류 상태로 응답해야합니까? 반면에 요청 내용이 서버에 이미 알려진 내용과 같으면 클라이언트가 왜 귀찮게해야합니까? 그것은 서버로 성공적으로 이전되었으므로 대부분의 작업이 완료되었습니다. 이 상황에 대해 다른 응답 코드가있는 경우 클라이언트는 어떻게 대응할 것으로 예상됩니까?

결론 : 기존 콘텐츠와 동일한 요청 콘텐츠의 상황은 특별한 경우가 아닙니다. 동일한 응답 상태 코드로 응답해야합니다. 200, 302 또는 303 일 수 있습니다.

2

클라이언트가 PUT 전에 서버의 콘텐츠에 대한 엔터티 태그를 알 수있는 경우 If-Match 헤더와 412 Precondition Failed 응답을 사용하여 설명하는 상황을 정확하게 파악할 수 있습니다.

+0

당신은'If-None-Match'를 의미합니다. –