Desenvolvimento de APIs: Design First e Code First

Neste artigo você vai ver:

Com a popularidade do desenvolvimento de APIs Rest, surgiu uma grande necessidade no mercado: a integração entre APIs e, consequentemente, a manutenção e a propagação dos contratos envolvidos entre as partes. Chamamos de contrato a comunicação realizada entre duas APIs, onde os dois lados têm acordos de produção e consumo dos dados. 

Informada a menção de contratos, agora temos uma nova abordagem de desenvolvimento de APIs, o chamado Design First. Nele, o provedor da API começa a desenvolver sua API pelo contrato. Esse contrato pode ser revertido para os códigos fonte de uma linguagem e acelerar o trabalho do desenvolvedor na construção de serviços. 

O Contrato, ou o desenho da API, deve ser independente da linguagem de programação ou idioma e, impreterivelmente, ser legível por humanos e máquinas. Isso para otimizar a adoção e ganhar interoperabilidade entre os aplicativos em torno da API. 

Um contrato de API, na especificação OpenAPI (Swagger) seria algo como o exemplo a seguir:

<p> CODE: https://gist.github.com/klyfftoledozup/905782afa584b6488c1553084c1a6c0f.js</p>

Abordagens sobre Desenvolvimento de API

Design First vs Code First

Primeiro o Código (Code First): Com base no plano da regra de negócio definida, a API é codificada diretamente pela equipe de desenvolvimento e, a partir do código, é criada a documentação de contrato que deve ser legível por humanos e máquinas, como um documento Swagger/OpenAPI.

Primeiro o Design (Design First): A regra ou plano de negócios é primeiramente convertida em um Contrato legível por humanos e máquinas e descrita em um formato aberto, como o próprio Swagger e OpenAPI. A partir deste Contrato, são gerados os códigos de Provider e Consumer (Server e Client).

Falando sobre ambas as escolas de pensamento, para desenvolvimento de API, tanto Design e Code first têm em seu cerne o Contrato — ou a geração e, principalmente, a governança do Contrato.

Na abordagem Code first, e que é comum, o desenvolvimento do código acontece logo após o estabelecimento dos requisitos e regras de negócio. Isso porque o código, normalmente o Provider/Server, é escrito antes e, então, é a partir dele (o código) que são gerados o Contrato e a Documentação de API. Esta é passada para quem vai implementar o Consumer/Client. Em seguida, é realizado algum tipo de governança, normalmente de forma desconectada e de difícil manutenção ou reuso, visto que o contrato pode ser alterado no código inicial. Isso acontece sem que o consumidor saiba sobre as mudanças ou, de fato, qual o Contrato da integração em dado momento.

Já na escola que aborda o Design First, é defendida a idéia de que, antes de escrever qualquer linha de código, deve ser feito o desenho e a definição do Contrato da API. Essa linha de pensamento é deveras nova, visto que só pensamos no desenho depois de lutar por alguns anos para manter a interoperabilidade e governança entre nossas muitas APIs. Este movimento tem ganhando força rapidamente, especialmente com o uso dos formatos de descrição da API. 

Para entender melhor as duas abordagens, vejamos o processo geral seguido durante o ciclo de vida da API: Como qualquer produto, o conceito da API começa com a equipe de negócios identificando uma oportunidade. A oportunidade é analisada e um plano de capitalização é criado em um documento de texto por estrategistas, analistas e outras pessoas de negócios. Este documento é então repassado à equipe de desenvolvimento, que é quem permite o plano assumir alguma forma tangível.

No gráfico a seguir, ambas as abordagens podem ser vistas de forma simples.

Escolhendo a abordagem correta

Existem vantagens e desvantagens associadas às duas abordagens. No final do dia, a escolha da abordagem correta se resume às necessidades imediatas, estratégicas e tecnológicas, que você deseja resolver com suas APIs. Vamos mergulhar em quando e por que você escolheria a abordagem Design First ou Code First.

Abordagem de Design First

Uma API bem projetada pode fazer maravilhas pela adoção e consumo de suas APIs. E um bom design pode ser melhor alcançado com a abordagem Design First — principalmente se a estratégia de negócio do que você está provendo envolver alta adoção de consumidores diversificados que se integram à sua API. Nisso, será importante uma boa experiência do desenvolvedor.

Um design eficaz da API ajuda seus consumidores finais a entender rapidamente os recursos e as propostas de valor da sua API, reduzindo o tempo necessário para sua integração com a API, aumentando a probabilidade de ter maior valor de reutilização e envolvimento.

A abordagem de Design First é uma excelente oportunidade para colher feedbacks importantes. A possibilidade dos clientes terem acesso a mocks e documentação antes do código permite que eles testem as interfaces e apresentem, de antemão, sua satisfação ou rejeição ao projeto.

É comum que mocks sejam subestimados. Porém, muitas vezes, esforço e tempo são gastos para construir APIs que não fazem sentido para os clientes, resultando em retrabalho e construção de novas versões.

A identificação de falhas no projeto, antes da implementação do código, reduzirá substancialmente seu custo e tempo de implementação.

Apesar dos benefícios citados, esta abordagem está longe de ser perfeita. Não há uma etapa bem definida de projeto (design). O projeto possui um ciclo de vida circular e irá perdurar enquanto o projeto existir. O projeto é um ser vivo que evolui e se transforma. Manter os clientes atualizados das alterações e evoluções, para então novamente validá-las, é um grande desafio.

Ao entregar APIs de missão crítica

O maior motivo para a abordagem Design First é quando o público-alvo da sua API são clientes ou parceiros externos. Nesse caso, sua API é um canal de distribuição essencial que seus clientes finais podem usar para consumir os serviços que você fornece, e um bom design é fundamental para a satisfação do cliente. Essas APIs desempenham um papel crítico na representação dos serviços da sua organização, especialmente em um ecossistema omni-channel, onde a consistência nas informações e o consumo sem problemas é um importante indicador do sucesso dos negócios.

Garantir uma boa comunicação

O contrato da API pode atuar como o rascunho central que mantém todos os membros da sua equipe alinhados com os objetivos da sua API e com a exposição dos recursos dela. A identificação de bugs e problemas na arquitetura da API com sua equipe fica mais fácil com a inspeção de um design legível por humanos. Detectar problemas no design, antes de escrever qualquer código, é uma abordagem muito mais eficiente e simplificada do que fazê-lo depois que a implementação já estiver em vigor.    

Abordagem de Code First

É utilizada especialmente quando a entrega é importante. Os desenvolvedores podem começar a implementar a API muito mais rapidamente se começarem a codificá-la diretamente no documento de requisitos. Isso é importante se sua estratégia de entrada no mercado enfatizar velocidade e agilidade como fatores importantes para o sucesso do programa API. O fato de a automação ser muito mais fácil na abordagem de Code First ajuda a fortalecer esse caso, com muitas bibliotecas suportando código do servidor de andaimes, testes funcionais e automação de implantação.

Entretanto, ao priorizar o código fonte e estabelecer que a documentação seja criada quando houver tempo, pode significar que essa documentação nunca venha a existir ou, no mínimo, que seja fornecida tardiamente.

A ausência de documentação pode acarretar vários problemas que, de uma forma ou de outra, irão consumir tempo e dinheiro. São problemas como recursos duplicados ou novas versões dos existentes – simplesmente por não conhecê-los ou não compreender seu funcionamento –, ou erros de integração devido a documentação desatualizada, todos os quais são muito comuns.

Ao desenvolver APIs internas

A abordagem Code First oferece velocidade, automação e complexidade de processo reduzida, ao custo de uma boa experiência do desenvolvedor. Se a API for consumida apenas pela equipe ou empresa de pequeno porte que a está montando, a abordagem Code First é uma solução prática. Isso é especialmente verdadeiro se a API desenvolvida for pequena, com apenas alguns pontos finais, que serão usados ​​apenas internamente.

Resumo sobre as Abordagens

Agora fica claro que em ambas as abordagens existem pontos positivos e negativos — alguns até críticos. A abordagem adotada para o desenvolvimento de suas APIs é vital para determinar como elas são consumidas e mantidas, como será a governança e o reuso das APIs.
Para a escolha da abordagem correta, pergunte-se sempre:

  • Quem são os consumidores finais da sua API? Internos ou Externos?
  • Devo me preocupar com seguir padrões abertos?
  • Que necessidades ou problemas meus consumidores têm em outras integrações? 
  • Qual problema sua API está resolvendo para o Consumidor?

Referências

https://medium.com/@__xuorig__/some-thoughts-on-api-design-first-approaches-376f3de7c34f

https://www.visual-paradigm.com/guide/development/code-first-vs-design-first/
https://www.opus-software.com.br/o-que-e-api-design-first/

https://blog.restcase.com/api-development-with-design-first-approach/
https://swagger.io/solutions/api-design/
5f91862d90512945b4703c83_Klyff-Perfil
Tech Lead
Apaixonado por tecnologia, Java fanboy à 20 anos, Sempre em busca de novos aprendizados e adoro compartilhar conhecimento.

Artigos relacionados

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.