2017-04-25 3 views
1

우리는 많은 타사 개발자가 공개적으로 사용할 수있는 REST API를 작성하고 있습니다. 나는 특히 오류 상황에서 http 상태 코드에 대한 모범 사례를 찾고 있습니다.REST API HTTP 상태 코드 모범 사례

Google 애플리케이션에는 API가 내부적으로 많은 구성 요소가 있습니다. 내부 구성 요소에 오류가있는 경우 적절한 오류 메시지와 함께 500을 반환해야합니까?

SO를 통해 갈 때, 나는 다른 방법을 제안했지만 그들 중 누구도 구체적인 대답을 갖고 있지 않은 블로그/SO 스레드를 발견했습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

답변

3

이것은 매우 주관적입니다. 몇 가지 중간 정도 복잡한 API를 작성한 제 의견입니다.

HTTP 상태 코드가 내부 구성 요소가 반환하는 오류 종류에 깔끔하게 매핑되지 않는다는 것을 알 수 있습니다. 그들은 설계되지 않았습니다.

따라야 할 기본 규칙은 200입니다. 다른 것은 오류입니다.

400 = 잘못된 요청 :

나는 기본적으로 전용이 4 개의 비 OK 상태 코드를 사용합니다. 발신자가 잘못된 요청 매개 변수를 보냈습니다. 401 = 권한이 없습니다. 호출자는 요청을 할 수있는 권한이 없습니다. 404 = 찾을 수 없습니다. 발신자가 찾을 수 없거나 존재하지 않는 리소스를 요청했습니다. 500 = 내부 서버 오류. 그 밖의 모든 것. 뭔가 나쁜 일이 있었고 발신자는 아마도 그것에 대해 아무 것도 할 수 없습니다.

HTTP 상태 코드의 경우에 해당됩니다.

그러나 나는 거기서 멈추지 않습니다. 항상 자체 오류 코드, 메시지 및 테스트 환경에서 스택 추적을 포함하는 JSON 응답을 반환합니다. 내 오류 코드는 발신자가 필요에 따라 프로그래밍 할 수있는 번호입니다. 그것은 내가 아는 한 실제 오류 코드입니다.

+0

당신의 생각에 감사드립니다. @ 마이크. 우리는 여기서 설명한 것과 비슷한 접근법을 따르고 있습니다. 우리가 올바른 방향으로 가고 있다는 것을 알기 좋습니다. – M22an

1

다음은 최고의 API 실습을위한 코드 목록입니다.

codes = Array(
      100 => 'Continue', 
      101 => 'Switching Protocols', 
      200 => 'OK', 
      201 => 'Created', 
      202 => 'Accepted', 
      203 => 'Non-Authoritative Information', 
      204 => 'No Content', 
      205 => 'Reset Content', 
      206 => 'Partial Content', 
      300 => 'Multiple Choices', 
      301 => 'Moved Permanently', 
      302 => 'Found', 
      303 => 'See Other', 
      304 => 'Not Modified', 
      305 => 'Use Proxy', 
      306 => '(Unused)', 
      307 => 'Temporary Redirect', 
      400 => 'Bad Request', 
      401 => 'Unauthorized', 
      402 => 'Payment Required', 
      403 => 'Forbidden', 
      404 => 'Not Found', 
      405 => 'Method Not Allowed', 
      406 => 'Not Acceptable', 
      407 => 'Proxy Authentication Required', 
      408 => 'Request Timeout', 
      409 => 'Conflict', 
      410 => 'Gone', 
      411 => 'Length Required', 
      412 => 'Precondition Failed', 
      413 => 'Request Entity Too Large', 
      414 => 'Request-URI Too Long', 
      415 => 'Unsupported Media Type', 
      416 => 'Requested Range Not Satisfiable', 
      417 => 'Expectation Failed', 
      500 => 'Internal Server Error', 
      501 => 'Not Implemented', 
      502 => 'Bad Gateway', 
      503 => 'Service Unavailable', 
      504 => 'Gateway Timeout', 
      505 => 'HTTP Version Not Supported' 
     ); 
+0

완전한 상태 코드 참조 주셔서 감사합니다. – M22an

0

대부분의 도움 요청 상태 코드 :

  • 코드 100 : 정보
  • 코드 200 : 성공
  • 코드 300 : 재
  • 코드 400 : 클라이언트 오류
  • 코드 500 : 서버 오류
관련 문제