Skip to main content

Estratégia de versão do soa


estratégia de versão do Soa
Obter através da App Store Leia esta publicação em nosso aplicativo!
Estratégia de versão para interfaces de serviço JAR.
Estou construindo uma arquitetura orientada a serviços composta (principalmente) de serviços baseados em Java, cada um dos quais é um projeto Maven (em um repositório individual) com dois submódulos: comum e servidor. O módulo comum contém as interfaces do serviço que os clientes podem incluir no seu projeto para fazer chamadas de serviço. O submódulo do servidor contém o código que realmente alimenta o serviço.
Agora estou tentando descobrir uma estratégia de controle de versão apropriada para as interfaces, de modo que cada mudança de interface resulte em um novo jar comum, mas muda para o servidor (desde que não tenham impacto no contrato das interfaces). mesmo jar comum.
Eu sei que isso é bastante simples de fazer manualmente (simplesmente incremente a versão do servidor e não toque no comum), mas esse projeto será construído e implantado por um servidor de CI e gostaria de criar uma estratégia para automaticamente versionando estes. A única coisa que eu consegui chegar até agora é ter o servidor CI md5 as interfaces de serviço.
Eu consideraria usar os campos de versão de especificação e versão de implementação no Manifesto. A versão de especificação aumentaria nas mudanças na especificação da interface, enquanto a implementação-versão aumentaria em cada compilação.
Normalmente, a versão de especificação seria algo como 1.0 e a versão de implementação acrescentaria algo relacionado à construção de algo como 1.0.3432.
Veja o modo como o JST é versionado para um exemplo.
Ao declarar suas dependências, você provavelmente deseja evitar a correspondência exata.

Versão do Serviço SOA - Melhores Práticas.
Sumário executivo.
Este documento tem como objetivo destacar algumas das melhores práticas relacionadas ao controle de versão de serviços em SOA. Essas melhores práticas são baseadas em problemas práticos que Torry Harris enfrentou ao implementar projetos SOA.
O controle de versão é um dos aspectos importantes da Governança SOA. Poucas estratégias de governança recomendam uma versão basilizada do serviço para evitar a complexidade do controle de versão. Por outro lado, poucas outras estratégias de governança preferem usar várias versões do mesmo serviço para que as alterações e aprimoramentos na interface de serviço não afetem os consumidores existentes. Este documento visa destacar os prós e os contras de cada abordagem e propõe melhores práticas que atendam os dois casos.
A solução técnica real para a implementação do controle de versão do serviço é considerada fora do escopo deste documento, pois existem várias abordagens simples e específicas para o fornecedor. O foco deste documento é descrever o princípio de versão de serviço e destacar as melhores práticas.
Por que o Versioning?
Visão geral do controle de versão do serviço.
A versão de serviço é a abordagem seguida pelos desenvolvedores de serviços para permitir que várias versões do mesmo serviço estejam operacionais ao mesmo tempo. Para dar uma analogia, qualquer biblioteca de API de software reutilizável possui várias versões usadas por diferentes aplicativos. A mesma analogia se aplica aos serviços.
Exemplo de versão de versão do serviço.
Os serviços da Web são a maneira ideal de implementar serviços SOA. O diagrama a seguir ilustra o conceito de múltiplas versões ativas com visão dos serviços e a dependência com suas aplicações de consumo. No exemplo, há dois serviços - Serviço do Processador de Ordens e Serviço de Consulta de Estoque. Várias versões ativas existem para esses dois serviços. O diagrama mostra o caminho de dependência de sete aplicativos diferentes usando várias versões desses dois serviços.
Prós e contras.
Alterações e aprimoramentos podem ser feitos em serviços individuais e lançados como novas versões sem causar impacto nas aplicações de consumo existentes.
Como mostrado no diagrama acima, várias versões podem levar rapidamente a muitos problemas de gerenciamento de dependência, aumentando assim com.
Em uma empresa, as aplicações do consumidor normalmente seriam desenvolvidas e mantidas por equipes diferentes. Vários versionamentos dão flexibilidade à equipe para priorizar e migrar para a versão mais recente de acordo com sua programação e orçamento convenientes.
Quaisquer correções de bugs / erros descobertos em um momento posterior nos serviços precisariam de correção apropriada em todas as versões aplicáveis ​​do serviço. Isso, eventualmente, leva à má manutenção do código de serviço.
Há sempre um plano de reversão fácil no lugar quando um aplicativo enfrenta um problema com a nova versão. Pode continuar a interagir com uma versão estável anterior.
A solução personalizada precisaria ser seguida na maioria dos casos, exigindo a manutenção de várias cópias com versão do WSDL e do esquema.
É necessária uma ferramenta adicional / registro de tempo de execução para buscar o URL do ponto final adequado com base no número da versão.
O código fonte dos serviços precisaria ser cuidadosamente controlado usando ramificação para que múltiplas versões de binários sejam geradas e mantidas adequadamente.
Serviços de Baselined - No Versioning.
Visão geral dos serviços de Baselined.
O conceito de Baselined Services desencoraja o uso do controle de versão. Apenas uma versão finalizada do Serviço é mantida ativa em qualquer ponto do tempo, e todos os aplicativos de consumo apontam para uma e única versão do serviço, que é a versão em baseline.
Exemplo de serviços de Baselined.
O exemplo a seguir (adaptado do anterior) ilustra o conceito de serviços basilíngüe.
Prós e contras.
A Plataforma de Serviços representa uma visão única do portfólio de serviços corporativos, garantindo assim a "reutilização" em seu verdadeiro sentido.
Essa política é "rígida demais" em várias equipes de consumidores de aplicativos, onde, em cada alteração / aprimoramento do serviço, seria necessário um pouco de trabalho de migração dentro do aplicativo.
A manutenção é muito simplificada.
O design do serviço precisaria ser considerado com muito cuidado, garantindo compatibilidade com a frente e para trás. Isso pode ser um fator limitante, em alguns casos, para que as equipes de negócios planejem aprimoramentos importantes do serviço.
Um registro de tempo de execução não é necessário, pois os aplicativos do consumidor mantêm uma URL de terminal fixa.
O procedimento de análise de impacto deve ser fortalecido para que as mudanças sejam implementadas com grande precisão.
O gerenciamento do código fonte dos serviços é bastante simplificado, pois há apenas uma versão para manter.
Implantação ao vivo Os retrocessos devem ser planejados com cuidado para que haja impacto mínimo no aplicativo do consumidor.
Melhores práticas.
Tendo descrito ambas as abordagens e os seus prós e contras listados, torna-se muito difícil para as empresas escolherem uma abordagem específica. Os profissionais da abordagem de serviços versionados parecem ser ideais em comparação com os contras da abordagem de serviços de base. Assim, as recomendações de melhores práticas para a estratégia de governança de versão são.
Use um mix-and-match de ambos os mundos seguindo a abordagem de serviços versionados, ainda tendo controle sobre os pesadelos de versão limitando as versões ativas máximas para 3 Ao iniciar uma nova versão do serviço, somente os dois últimos continuam a permanecer ativos. Todas as versões mais baixas devem ser obsoletas e desarmadas. Isso significa que não mais do que três versões ativas de um serviço existem em qualquer ponto do tempo. As políticas precisam ser estabelecidas e comunicadas às equipes de aplicativos do consumidor para garantir que a migração seja feita a tempo. A equipe de serviços não será responsável por impactos no aplicativo do consumidor se o aplicativo continuar usando uma versão obsoleta do serviço.
Torry Harris SOA noivado.
Você está aqui: & # 160; Home Whitepaper do THBS Insights - Melhores práticas de controle de versão do SOA.
Baixe o Whitepaper.
Copyright © 2018 Torry Harris Business Solutions | Termos e Condições | Mapa do site.

Fundamentos de versão do contrato de serviço da Web Parte II: Identificadores de versão e estratégias de versão.
Junte-se à comunidade DZone e obtenha a experiência dos membros completos.
Existem diferentes formas de contratos de serviços de versão com base em políticas, prioridades e requisitos. Este, o segundo artigo em uma série de duas partes do livro "Web Service Contract Design & amp; Versioning for SOA ", apresenta três estratégias de controle de versão comuns: rigorosas, flexíveis e soltas. Os prós e contras de cada abordagem são discutidos e classificados em relação ao rigor, impacto de governança e complexidade. O papel dos identificadores de versão também é explorado através de uma série de exemplos. Leia a parte I aqui.
Às vezes, você verá um período adicional + pares decimais que levam a números de versão mais detalhados como este:
O significado típico associado a esses números é a medida ou o significado da mudança. Incrementar o primeiro decimal geralmente indica uma grande mudança de versão (ou atualização) no software, enquanto que os decimais após o primeiro período geralmente representam vários níveis de mudanças de versão menores.
Espera-se que uma versão secundária seja retrocompatível com outras versões secundárias associadas a uma versão principal. Por exemplo, a versão 5.2 de um programa deve ser totalmente compatível com as versões 5.0 e 5.1. Uma versão principal geralmente é esperada para quebrar a compatibilidade com programas que pertencem a outras versões importantes. Isso significa que a versão 5.0 do programa não deverá ser compatível com a versão 4.0.
Essa convenção de indicar compatibilidade através de números de versão maiores e menores é chamada de garantia de compatibilidade. Outra abordagem, conhecida como & quot; quantidade de trabalho & quot; usa números de versão para comunicar o esforço que entrou na mudança. Um aumento da versão menor indica um esforço modesto, e um aumento importante da versão representa previsivelmente muito trabalho.
Esse mesmo atributo de versão pode ser usado com o elemento xsd: schema da raiz, da seguinte maneira:
Você pode criar uma variação personalizada desse atributo atribuindo-o a qualquer elemento que você definir (caso em que não é necessário nomear o atributo & quot; versão & quot;).
Uma abordagem personalizada alternativa é incorporar o número da versão em um espaço para nome, como mostrado aqui:
Observe que se tornou uma convenção comum usar valores de data em namespaces ao criar o esquema de esquemas XML, da seguinte maneira:
Neste caso, é a data da alteração que atua como o identificador da versão. Para manter a expressão das versões de definição XML Schema alinhadas com as versões de definição WSDL, usamos números de versão em vez de valores de data nos exemplos ao longo dos próximos capítulos. No entanto, quando se trabalha em um ambiente em que as definições do Esquema XML são de propriedade separada como parte de uma arquitetura de dados independente, não é incomum que os identificadores de versão de esquema sejam diferentes dos usados ​​pelas definições WSDL.
O valor do atributo anyType fornecido pelo idioma WSDL 2.0 permite que uma mensagem consista em qualquer documento XML válido. Os curingas XML Schema podem ser usados ​​para permitir que um intervalo de dados desconhecidos seja passado nas definições de mensagens. Asserções de política ignoráveis ​​podem ser definidas para comunicar características de serviço que podem ser reconhecidas pelos consumidores futuros. Esses e outros recursos relacionados à compatibilidade com versões futuras são discutidos nos próximos capítulos.
Nota: Todas as três estratégias serão referenciadas nos próximos capítulos à medida que exploramos a forma como o controle de versão pode ser realizado com os idiomas WSDL, XML Schema e WS-Policy.
Strictness - A rigidez das opções de versão do contrato. A abordagem restrita é claramente a mais rígida em suas regras de versão, enquanto a estratégia Loose oferece a maior variedade de opções de controle de versão devido à dependência de curingas. Impacto de governança - A quantidade de carga de governança imposta por uma estratégia. As abordagens estritas e soltas aumentam o impacto da governança, mas por diferentes motivos. A Estratégia Estrita requer a emissão de novas versões de contratos, que afetam os consumidores e as infra-estruturas circundantes, enquanto a abordagem Loose introduz o conceito de conjuntos de mensagens desconhecidas que precisam ser acomodados separadamente através de programação personalizada. Complexidade - A complexidade geral do processo de versão. Devido ao uso de curingas e dados de mensagens desconhecidas, a estratégia Loose tem o maior potencial de complexidade, enquanto as regras diretas que formam a base da abordagem Strict tornam a opção mais simples.
Em toda essa comparação, a estratégia flexível fornece uma abordagem que representa um nível consistentemente médio de rigor, esforço de governança e complexidade geral.
Este artigo foi originalmente publicado na Revista SOA (soamag), uma publicação oficialmente associada à "The Prentice Hall Service-Oriented Computing Series" de Thomas Erl & quot; (soabooks). Copyright e cópia; SOA Systems Inc. (soasystems)
A Zona de Integração é orgulhosamente patrocinada pela CA Technologies. Aprenda com microservices especializados e apresentações de API na série Modern Summit Application Architectures Virtual Summit.
Como esse artigo? Leia mais do DZone.
Free DZone Refcard.
RESTful API Lifecycle Management.
Publicado em DZone com permissão de Nitin Bharti. Veja o artigo original aqui.
As opiniões expressas pelos contribuidores da DZone são próprias.

Estratégias de versão para serviços RESTful Like.
Tempo de leitura estimado: 3 minutos adicionado a.
lista de leitura Adicionar a.
lista de leitura Veja meu.
Se o comportamento persistir, por favor entre em contato.
NOTA: Qcon. ai - Conferência Applied AI para desenvolvedores 9 a 11 de abril de 2018. Conecte-se com os profissionais da IA ​​e da Aprendizagem de Máquinas que estão dirigindo a mudança no software. Obtenha mais detalhes ou registe-se agora!
Em seu artigo, Stu Charlton resume as várias opções disponíveis para versionamento de serviços RESTful, que ele prefigura dizendo & ldquo; Estes podem ser conceitos complicados para descrever, e eu realmente não quero escrever um pequeno livro sobre este tópico & rdquo ;. Ele classifica o problema de versão em dois tipos; Versão de dados, que visa a versão do próprio recurso, de modo que as mudanças de rastreamento para o estado de qualquer recurso dado se tornam possíveis; e Versioning de idioma que se refere ao próprio protocolo; em outras palavras, a representação.
O controle de versão do URI [& hellip;] é uma escolha de design quando os recursos são imutáveis ​​ao longo do tempo e criamos novos recursos para mudanças de estado (semelhante à forma como gerenciamos dados de séries temporais em um banco de dados).
Extensão de idioma ou controle de versão, por outro lado, o estado não é alterado, mas a forma como os dados são representados foi alterada.
Stu redige o documento preliminar do W3C TAG de David Orchard sobre estratégias de compatibilidade de versões que elucidam as complexidades de mudanças para trás, para diante e incompatíveis. & ldquo; A extensão de idioma requer pensamento & rdquo; ele diz, e enfatiza isso.
Regra nº 1: prefira estender um idioma de forma compatível com versões anteriores e / ou vice-versa. Os indicadores de versão são um último recurso, para denotar mudanças incompatíveis.
Ele resume o documento em forma de tabela da seguinte forma.
Notificações de versão de pesquisa.
Notificação de substituição ou versão lado a lado via canal ou links fora de banda.
Deve aceitar desconhecidos Deve preservar as incógnitas se persistir o estado Modelo de substituição do identificador de versão.
A especificação do tipo de mídia define claramente as expectativas de compatibilidade para o consumidor avançado (e / ou usa um esquema legível por máquina para denotar áreas de extensão de compatibilidade direta)
Verifique o identificador da versão.
Side-by-side ou Breaking Replacement.
Ele continua definindo alguns dos termos usados ​​na tabela, como notificações de versão, substituição, lado a lado, identificadores de versão e como os produtores e os consumidores lidam com elementos desconhecidos no & ldquo; idioma & rdquo; em diferentes cenários de compatibilidade. Ele examina várias estratégias para fornecer identificadores de versão e discute sua preferência sobre a prioridade com a qual essas estratégias devem ser aplicadas.
Identificador de versão dentro do conteúdo do tipo de mídia.
Isso tem muitos exemplos na natureza, como o HTML DOCTYPE, alguns usos do XMLNS, um identificador de versão dentro do documento PDF. [& hellip;] É a maneira que a maioria dos tipos de mídia da Web funcionou há muito tempo, com vários graus de sucesso, mas note que esses formatos foram projetados há muito tempo com compatibilidade avançada.
Identificador de versão no tipo MIME.
[& hellip;] O benefício aqui é que isso permite a criação de versões lado a lado sem afetar o espaço URI. [& hellip;.but & hellip;] isso evita evitar hipermídia e tentar empurrar as coisas para as outras camadas da Arquitetura da Web (HTTP e / ou URIs). por exemplo. application / vnd. mytype; version = 2.
Identificador de versão no URI.
É claro que mint URIs quando a semântica do próprio recurso muda. Então, se eles mudam com a linguagem, então mina novos URIs [& hellip;], por exemplo, exemplo / dados / v1 / po / 123.
O outro problema são marcadores, que em um sistema de dados são, na verdade, conhecidos como & quot; chaves estrangeiras & quot ;. Qualquer pessoa com histórico de dados relacionais sabe que suas chaves primárias realmente não devem mudar, pois é caro propagar essa mudança para chaves estrangeiras.
Ele recomenda ler o Capítulo 13 do livro RESTful Web Services Cookbook por Subbu Allamaraju para saber mais sobre o assunto e conclui seu artigo com o seguinte resumo.
Prefira extensível, encaminhar & amp; idiomas compatíveis com versões anteriores e a abordagem de substituição para compatibilidade. Observe a posição do W3C TAG nos identificadores de versão Seja judicioso quando você usa identificadores de versão em URIs, como as URIs legais não mudam. Para implantações lado a lado, inclua sempre uma seção em sua mídia ou relação de link, para versões novas / antigas e atualizar referências com preguiça, pois o consumidor atualiza seu valor em cache. Use redirecionamentos permanentes para retirar URIs vinculados a versões de idioma antigo. URIs de versão se a semântica do recurso for alterada, mas seja cortês para os consumidores, garantindo que os links estejam disponíveis para denotar o antigo versus o novo.
O artigo de Stu tenta reunir os elementos que compõem o espaço de solução para os serviços RESTful de versão, no entanto, essas estratégias continuam repletas de debate sobre quais são as opções corretas.
Conteúdo Vendedor relacionado.
Patrocinador relacionado.
Este conteúdo está no tópico.
Tópicos relacionados:
Editorial Relacionada.
Nos diga o que você acha.
3 comentários da comunidade.
Olá estranho!
Você precisa registrar uma conta do InfoQ ou fazer login para publicar comentários. Mas há muito mais por trás do registro.
Aproveite ao máximo a experiência da InfoQ.
Pedido de esclarecimento por Andrew Marshall - 11 de março de 2010 11:45.
Boletim Semanal da InfoQ.
Junte-se a uma comunidade de mais de 250 colaboradores seniores de KK inscrevendo-se em nosso boletim informativo.

SOAPatterns.
Formulário de contribuição Candidate Pattern.
Versão canônica (Erl)
Como os contratos de serviços dentro do mesmo inventário de serviços podem ser versionados com impacto mínimo?
Os contratos de serviços dentro do mesmo inventário de serviços que são versionados de forma diferente causarão inúmeros problemas de interoperabilidade e governança.
As regras de versão de contrato de serviço e a expressão de informações de versão são padronizadas dentro de um limite de estoque de serviços.
Aplicação.
São necessários padrões de governança e design para assegurar o controle de versão consistente dos contratos de serviços dentro do limite do inventário.
A criação e aplicação dos padrões de versão necessários introduzem novas demandas de governança.
Princípios.
Arquitetura.
Quando os serviços são versionados de acordo com a mesma estratégia global, eles podem manter sua padronização e interoperabilidade originais e são mais facilmente entendidos pelos designers de consumo.
Padrões relacionados neste catálogo.
Objetivos de computação orientados para serviços relacionados.
Esta página contém trechos de:
(ISBN: 0136135161, Hardcover, Full-Color, 400+ Ilustrações, 865 páginas)
Para mais informações sobre este livro, visite arcitura / books.
Esta página contém trechos de:
por Thomas Erl, Anish Karmarkar, Priscilla Walmsley, Hugo Haas, Umit Yalcinalp, Canyang Kevin Liu, David Orchard, Andre Tost, James Pasley.
Para mais informações sobre este livro, visite arcitura / books.
Arcitura e comércio; A Education Inc. é uma provedora global líder de programas de treinamento e certificação progressivos e independentes de fornecedores. Com uma rede mundial de treinadores certificados, parceiros de treinamento e centros de testes, Arcitura e comércio; as escolas e os programas de credenciamento tornaram-se internacionalmente estabelecidos e comprovados por meio de uma série de livros, trabalhos e indústrias em andamento.

estratégia de versão do Soa
Thomas Erl é um autor de best-sellers e fundador da Arcitura & trade; Education Inc. Thomas é o autor de tecnologia do serviço mais vendido no mundo por mais de sete anos e é o editor de séries da Prentice Hall Service Technology Series de Thomas Erl (servicetechbooks). Com mais de 300.000 cópias impressas em todo o mundo, seus livros se tornaram best-sellers internacionais e foram formalmente aprovados por membros seniores das principais organizações de TI, como IBM, Microsoft, Oracle, Intel, Accenture, IEEE, HL7, MITRE, SAP, CISCO, HP e muitos outros.
Vários de seus livros, incluindo Cloud Computing Design Patterns, Cloud Computing: Concepts, Technology & amp; Arquitetura, SOA Design Patterns, SOA Principles of Service Design e SOA Governance, foram criados em colaboração com a comunidade de TI e contribuíram para a definição de mecanismos de tecnologia da computação em nuvem, o modelo arquitetônico orientado para o serviço e a orientação do serviço como um paradigma distinto . Seu título mais recente, Arquitetura Orientada a Serviços: Análise & amp; Design for Services and Microservices, formalmente posiciona e introduz novos padrões para o modelo arquitetural do Microservice como parte do SOA.
Como CEO da Arcitura & trade; Education Inc. e em cooperação com SOA School, Cloud School e Big Data Science School, Thomas liderou o desenvolvimento de currículos para o SOA Certified Professional reconhecido internacionalmente (SOACP), Cloud Certified Professional (CCP) e Big Data Science Certified Professional (BDSCP ) programas de acreditação, que estabeleceram uma série de certificações de indústria formal, neutras do fornecedor, obtidas por milhares de profissionais de TI em todo o mundo.
Thomas é o membro fundador do SOA Manifesto Working Group e autor do Annotated SOA Manifesto (soa-manifesto). Durante 10 anos, ele foi o editor da The Service Technology Magazine, e ele supervisiona as iniciativas SOAPatterns, CloudPatterns e BigDataPatterns, dedicadas ao desenvolvimento contínuo de catálogos de padrões principais para arquitetura orientada a serviços, computação em nuvem e Big Data .
Thomas visitou mais de 20 países como palestrante e instrutor e participa regularmente de conferências internacionais. Mais de 100 artigos e entrevistas de Thomas foram publicados em numerosas publicações, incluindo The Wall Street Journal e CIO Magazine.
David Orchard é o ex-diretor técnico do BEA Systems CTO Office, com foco em padrões de serviços da Web. Ele foi membro eleito do Grupo de Arquitetura Técnica do W3C e é um editor nomeado da descoberta de versão e extensibilidade do TAG do W3C; Arquitetura de serviços da Web, XML e comitês consultivos.
Ele é atualmente ou foi um co-editor da arquitetura de serviços da Web, cenários de uso de serviços da Web, WS-Coordination, WS-ReliableMessaging, WS-Addressing, WS-Eventing, WS-MetadataExchange, WS-Transfer, SOAP-Conversation, XML Link e XInclude especificações.
Ele escreveu vários artigos técnicos, é o co-autor do Web Service Contract Design & amp; Versão para SOA, e é um palestrante freqüente em várias tecnologias relacionadas à Internet.
James Pasley é um arquiteto com Workday e um membro de sua equipe de Integração sob demanda. James é especialista no cliente que enfrenta aspectos da arquitetura de integração do Workday, como os serviços públicos da Web do Workday. James é editor do site de desenvolvimento do Workday e também cria muito material para os cursos de treinamento relacionados à integração da Workday. James juntou-se à Workday através da aquisição do software Cape Clear.
James ingressou no Cape Clear Software em 2001 como desenvolvedor principal do Cape Studio. Em 2003, James foi nomeado arquiteto-chefe da Cape Clear, onde supervisionou o desenvolvimento do Enterprise Service Bus (ESB) da Cape Clear. Em 2005, James tornou-se Diretor de Tecnologia do Cabo Clear Software. A Cape Clear foi reconhecida pela Gartner e pela Forrester como o Enterprise Service Bus líder, oferecendo confiabilidade, escalabilidade e desempenho comprovados de integração sob demanda para conectar qualquer conteúdo, serviços ou software através da internet usando tecnologias de serviços da Web.
Antes de ingressar no Cape Clear Software, James trabalhou para a Siemens Nixdorf, desenvolvendo soluções seguras de mensagens X.400 e infra-estrutura de chave pública (PKI) para uma variedade de produtos.
James tem um B. A. (Moderador) em Ciência da Computação pela Trinity College, Dublin e é co-autor de Web Service Contract Design & amp; Versão para SOA.
Fundamentos de versão do contrato de serviços da Web Parte II:
Identificadores de versão e estratégias de versionamento.
Resumo: Existem diferentes formas de contratos de serviços de versão com base em políticas, prioridades e requisitos. Este, o segundo artigo em uma série de duas partes do livro "Web Service Contract Design & Versioning for SOA", apresenta três estratégias de controle de versão comuns: rigorosas, flexíveis e soltas. Os prós e contras de cada abordagem são discutidos e classificados em relação ao rigor, impacto de governança e complexidade. O papel dos identificadores de versão também é explorado por meio de uma série de exemplos.
O seguinte artigo é um trecho do novo livro "Web Service Contract Design and Versioning for SOA" [REF-1] Copyright 2008 Prentice Hall / Pearson PTR e SOA Systems Inc. Observe que as referências dos capítulos foram intencionalmente deixadas no artigo, conforme requisitos de Prentice Hall.
Um dos padrões de design mais fundamentais relacionados ao design de contrato de serviço da Web é o padrão de Identificação de versão. Ele essencialmente defende que os números de versão devem ser claramente expressos, não apenas no nível do contrato, mas até as versões dos esquemas que estão subjacentes às definições das mensagens.
O primeiro passo para estabelecer uma estratégia de versionamento eficaz é decidir sobre um meio comum pelo qual as próprias versões são identificadas e representadas nos contratos de serviços da Web.
As versões quase sempre são comunicadas com os números de versão. O formato mais comum é um decimal, seguido por um período e depois outro decimal, como mostrado aqui:
Às vezes, você verá um período adicional + pares decimais que levam a números de versão mais detalhados como este:
O significado típico associado a esses números é a medida ou o significado da mudança. Incrementar o primeiro decimal geralmente indica uma grande mudança de versão (ou atualização) no software, enquanto que os decimais após o primeiro período geralmente representam vários níveis de mudanças de versão menores.
Do ponto de vista da compatibilidade, podemos associar significado adicional a esses números. Especificamente, a seguinte convenção surgiu no setor:
Espera-se que uma versão secundária seja retrocompatível com outras versões secundárias associadas a uma versão principal. Por exemplo, a versão 5.2 de um programa deve ser totalmente compatível com as versões 5.0 e 5.1. Uma versão principal geralmente é esperada para quebrar a compatibilidade com programas que pertencem a outras versões importantes. Isso significa que a versão 5.0 do programa não deverá ser compatível com a versão 4.0.
Essa convenção de indicar compatibilidade através de números de versão maiores e menores é chamada de garantia de compatibilidade. Outra abordagem, conhecida como "quantidade de trabalho", usa números de versão para comunicar o esforço que ocorreu na mudança. Um aumento da versão menor indica um esforço modesto, e um aumento importante da versão representa previsivelmente muito trabalho.
Essas duas convenções podem ser combinadas e muitas vezes são. O resultado é que os números da versão continuam a comunicar a compatibilidade, conforme explicado anteriormente, mas às vezes eles aumentam em vários dígitos, dependendo da quantidade de esforço em cada versão.
Existem várias opções de sintaxe disponíveis para expressar números de versão. Por exemplo, você deve ter notado que a instrução de declaração que inicia um documento XML pode conter um número que expressa a versão da especificação XML que está sendo usada:
Esse mesmo atributo de versão pode ser usado com o elemento xsd: schema da raiz, da seguinte maneira:
Você pode criar ainda mais uma variação personalizada desse atributo, atribuindo-a a qualquer elemento que você definir (caso em que você não é obrigado a nomear o atributo "versão").
Uma abordagem personalizada alternativa é incorporar o número da versão em um espaço para nome, como mostrado aqui:
Observe que se tornou uma convenção comum para usar valores de data em namespaces ao controlar os esquemas XML, da seguinte maneira:
Neste caso, é a data da alteração que atua como o identificador da versão. Para manter a expressão das versões de definição XML Schema alinhadas com as versões de definição WSDL, usamos números de versão em vez de valores de data nos exemplos ao longo dos próximos capítulos. No entanto, quando se trabalha em um ambiente em que as definições do Esquema XML são de propriedade separada como parte de uma arquitetura de dados independente, não é incomum que os identificadores de versão de esquema sejam diferentes dos usados ​​pelas definições WSDL.
Independentemente da opção que você escolher, é importante considerar o padrão de Versão Canonical que dita que a expressão das informações de versão deve ser padronizada em todos os contratos de serviços dentro do limite de um inventário de serviços. Em ambientes maiores, isso geralmente exigirá uma autoridade central que garanta a linearidade, a consistência e a qualidade da descrição das informações da versão. Esses tipos de convenções transportam a forma como a informação de término do serviço é expressa (conforme explorado no Capítulo 23).
Não existe uma abordagem de versão exclusiva para todos. Como o controle de versão representa uma fase relacionada à governança no ciclo de vida geral de um serviço, é uma prática sujeita às convenções, preferências e requisitos que são distintos para qualquer empresa.
Mesmo que não haja uma técnica de versão de fato para o WSDL, XML Schema e WS-Policy, que inclui contratos de serviços da Web, surgiu uma série de abordagens de controle de controle comuns e recomendadas, cada uma com seus próprios benefícios e compensações.
Neste capítulo, vamos selecionar as três estratégias conhecidas:
Estrito - Quaisquer alterações compatíveis ou incompatíveis resultam em uma nova versão do contrato de serviço. Esta abordagem não suporta compatibilidade para trás ou para frente.
Flexível - Qualquer alteração incompatível resulta em uma nova versão do contrato de serviço e o contrato é projetado para oferecer suporte à compatibilidade com versões anteriores, mas não à compatibilidade com versões futuras.
Loose - Qualquer alteração incompatível resulta em uma nova versão do contrato de serviço e o contrato é projetado para suportar compatibilidade com versões anteriores e compatibilidade com o futuro.
Essas estratégias são explicadas individualmente nas próximas seções e referenciadas nos demais capítulos.
Estratégia # 1: Estratégia Estrita (Nova Mudança, Novo Contrato)
A abordagem mais simples para a versão do contrato de serviço da Web é exigir que uma nova versão de um contrato seja emitida sempre que qualquer tipo de alteração for feita em qualquer parte do contrato.
Isso é comumente implementado alterando o valor de espaço de nome de destino de uma definição WSDL (e, possivelmente, a definição XML Schema) sempre que uma alteração compatível ou incompatível é feita com o WSDL, XML Schema ou WS-Policy relacionado ao contrato. Namespaces are used for version identification instead of a version attribute because changing the namespace value automatically forces a change in all consumer programs that need to access the new version of the schema that defines the message types.
This "super-strict" approach is not really that practical, but it is the safest and sometimes warranted when there are legal implications to Web service contract modifications, such as when contracts are published for certain inter-organization data exchanges. Because both compatible and incompatible changes will result in a new contract version, this approach supports neither backwards or forwards compatibility.
The benefit of this strategy is that you have full control over the evolution of the service contract, and because backwards and forwards compatibility are intentionally disregarded, you do not need to concern yourself with the impact of any change in particular (because all changes effectively break the contract).
On the downside, by forcing a new namespace upon the contract with each change, you are guaranteeing that all existing service consumers will no longer be compatible with any new version of the contract. Consumers will only be able to continue communicating with the Web service while the old contract remains available alongside the new version or until the consumers themselves are updated to conform to the new contract.
Therefore, this approach will increase the governance burden of individual services and will require careful transitioning strategies. Having two or more versions of the same service co-exist at the same time can become a common requirement for which the supporting service inventory infrastructure needs to be prepared.
Strategy #2: The Flexible Strategy (Backwards Compatibility)
A common approach used to balance practical considerations with an attempt at minimizing the impact of changes to Web service contracts is to allow compatible changes to occur without forcing a new contract version, while not attempting to support forwards compatibility at all.
This means that any backwards-compatible change is considered safe in that it ends up extending or augmenting an established contract without affecting any of the service's existing consumers. A common example of this is adding a new operation to a WSDL definition or adding an optional element declaration to a message's schema definition.
As with the Strict strategy, any change that breaks the existing contract does result in a new contract version, usually implemented by changing the target namespace value of the WSDL definition and potentially also the XML Schema definition.
The primary advantage to this approach is that it can be used to accommodate a variety of changes while consistently retaining the contract's backwards compatibility. However, when compatible changes are made, these changes become permanent and cannot be reversed without introducing an incompatible change. Therefore, a governance process is required during which each proposed change is evaluated so that contracts do not become overly bloated or convoluted. This is an especially important consideration for agnostic services that are heavily reused.
Strategy #3: The Loose Strategy (Backwards and Forwards Compatibility)
As with the previous two approaches, this strategy requires that incompatible changes result in a new service contract version. The difference here is in how service contracts are initially designed.
Instead of accommodating known data exchange requirements, special features from the WSDL, XML Schema, and WS-Policy languages are used to make parts of the contract intrinsically extensible so that they remain able to support a broad range of future, unknown data exchange requirements.
The anyType attribute value provided by the WSDL 2.0 language allows a message to consist of any valid XML document. XML Schema wildcards can be used to allow a range of unknown data to be passed in message definitions. Ignorable policy assertions can be defined to communicate service characteristics that can optionally be acknowledged by future consumers.
These and other features related to forwards compatibility are discussed in upcoming chapters.
The fact that wildcards allow undefined content to be passed through Web service contracts provides a constant opportunity to further expand the range of acceptable message element and data content. On the other hand, the use of wildcards will naturally result in vague and overly coarse service contracts that place the burden of validation on the underlying service logic.
Provided here is a table that broadly summaries how the three strategies compare based on three fundamental characteristics.
Table 1 - A general comparison of the three versioning strategies.
The three characteristics used in this table to form the basis of this comparison are as follows:
Strictness - The rigidity of the contract versioning options. The Strict approach clearly is the most rigid in its versioning rules, while the Loose strategy provides the broadest range of versioning options due to its reliance on wildcards. Governance Impact - The amount of governance burden imposed by a strategy. Both Strict and Loose approaches increase governance impact but for different reasons. The Strict strategy requires the issuance of more new contract versions, which impacts surrounding consumers and infrastructure, while the Loose approach introduces the concept of unknown message sets that need to be separately accommodated through custom programming. Complexity - The overall complexity of the versioning process. Due to the use of wildcards and unknown message data, the Loose strategy has the highest complexity potential, while the straight-forward rules that form the basis of the Strict approach make it the simplest option.
Throughout this comparison, the Flexible strategy provides an approach that represents a consistently average level of strictness, governance effort, and overall complexity.
Each strategy also determines how compatible changes, incompatible changes, and version identifiers are used and applied in support of the rules and conventions of the strategy. Chapters 21, 22, and 23 explore the application of these strategies individually to WSDL definitions, XML Schema definitions, and WS-Policy definitions.

Comments