Jersey + Grizzly HTTP Server를 사용하여 REST 서버로 작동하는 Java 프로젝트가 있습니다. 내가 사용한 버전 전략은 응답에 "server-api-version"헤더를 넣는 것이며 클라이언트가 요청에 "accept-api-version"헤더를 넣도록 요구합니다.
이 구현을 기반으로 두 가지 수준의 버전 검사를 제공하려고합니다.
javax.ws.rs.container.ContainerRequestFilter를 구현하여 버전 확인 1을 달성했습니다. 그러나 클라이언트가 쉽게 알아 차릴 수있는 추가 경고로 정상적으로 응답하는 버전 확인 2를 달성하는 방법은 무엇입니까?
확인 2의 경우 클라이언트가 사용되는 방법 또는 위치에 따라 다릅니다. 또한 클라이언트 코드가 귀하의 통제하에 있는지 여부에 따라 다릅니다.
고객이
또 다른 어려운 방법 (고객 대면 사례에서는 허용되지 않을 수 있음)
클라이언트 소스가 제어권에있는 경우 실제로 서버에서 제거하기 전에 이전 버전 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] 삭제
몇 마디 만하겠습니다