2014-01-22 2 views
0

저는 REST API를 디자인하고 있습니다. 집에 방을 만들 수있는 POST 요청 중 하나는 같은 집과 방 이름의 ID의 입력합니다 : 여기 그래서반환 할 정확한 HTTP 오류 코드는 무엇입니까? 404와 412는 맞습니까?

POST /webCall/development/construction 
<?xml version="1.0"?><room><home id='110001'/><name>large bedroom</name></room> 

내 질문에, 가정 홈 ID = 110001, 존재하지 않는 시스템, 그 경우에는 404 (자원을 찾을 수 없음)가 응답 코드이거나 412 (사전 조건 실패)가 응답 코드 여야합니다.

가능한 인수.

Why 404 : The resource home with ID : 110001 is not found. 
Why 412 : The precondition to create a room is that a home should exist,which fails here. 

올바른 결정을 내리는 데 도움이되는 추론을 제안하십시오.

답변

1

412 Sotirios가 제공 한 이유로 올바르지 않습니다.

404 문제는 페이로드가 아니라 주소 지정된 리소스 (URI)이므로 올바르지 않습니다.

400 (일반), 409 또는 422를 사용할 수 있습니다.

+0

400이 발생해야합니다. HTTP 스펙대로, 영구적으로 제거 된 리소스에 대한 409 회담과 같이 사용하는 것은 잘못된 것입니다. 여기에 설득력있는 것으로 보이지 않습니다 ... –

+0

Vineet : http://greenbytes.de/tech/webdav/draft- ietf-httpbis-p2-semantics-25.html # status.400 및 http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-25.html#status.409 –

+0

답변 주셔서 감사합니다 줄리안 –

1

HTTP spec는 412 상태 코드

이 서버에서 테스트했을 때 하나 또는 false로 평가 요청 헤더 필드 개에 주어진 전제 조건에 대해 다음과 말한다.이 응답 코드 코드를 사용하면 클라이언트가 현재 리소스 메타 정보 (헤더 필드 데이터)에 전제 조건을 배치 할 수 있으므로 요청한 메서드가 의도 한 리소스 이외의 리소스에 적용되는 것을 방지 할 수 있습니다. 당신은 당신이에 추가하려는 자원의 entity tag와 함께 If-Match 헤더를 전송 한 경우

그래서이 상태 코드는 의미가있다.

자원 /homes/some-identifier/rooms이 존재하지 않기 때문에 당신이

/homes/some-identifier/rooms 

아래에 당신은 아마 404를 반환해야처럼 뭔가에 게시하는 가정.

실제로

POST /webCall/development/construction 
<?xml version="1.0"?><room><home id='110001'/><name>large bedroom</name></room> 

을 수행하는 경우는 409 아마도 가장 적절할 것이다. 그러나 API를 POST로 변경하여 실제 home 리소스로 변경하는 것이 좋습니다.

+0

감사합니다. 따라서 404에 대해 하나의 표를 얻었습니다. –

+0

URI가 위의 경우 404가 올바른 것입니다. 그러나이 예에서 URI는 일반 처리기를 식별하고 회의실 식별자는 페이로드에 있습니다. 이 경우 요청 URI로 식별되는 리소스가 실제로 존재하기 때문에 404가 잘못 될 수 있습니다. –

+0

@JulianReschke 제 가정을보다 명확하게하기 위해 업데이트되었습니다. 감사. 조작 된 요청으로 인해 –

관련 문제