Skip to content

Instantly share code, notes, and snippets.

@gustavo-freitas
Created March 27, 2016 23:41
Show Gist options
  • Save gustavo-freitas/d16dd333bb3b61885925 to your computer and use it in GitHub Desktop.
Save gustavo-freitas/d16dd333bb3b61885925 to your computer and use it in GitHub Desktop.

###Consumer Driven Contracts (http://martinfowler.com/articles/consumerDrivenContracts.html)

####Como evoluir um serviço?

Um exemplo: Product Search, serviço que permite procurar produtos. Duas aplicações consomem esse serviço. Essas aplicações utilizam [XSD] (https://en.wikipedia.org/wiki/XML_Schema_(W3C)) para validar a resposta do serviço antes de realizar qualquer processamento. Um terceiro consumidor precisa de um novo campo na resposta do serviço já existente. Duas abordagens para implementar essa alteração:

  1. Provedor altera o esquema e os consumidores terão que atualizar a cópia dos seus esquemas para validar corretamente a resposta do serviço, necessitando mudanças de todos os envolvidos (provedor e os três consumidores).

  2. Adicionar uma nova operação ao serviço, com um novo esquema. O custo das mudanças fica todo do lado do provedor, mas o serviço irá ficar mais complexo e difícil de manter.

####Visão Geral

Consumer Driven Contracts é uma abordagem para desenvolver/evoluir serviços, onde cada consumidor detalha um conjunto de expectativas a um provedor através de um contrato. Isso garante que exista um entendimento maior de como mudanças efetuadas no lado do serviço, provedor, podem alterar o funcionamento dos consumidores. Assim, os provedores podem sempre ter clareza na hora de atualizar seus serviços, verificando se uma determinada alteração em um serviço em questão pode "quebrar" um consumidor.

  • Consumidores - times, projetos, aplicações que consumem informações de um serviço
  • Provedores - times, projetos, aplicações que fornecem um serviço

Contratos de Provedores

Detalha todos as funcionalidades de negócio que aquele provedor pode oferecer. Nesse tipo de contrato podem aparecer inúmeros elementos como schemas e policies, mas, essencialmente esses elementos são qualquer artefato que influencie diretamente a estratégia de evolução de um serviço.

Contratos de Consumidores

Expectativas dos consumidores em relação ao provedor. Com esse tipo de contrato, o provedor sabe exatamente o que os consumidores esperam.

Contratos "Consumer-Driven"

Contratos de provedores que surgem somente através da necessidade dos consumidores. Se a necessidade dos consumidores é alterada, esses contratos são atualizados também.

####Detalhes de uma possível implementação

É recomendado utilizar dois tipos de contrato quando implementando esse padrão: contratos do tipo "Consumer-Driven" e contratos de consumidor. Entretanto, nenhum tipo de estrutura é especificado para a criação desses contratos. Tabelas e planilhas são mencionadas como possíveis alternativas. Testes automatizados são mencionados para garantir repetibilidade e execuções em ferramentas de integração contínua.

####Benefícios

Dois benefícios claros quando utilizando contratos do tipo "Consumer-Driven":

  • Foco no valor de negócio que o serviço oferece. Um serviço só tem valor se é utilizado. Evoluir um serviço significa que essas alterações serão utilizadas e trarão valor para o negócio. Dessa maneira, provedores possuem somente um contrato enxuto que faz sentido para o negócio (consumidores).
  • Entendimento profundo e feedback rápido para alterar planos, permitindo que o impacto de qualquer alteração necessária seja clara em relação as aplicações consumidoras. Isso pode ser utilizado para se ter conversas mais eficientes com consumidores. Além disso, esses contratos podem vir a ser utilizados como um repositório de conhecimento, documentação viva.

####Leituras Interessantes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment