Diferenças entre API, WebService, MicroServiço, Biblioteca e outras coisinhas…
Muitas vezes vemos um monte de nomes, para coisas que parecem ser a mesma coisa, na verdade, analisamos e nem sempre encontramos uma definição padrão, alguns autores definem de uma maneira, outros de outra e as vezes até conflitam, e vemos o mercado de trabalho e queremos entender melhor. Basicamente a ideia desse post é ajudar a entender o conceito, e claro, abrir um espaço para uma discussão sobre isso.
API
Significa Application Proggramming Interface (Interface de Programação de Aplicações – em português) é um conjunto de rotinas bem especificadas, que dizem como você pode utilizar um serviço fornecido por um software sem necessariamente entrar em detalhes técnicos de seu funcionamento. Pode ser definida também, como um conjunto de normas que possibilita a comunicação entre plataformas através de uma série de padrões e protocolos.
Uma API é um conceito muito mais abstrato, e que define formas de executar uma tarefa específica, e de interoperar diversos softwares diferentes, aproveitando as soluções já encontradas. Não necessariamente uma API é para acesso externo, porém, geralmente o é. Muita gente usa o termo API para definir erroneamente um web-service ou algo semelhante, onde obviamente tem uma API, mas o provimento de serviços não é a API em si.
De uma certa forma podemos dizer que a API é a documentação que determina como um programador pode realizar uma tarefa através de uma biblioteca de software. Claro que não há uma relação obrigatória com a documentação. É possível ter uma API sem documentação, porém, sem que seja possível identificar claramente como é feito essa relação entre os sistemas, fica muito dificil utiliza-la. Se resumidamente uma API é um conjunto de regras para realizar uma tarefa, sem saber como são essas regras não tem como entrar nesse jogo.
Em alguns casos uma API pode documentar alguns detalhes de como deve ser a implementação para garantir que alguns objetivos sejam alcançados.Uma API é mais uma especificação do que uma implementação propriamente dita.
Por exemplo, um sistema operacional possui uma grande quantidade de funções na sua API, que permitem ao programador criar janelas, desenhar a interface, ter acesso a arquivos, criptografar dados dados, entre uma infinidade de acessos. Seu objetivo é abstrair os elementos criando uma interface padrão para a troca de mensagens entre componentes de software. Por exemplo, apps desenvolvidos para celulares Android e iPhone (iOS) são criados a partir de padrões definidos e disponibilizados pelas APIs de cada sistema operacional.
Metaforicamente, podemos pensar no que é API como um garçom. Quando estamos em um restaurante, buscamos o que desejamos no menu e solicitamos ao garçom. O garçom encaminha esse pedido à cozinha, que prepara o pedido. No fim, o garçom traz o prato pronto até a gente. Não temos detalhes de como esse prato foi preparado, apenas recebemos o que solicitamos.
WebService
Web Service é uma solução utilizada na integração de sistemas e na comunicação entre aplicações diferentes. Baseada em protocolos de comunicação, permite que aplicações desenvolvidas em ambientes totalmente diferentes possam se comunicar. Os Web Services são componentes que permitem às aplicações enviar e receber dados. Cada aplicação pode ter a sua própria “linguagem”, que é traduzida para uma linguagem universal, um formato intermediário como XML, Json, CSV entre centenas de outros.
Web Services podem trazer agilidade para os processos e eficiência na comunicação entre cadeias de produção ou de logística, além de integração e iteração entre tecnologias diferentes. Toda e qualquer comunicação entre sistemas passa a ser dinâmica e principalmente segura, pois não há intervenção humana.
Em suma, ele faz com que os recursos da aplicação do software que disponibiliza o serviço estejam disponíveis sobre a rede de forma normalizada, e disponível a uma gama diferentes de aplicações.O objetivo final é a comunicação de aplicações através da Internet. Por exemplo, através do web service um fornecedor pode disponibilizar seus estoques para serem comercializados em diversos pontos de venda diferentes, e os pedidos podem ser disparados diretamente ao seu ERP mantendo um controle preciso e centralizado.
Uma característica é a completa autonomia em relação a outros serviços. Isto significa que cada serviço é responsável por seu próprio domínio, o que tipicamente significa limitar seu alcance para uma função de negócio específica, sem depender de terceiros.
Uma curiosidade é que, embora todos os web services sejam considerados APIs e tidos como predecessores desse modelo de integração, nem toda API pode ser considerada como um web service, pois pode não necessariamente ser usada no contexto da Web. Tanto APIs quanto web services podem operar dentro de máquinas ou redes, mas possuem algumas diferenças estruturais.
MicroServiços
Microsserviços são um tipo inovador de arquitetura de software, que consiste em construir aplicações desmembrando-as em serviços independentes. Ao invés de ter um WebService com 500 endpoints diferentes, agora temos 100 micro serviços com 5 endpoints cada.
Diferentemente da abordagem tradicional monolítica em que toda a aplicação é criada como um único bloco, os microsserviços são componentes separados que trabalham juntos para realizar as mesmas tarefas.
Em resumo, eles usam as definições de API, para serem acessados, e tem um conceito similar aos webservices, porém, são responsáveis somente por uma parte da aplicação. Esse modelo, permite, por exemplo empregar tecnologias diferentes onde sejam mais adaptáveis, por exemplo um microserviço pode rodar em python para fazer análise de dados, e estar integrado a outro rodando em C# para integração com o ambiente de estoque, e cada qual usa o seu grupo de tecnologias e tem suas próprias formas de tratar suas entradas e saídas.
Este tipo de API está se tornando um importante personagem na tecnologia, pois permite que empresas e setores possam criar soluções muito específicas e mante-las e fornecer essa funcionalidade para um grande número de clientes. Por exemplo hoje, empresas de telecom passam a oferecer um microsserviço para envio de SMS ou uma empresa se torna especializada em fornecer dados geográficos para provedores logísticos de rastreamento de mercadorias, outra pode oferecer uma camada específica para autenticação de usuários e por ai vai.
Com os microsserviços, suas equipes e tarefas rotineiras podem se tornar mais eficientes por meio do desenvolvimento distribuído. Além disso, é possível desenvolver vários microsserviços ao mesmo tempo. Isso significa que você pode ter mais desenvolvedores trabalhando simultaneamente na mesma aplicação, o que resulta em menos tempo gasto com desenvolvimento.
Um dos objetivos é que eles sejam distribuídos, independentes e escaláveis individualmente, ou seja, se um ponto estiver fora de operação todos os demais continuam funcionando de maneira independente.
Framework
É uma abstração que une códigos comuns entre vários projetos de software diferentes provendo uma funcionalidade genérica. Um framework pode atingir uma funcionalidade específica, por configuração, durante a programação de uma aplicação. Ao contrário das bibliotecas, é o framework quem dita o fluxo de controle da aplicação. Ele não se trata de um software executável, mas sim de um modelo de dados para um domínio específico.
É comum um framework encapsular os comportamentos da API em implementações mais complexas, permitindo o seu uso de forma mais flexível, frequentemente através de extensões, configurações e inversões de controle. Como pode ser considerada uma camada em cima da API eventualmente pode simplificá-la em certo sentido.
O framework costuma ser o “DONO” ou “CÃO DE GUARDA” da sua aplicação deixando “portas” para você acessar, o que é importante para o seu objetivo. É comum ter uma grande interdependência entre seus componentes. Por estas duas razões, o framework pode se tornar um fardo quando ele não é bem feito, ou não é adequado ao que o programador precisa, ou quando o programador não sabe bem como usá-lo. O que é muito comum acontecer uma ou mais dessas situações.
Podem ser entendidos como plataformas de desenvolvimento. Eles possuem lacunas que devem ser preenchidas pelo programador para funcionar conforme sua necessidade. Pode ser visto como um esqueleto de uma aplicação.
Exemplos são os sistemas de GUI, de operações web, alguns ORMs, um conjunto de bibliotecas padrão de uma linguagem de programação, implementação de um padrão MVC, etc. Algumas vezes uma biblioteca é ou se torna tão complexa que acaba virando um framework.
Por exemplo, um framework permite que você tenha “ROTINAS” pre determinadas para resolver problemas comuns em sistemas, por exemplo, JQuery, é um framework para simplificar o uso da DOM em navegadores. Bootstrap é para uso com CSS que podem ser reutilizados e adaptados para um amplo controle das classes. Laravel é usado para desenvolvimento de sistemas baseados em web. .NET Core é um Framework focado em portabilidade de sistemas com microsserviços. Hoje existem centenas de milhares de Frameworks cada qual com um proposito de solucionar um problema encapsulando e facilitando a vida dos desenvolvedores.
Biblioteca
A biblioteca normalmente é uma implementação real das regras de uma API. Portanto ela é mais concreta. Assim como a API, você não precisa saber os detalhes da implementação para usá-la. A biblioteca precisa respeitar as regras da API sempre, mas não precisa ter sua implementação estável. A biblioteca costuma ser autossuficiente.
Uma biblioteca pode conter implementações públicas que não fazem parte da API. Usá-las pode trazer risco. Você chama uma biblioteca. É uma ferramenta. Você usa o que precisa.
Até o momento nenhuma resposta tratou do termo biblioteca como forma de organização de códigos binários para o uso com aplicações. Uma biblioteca também é um arquivo executável contendo um conjunto de funções para executar diversas tarefas. .dll ou .so são arquivos de biblioteca para ligação dinâmica na aplicação. .lib ou .a são arquivos de biblioteca para ligação estática na aplicação.
Você pode ter uma biblioteca de manipulação strings, de expressões regulares, de coleções de dados, de manipulação de arquivos, acesso a um banco de dados, manipulação de imagens, etc.
Quando um conjunto maior de funções integrados em diferentes bibliotecas, temos o que chamamos de framework.
Toolkits e SDKs
Você não perguntou mas ainda existem os toolkits que podem ser confundidos com frameworks, e que alguns chamam de micro-framework eles funcionam de forma mais livre, eles são mais como bibliotecas funcionando em conjunto, mas de uma maneira onde você chama o que precisa.
Existem ainda os SDKs. Software Development Kits podem assumir a forma de toolkits ou de frameworks e fornecem tudo o que precisa para programar em cima de uma plataforma (sistema operacional, banco de dados, aplicação, etc.). Estes kits costumam englobar ferramentas adicionais além das bibliotecas, e de documentação e exemplos de códigos que ajudam a usar a biblioteca adequadamente.
Finalizando
Novas tecnologias surgem a todo o momento, e enquanto eu estou escrevendo, ou você lendo, conceitos novos estão sendo criados e padronizados. Usar uma nomenclatura correta evita erros de entendimento comuns quando ambos interlocutores não entendem exatamente os conceitos.
Indiferente da forma, o que diferencia é o uso e aplicabilidade correta de cada cenário, para conceber o todo, ou seja, um software funcional, sem erros e seguro para o escopo da aplicabilidade que foi concebido.