REST API 버전 불일치에 대한 경고로 응답하는 방법은 무엇입니까?

남자 이름

Jersey + Grizzly HTTP Server를 사용하여 REST 서버로 작동하는 Java 프로젝트가 있습니다. 내가 사용한 버전 전략은 응답에 "server-api-version"헤더를 넣는 것이며 클라이언트가 요청에 "accept-api-version"헤더를 넣도록 요구합니다.

이 구현을 기반으로 두 가지 수준의 버전 검사를 제공하려고합니다.

  1. 'accept-api-version'요청의 주 버전이 서버 API 버전의 주 버전보다 낮은 경우 요청을 거부합니다.
  2. 요청을 수락하되 요청 'accept-api-version'의 부 버전이 서버 API 버전의 부 버전보다 낮 으면 "X 개월 내에 사용하는 REST API 버전 지원을 중단 할 것입니다"라고 클라이언트에 경고합니다.

javax.ws.rs.container.ContainerRequestFilter를 구현하여 버전 확인 1을 달성했습니다. 그러나 클라이언트가 쉽게 알아 차릴 수있는 추가 경고로 정상적으로 응답하는 버전 확인 2를 달성하는 방법은 무엇입니까?

파이 잔

확인 2의 경우 클라이언트가 사용되는 방법 또는 위치에 따라 다릅니다. 또한 클라이언트 코드가 귀하의 통제하에 있는지 여부에 따라 다릅니다.

고객이

  • 그런 다음 Java 라이브러리가 더 이상 사용되지 않는 경고 로그를 추가합니다.
  • 실행중인 js 라이브러리는 브라우저이고 콘솔 경고 / 오류가 도움이 될 수 있지만 대부분은 눈에 띄지 않습니다.
  • 기타 모든 언어-해당 경고 또는 지원 중단 시스템을 사용합니다.
  • UI가있는 엔터프라이즈 앱인 경우 UI에 오류 메시지를 표시하는 것도 올바른주의를 끌 수 있습니다. 일반 사용자는 대부분 아무것도 할 수 없기 때문에 엔터프라이즈가 아닌 고객의 경우 UI에서 앱 오류가 발생하면 도움이되지 않습니다.

또 다른 어려운 방법 (고객 대면 사례에서는 허용되지 않을 수 있음)

클라이언트 소스가 제어권에있는 경우 실제로 서버에서 제거하기 전에 이전 버전 api에 대한 호출을 중단 할 수 있습니다. 여기서 제가 의미하는 바를 설명하겠습니다.

이제 클라이언트에는 호출 함수 getData(params: ParamType)가 있고 클라이언트에는 다음과 같은 플랫 세터 함수가 있습니다.useDeprecated(value: Boolean)

당신의 getData(params: ParamType)클라이언트 검사에서 클라이언트가 다음 던져 오류를 허용하지 않는 경우 클라이언트는 사용되지 않는 API를 호출 할 수 있습니다.

interface Client {

  //Clients extend this interface

  void useDeprecated(boolean deprecated);

  default boolean isDeprecated(int serverVersion, int clientVersion) {
    // you can string for representing versions as well.
    // complicated logic of deprecation here
    return result;
  }

  boolean isAllowedToUseDeprecated();

  default Object getData() {
    if(isDeprecated(serverVersion, clientVersion)) {
      if(isAllowedToUseDeprecated()) {
        return getDataFromServer();
      } else {
        throw new DeprecatedException(expectedVersion, actualVersion, message);
      }
    } else {
      return getDataFromServer();
    }

  }

  Object getDataFromServer(); //Clients implement this
}

현재 버전이 2.1.1 (int의 211)이고 이전 버전 2.0.0 (200)을 더 이상 사용하지 않으려 고합니다. 그런 다음 2.0.0을 사용하는 클라이언트는DeprecatedException

이것이 어떻게 도움이됩니까?

API가 더 이상 사용되지 않으면 클라이언트가 가져 오기 시작 DeprecatedException하고 호출이 실패하지만을 적용 useDeprecated(value: Boolean)하여 플래그를 설정하고 더 이상 사용되지 않는 API를 계속 사용할 수 있습니다 . 이는 사용 중단을 고객에게 알리고 단기적인 긴급 완화를 제공합니다.

이 어려운 방법은 내부 팀에 가장 적합하며 클라이언트 소스가 귀하의 통제에있는 경우에만 가능합니다.

경고 및 콘솔 메시지, 메일러 등을 통해 사전에 지원 중단을 잘 전달해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

왓슨 대화에서 외부 API의 응답을 대화로 전달하는 방법은 무엇입니까?

분류에서Dev

상승 된 권한으로 서버 측에서 Sharepoint Rest API를 실행하는 방법은 무엇입니까?

분류에서Dev

REST API에 대한 비동기 로그인을 처리하는 방법은 무엇입니까?

분류에서Dev

http 응답 (django 서버)에서 시간대를 변경하는 방법은 무엇입니까?

분류에서Dev

Android에서 retrofit 2의 응답으로 부울 만 반환하는 API에 대한 API 호출을 작성하는 방법은 무엇입니까?

분류에서Dev

Google 음성 API에 대한 응답으로 중첩 배열 PHP, 요소를 추출하는 방법은 무엇입니까?

분류에서Dev

REST API Flutter에서 JSON 대신 XML 데이터를 게시 / 전송하는 방법은 무엇입니까?

분류에서Dev

입력 REST를 기반으로 동일한 요청에 대해 두 가지 유형의 JSON 응답을 보내는 방법은 무엇입니까?

분류에서Dev

REST API 요청에서 모델 버전 레이블을 지정하는 방법은 무엇입니까?

분류에서Dev

외부 API에 대한 커버리지 보고서를받는 방법은 무엇입니까?

분류에서Dev

동일한 릴리스 버전 위에 새로 재설치하는 방법은 무엇입니까?

분류에서Dev

동일한 릴리스 버전 위에 새로 재설치하는 방법은 무엇입니까?

분류에서Dev

redux의 상태 변경에 응답하고 다른 작업을 전달하는 방법은 무엇입니까?

분류에서Dev

Java Jersey : 잘못된 URL에 대한 응답을 변경하는 방법은 무엇입니까?

분류에서Dev

R에서 jsonlite에 대한 응답으로 백 슬래시를 제거하는 방법은 무엇입니까?

분류에서Dev

정수 목록을 json 데이터로 Spring Boot Rest API에 전달하는 방법은 무엇입니까?

분류에서Dev

Twitter Rest API v1.1의 FHSTwitterEngine에서 완전히 로그 아웃하는 방법은 무엇입니까?

분류에서Dev

반응 js에서 테이블 형식으로 API 응답을 표시하는 방법은 무엇입니까?

분류에서Dev

다른 버튼에 대한 경고 대화 상자 제목을 설정하는 방법은 무엇입니까?

분류에서Dev

API Management에서 응답 버퍼링을 비활성화하고 즉시 플러시를 강제하는 방법은 무엇입니까?

분류에서Dev

REST API-역할별로 리소스에 대한 액세스를 제한하는 방법은 무엇입니까?

분류에서Dev

Scala-REST API를 호출하고 HDFS에서 json 파일로 저장하는 방법은 무엇입니까?

분류에서Dev

Odoo Rest API 서버로 클라이언트 측에서 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

Azure 웹앱으로 호스팅되는 Web API Core 3.1 응답에서 서버 정보 헤더를 제거하는 방법은 무엇입니까?

분류에서Dev

Amazon MWS 응답 변수를 다른 API 호출에 전달하는 방법은 무엇입니까?

분류에서Dev

Amazon MWS 응답 변수를 다른 API 호출에 전달하는 방법은 무엇입니까?

분류에서Dev

Couchbase에 대한 전체 텍스트 검색 쿼리에 대한 응답으로 문서를 가져 오는 방법은 무엇입니까?

분류에서Dev

Apache에 대한 파일 권한을 처리하는 간단하고 안전한 방법은 무엇입니까?

분류에서Dev

한 서버에서 다른 서버로 파일을 전송하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    왓슨 대화에서 외부 API의 응답을 대화로 전달하는 방법은 무엇입니까?

  2. 2

    상승 된 권한으로 서버 측에서 Sharepoint Rest API를 실행하는 방법은 무엇입니까?

  3. 3

    REST API에 대한 비동기 로그인을 처리하는 방법은 무엇입니까?

  4. 4

    http 응답 (django 서버)에서 시간대를 변경하는 방법은 무엇입니까?

  5. 5

    Android에서 retrofit 2의 응답으로 부울 만 반환하는 API에 대한 API 호출을 작성하는 방법은 무엇입니까?

  6. 6

    Google 음성 API에 대한 응답으로 중첩 배열 PHP, 요소를 추출하는 방법은 무엇입니까?

  7. 7

    REST API Flutter에서 JSON 대신 XML 데이터를 게시 / 전송하는 방법은 무엇입니까?

  8. 8

    입력 REST를 기반으로 동일한 요청에 대해 두 가지 유형의 JSON 응답을 보내는 방법은 무엇입니까?

  9. 9

    REST API 요청에서 모델 버전 레이블을 지정하는 방법은 무엇입니까?

  10. 10

    외부 API에 대한 커버리지 보고서를받는 방법은 무엇입니까?

  11. 11

    동일한 릴리스 버전 위에 새로 재설치하는 방법은 무엇입니까?

  12. 12

    동일한 릴리스 버전 위에 새로 재설치하는 방법은 무엇입니까?

  13. 13

    redux의 상태 변경에 응답하고 다른 작업을 전달하는 방법은 무엇입니까?

  14. 14

    Java Jersey : 잘못된 URL에 대한 응답을 변경하는 방법은 무엇입니까?

  15. 15

    R에서 jsonlite에 대한 응답으로 백 슬래시를 제거하는 방법은 무엇입니까?

  16. 16

    정수 목록을 json 데이터로 Spring Boot Rest API에 전달하는 방법은 무엇입니까?

  17. 17

    Twitter Rest API v1.1의 FHSTwitterEngine에서 완전히 로그 아웃하는 방법은 무엇입니까?

  18. 18

    반응 js에서 테이블 형식으로 API 응답을 표시하는 방법은 무엇입니까?

  19. 19

    다른 버튼에 대한 경고 대화 상자 제목을 설정하는 방법은 무엇입니까?

  20. 20

    API Management에서 응답 버퍼링을 비활성화하고 즉시 플러시를 강제하는 방법은 무엇입니까?

  21. 21

    REST API-역할별로 리소스에 대한 액세스를 제한하는 방법은 무엇입니까?

  22. 22

    Scala-REST API를 호출하고 HDFS에서 json 파일로 저장하는 방법은 무엇입니까?

  23. 23

    Odoo Rest API 서버로 클라이언트 측에서 데이터를 얻는 방법은 무엇입니까?

  24. 24

    Azure 웹앱으로 호스팅되는 Web API Core 3.1 응답에서 서버 정보 헤더를 제거하는 방법은 무엇입니까?

  25. 25

    Amazon MWS 응답 변수를 다른 API 호출에 전달하는 방법은 무엇입니까?

  26. 26

    Amazon MWS 응답 변수를 다른 API 호출에 전달하는 방법은 무엇입니까?

  27. 27

    Couchbase에 대한 전체 텍스트 검색 쿼리에 대한 응답으로 문서를 가져 오는 방법은 무엇입니까?

  28. 28

    Apache에 대한 파일 권한을 처리하는 간단하고 안전한 방법은 무엇입니까?

  29. 29

    한 서버에서 다른 서버로 파일을 전송하는 방법은 무엇입니까?

뜨겁다태그

보관