2012-03-07 2 views
14

시나리오 :POST 요청이 외부 데이터 소스에서 데이터 검색을 초래할 수있는 주문을 처리하기 위해 전송HTTP 상태 코드

.

  1. 데이터 소스는
  2. 데이터 없음 (이것은 오류로 볼)
  3. 하는 데이터 소스가 될 수없는 요청에 대해 사용할 수 없었다 요청에 대한 데이터를 반환

    는 세 가지 결과가 있습니다 액세스가

1 대한 명백한 응답 200: OK 또는,418이다 (유지 보수를위한 것일 수있다)(이 요청으로 엔티티가 생성됨)

에 적합한 상태 코드는 무엇입니까?과 에 적합할까요?

상태 코드는 나는 생각했다 : 데이터 소스가 다운

  • 502: Bad Gateway 때 데이터 소스는 아래
  • 500: Internal Server Error
    • 503: Service Unavailable입니다

      때 때 "자료 없음"
    • 404: Not Found 때 "자료 없음"
    • 403: Forbidden "데이터 없음"
    • 412: Precondition Failed에 따라 볼 수 있습니다 때 다시 찾고
  • +0

    POST 요청을 사용하여 데이터를 쿼리하려고합니까? GET 메서드를 사용해서는 안됩니까? –

    +2

    'GET '은 이러한 데이터 질의가 안전하지 않고 멱등하지 않기 때문에 (다른 것들과 돈을 교환 할 수 있기 때문에) 적절하지 않습니다. –

    답변

    8

    2), 나는 그것이 아마 중 어떤 내용 또는 어쩌면 더 기록이나 자원을 나타내는없는 시체와 함께 200 204 없어야 동의 "자료 없음" 구조가 반환되었습니다. 리소스 URI가 없거나 편안한 서비스의 경우 URI의 리소스를 찾을 수없는 경우 404가 일반적으로 사용됩니다.

    3) 503 서비스를 사용할 수 없음

    서버 인해 서버의 임시 과부하 또는 유지 보수로 인해 현재 요청을 처리 할 수 ​​없습니다. 이것은 약간의 지연 후에 완화 될 임시 조건이라는 것을 의미합니다. 알고있는 경우 지연의 길이는 Retry-After 헤더에 표시 될 수있다. Retry-After가 주어지지 않으면, 클라이언트는 500 응답에 대한 응답을 처리해야한다 (SHOULD).

    Note: The existence of the 503 status code does not imply that a 
        server must use it when becoming overloaded. Some servers may wish 
        to simply refuse the connection. 
    
    +1

    요청이이 리소스의 서버에서 수락되었지만 반환 할 수있는 데이터가없는 경우 404는 거의 의미가 없습니다. 불행히도 여기서 명확한 상태 코드가 있다고는 생각하지 않지만 204 (또는 잠재적으로 "데이터를 사용할 수 없음"을 나타내는 본문이있는 200 개의 경우에도)의 대답으로 기울이는 경향이 있습니다. http 요청이 실패로 간주되면 – MandM

    +0

    204가 잘못되었습니다. – Evert

    +0

    '실패로 간주되는'것에 따라 무언가를 검색하고 결과가 반환되지 않는다면 204가 허용 될 수 있습니다. OP는 결정적인 대답을위한 충분한 세부 사항을 제공하지 못했습니다. 우리가 정말로해야 할 일은 '요청에 사용할 수있는 데이터가 없습니다'라는 것입니다. 데이터 소스에 접속하는 문제가 별도로 처리되므로 실제 남은 모든 것은 누군가가 존재하지 않는 데이터를 요청한다는 것입니다. 정말 오류 조건처럼 보이지 않으므로 2xx 범위가 적당 해 보입니다. – Dan675

    22

    3) 나는이

    2 (503)에 동의는) 솔직히 나는 좋은 인수가 '잘못되었는지 구체적으로 무엇을 나타 내기 위해 헤더에 메타 정보의 경우 2 년 (204)를 사용하여 당신은 포함 할 수 있습니다 위해 할 수 있다고 생각 '. 이 사례가 API 수준에서 '오류'라고 생각하는 정도에 따라 달라집니다.

    API 자체가 의도 한대로 작동하고 요청이 인증되고 권한이 부여 된 사용자에 의해 유효한 엔드 포인트에 있었고 서버가 오작동하지 않은 경우 실제로 400 또는 500 시리즈 오류 중 매우 적은 것으로 보입니다 적용한다. 그 다음이 코드는 적어도 서버가 요청을 충족하지만,하지 않는 한 이럴

    **10.2.5 204 No Content** 
    

    오해의 소지가있다하여, 존재하는 경우

    예를 들어

    는 (404)는 일반적으로 존재하지 않는라는 URI를 의미 entity-body를 반환해야하며 업데이트 된 메타 정보를 반환 할 수 있습니다. 응답에는 엔터티 헤더 형식의 새로운 메타 정보 또는 업데이트 된 메타 정보가 포함될 수 있습니다 (존재하는 경우 요청 된 변형과 관련이 있어야 함).

    클라이언트가 사용자 에이전트 인 경우, 문서보기 을 요청 전송을 야기한 것으로 변경하면 안됩니다 (SHOULD NOT). 이 응답은 이 현재 사용자 에이전트의 활성보기에있는 문서에 적용되어야 함에도 불구하고 이 사용자 에이전트의 활성 문서보기를 변경하지 않고 작업 수행을위한 입력을 허용하기 위해 의도 된 것입니다 ( ).

    204 응답은 메시지 본문을 포함해서는 안되므로 항상 헤더 필드 뒤에 첫 번째 빈 줄로 으로 끝납니다.

    +4

    또 다른 "보편적 인"방법으로 처리되는 것 같습니다. 오류 메시지 또는 200 HTTP 상태 코드와 함께 빈 응답을 반환하는 것입니다. 이것 역시 http://stackoverflow.com/questions/11402156/rest-status-code-204-on-paginated-result에서 다루었습니다. – Werner