“이 API 버전이 중단되었습니다”에 대한 올바른 HTTP 상태 코드는 무엇입니까? 코드 사용을

RESTful API가 있습니다. v1, v2 및 v3의 3 가지 버전이 있습니다. v4를 게시하려고하는데 v1을 중단하기로 결정했습니다. 즉, 모든 요청 http://example.com/v1/resource이 실패하지만 호출 http://example.com/v2/resource은 계속 작동합니다.

실패를 나타내는 적절한 방법은 무엇입니까? 410 GONE상태 코드 사용을 고려 했지만 리소스를 더 이상 사용할 수 없음을 나타냅니다. 리소스는 여전히 사용 가능하지만 다른 방식으로 만 요청해야합니다.

또한 일반적인 400상태 코드를 고려 했지만 이상하게 보였습니다. 이에 대한 표준 답변이 있습니까?



답변

표준이없는 것 같습니다.

StackOverflow 답변 은 410 GONE으로 기울어 지지만 301 MOVED PERMANENTLY가 더 적합하다고 생각합니다.

올바른 선택을하려면 특정 사례를 살펴 봐야합니다. 추가 조치를 취하지 않고 API v1에 대한 모든 호출이 실패하도록하는 것이 목표 인 경우 410 GONE이 작동합니다. 호출이 성공할 수있는 최신 버전의 API로 클라이언트를 리디렉션하는 등의 연속성을 원한다면 3XX가 작동하지만 어느 것을 선택합니까? API v1을 종료하려고하면 301 MOVED PERMANENTLY가 303 SEE OTHER가 302 SEE OTHER보다 낫다는 것을 나타내는 데 도움이된다고 생각합니다. 영구적 인.

각 버전이 이전 버전과 호환되는 방식으로 API를 엔지니어링하여 새 API 버전의 새 엔드 포인트를 추가 할 때마다 301 MOVED PERMANENTLY가 API를 투명하게 유지하고 최신 상태로 유지할 것을 권장합니다. 어쨌든 당신이하려는 일이라고 생각합니다.

HTTP 상태 코드

HTTP 상태 코드 302는 원래 너무 광범위하여 잘못 구현 / 사용되었으므로 303과 307은 302의 이중 사용 사례를 구분하기 위해 만들어졌습니다. 일부 API는 다른 용도로 303을 사용합니다.

301 영구적으로 이동 됨 -301 (영구적으로 이동 됨) 상태 코드는 대상 자원에 새로운 영구 URI가 지정되었으며이 자원에 대한 이후의 참조는 동봉 된 URI 중 하나를 사용해야 함을 나타냅니다.

302 FOUND -302 (발견 된) 상태 코드는 대상 자원이 일시적으로 다른 URI에 있음을 나타냅니다. 경우에 따라 리디렉션이 변경 될 수 있으므로 클라이언트는 향후 요청에 효과적인 요청 URI를 계속 사용해야합니다.

303 SEE OTHER -GET 요청에 대한 303 응답은 오리진 서버에 HTTP를 통해 서버가 전송할 수있는 대상 자원의 표현이 없음을 나타냅니다. 그러나 Location (위치) 필드 값은 대상 리소스를 설명하는 리소스를 나타내므로 해당 다른 리소스에 대한 검색 요청을하면 원래 대상 리소스를 나타내지 않고받는 사람에게 유용한 표현이 될 수 있습니다.

410 GONE -410 (Gone) 상태 코드는 대상 자원에 대한 액세스를 더 이상 원래 서버에서 사용할 수 없으며이 조건이 영구적 일 수 있음을 나타냅니다. 원래 서버가 조건이 영구적인지 여부를 알 수 없거나 결정할 기능이없는 경우 상태 코드 404 (찾을 수 없음)가 대신 사용되어야합니다.

기존 API는이를 어떻게 처리합니까?

어쩌면 Google의 Youtube API 에서 페이지를 가져올 수 있습니다 .

API 요청이 실패하면 YouTube는 일반적으로 실패를 식별하는 HTTP 4xx 또는 5xx 응답 코드와 실패를 일으킨 오류에 대한보다 구체적인 정보를 제공하는 XML 응답을 반환합니다. 각 오류에 대해 XML 응답에는 도메인 요소, 코드 요소 및 가능한 위치 요소가 포함됩니다.

  • BigCommerce API 는 302 FOUND를 사용합니다.
  • Atlassian REST API 가이드 라인 은 301에서 오류를 자세히 설명하는 하위 코드와 함께 영구적으로 이동되었음을 암시합니다. 이것은 Youtube API 접근 방식과 유사합니다.

더 읽을 거리 :


답변

리디렉션은 이동 한 리소스에 적합합니다. 301 영구 리디렉션 (API 변경없이 이름 바꾸기를 나타냄) 대신 303 “기타 참조”리디렉션을 사용합니다.


답변

리디렉션없이 레거시를 계속 지원해야합니까? 여전히 당신이 그것을 지원하고 깊이 아래로 구현하더라도 501은 오히려 당신의 상황에 손을 뻗은 것처럼 보입니다. 알려진 사람들은 여전히 ​​그것을 사용할 수 있지만 무작위는 v1의 501을 볼 수 있습니다.

501 구현되지 않음

서버는 요청을 이행하는 데 필요한 기능을 지원하지 않습니다. 서버가 요청 방법을 인식하지 못하고 자원을 지원할 수없는 경우 적절한 응답입니다.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html


답변

서비스를 사용할 수 없으며 최신 버전을 사용하라는 메시지와 함께 503을 사용합니다. 이 메시지는 통화의 50 %에 대해 반환 될 수 있으며 점차 100 %로 증가합니다.

투명한 마이그레이션의 경우, 내가 사용하는 것이 308 이 방법은 동사 수정하지 않는 한 (301)와 달리 (POST이 POST 될 것입니다), 영구 리디렉션을 -.