Há uma necessidade de modificar o contrato existente (cargas de pedido / resposta), de uma bota Microservice Spring, que são essencialmente quebrando alterações (não compatível com versões anteriores). E é essencial para apoiar ambas as versões do contrato até algum tempo - até o momento todos os clientes atualizações-se à versão mais recente.
A fim de alcançar este objectivo, foi decidido usar URL versionamento estratégia (como / v1 / {recurso} e / v2 / {recurso}).
Agora, a pergunta é qual é a melhor maneira de implementar isso no código? Abaixo estão as duas soluções propostas
Separando a uma versão ( / v1 código) e mantê-lo separadamente até que esta versão é suportada. Este significa essencialmente que cortam o ramo de mestre e compilação / implantação deste ramo e manter duas instâncias do mesmo serviço cada apoio v1 e v2 versões respectivamente.
No mesmo branch master, introduzir um pacote separado (como service.api.v2.request ) e colocar todas as classes o pedido api payload / resposta lá e introduzir um novo controlador de ponto de extremidade para apoio ( / v2 ). Esta abordagem permite que uma única instância para apoiar tanto as versões.
Qual dos acima é uma abordagem melhor? Ou há qualquer padrão outros / as melhores alternativas para conseguir isso? Does Primavera Bota fornece qualquer fora do suporte caixa para tais necessidades?
Depende de quanto comunalidade existe por trás do controlador. Se as versões são significativamente diferentes por todo o caminho até o final de volta, então talvez diferentes ramos são mais fáceis de trabalhar, mas se as principais diferenças estão nos caminhos do controlador e a entrada e saída objetos envolvidos em tais métodos, em seguida, 2 ramos, provavelmente, levar à dor de aplicar as alterações para ambos, e lembrando-se de fazê-lo cada vez - é o tipo de situação em que, mais cedo ou mais tarde, uma correção importante vai ser desperdiçada.
É tudo um equilíbrio, e você precisa pesar o custo de manutenção das abordagens no seu caso em termos de tempo e esforço, e também o risco de erros, bem como o custo de implementações separadas.