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


13

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

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

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


API는 HTTP와 관련이 없기 때문에 API 실패에 대한 HTTP 상태 코드는 없습니다. 리소스는 여전히 사용 가능하지만 REST에서는 다른 리소스를 요청해야합니다. REST에서는 동일한 리소스가 아니므로 사용할 수 없습니다.
Rob

답변:


11

표준이없는 것 같습니다.

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 접근 방식과 유사합니다.

더 읽을 거리 :


2
301은 위험 해 보인다. 이로 인해 동일한 정식 의미가없는 장소로 자동 리디렉션됩니다.
Brandon Yarbrough

입력을 감사하십시오. 모든 3XX 코드는 클라이언트가 Location 헤더에 대체 URL을 제공하여 추가 조치 (리디렉션)를 수행해야 함을 나타냅니다. 각 코드에는 약간 다른 리디렉션 동작이 있습니다. 303은 POST를 GET으로 새 위치로 리디렉션합니다. 나는이 답변을 더 많은 정보로 업데이트 할 것입니다.
perry

1

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


0

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

501 구현되지 않음

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

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


0

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.