Executando verificação de segurança...
2

Qual é a diferença de API, biblioteca e framework?

Fui olhar a definição encontrada na Wikipedia em inglês para os termos API, Library e Framework. "Só para variar" em inglês é uma definição melhor.

API

Lá fica claro que uma API é um conceito mais abstrato que define formas de executar uma tarefa específica. É a maneira que o seu código se relaciona com uma biblioteca. Algumas respostas passam a impressão (não necessariamente afirmam) que API é para acessar serviços externos a aplicação, e frequentemente isto é verdade. Se fosse sempre verdadeiro, "como manipular uma string" não seria uma API, o que é. Muita gente usa o termo API para outra coisa relacionada que é webservices 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. Claro que não há uma relação obrigatória com a documentação. É possível ter uma API (porca) sem documentação. E a documentação efetiva de uma biblioteca será próxima mas não necessariamente igual a API. A API é um conjunto de regras para realizar uma tarefa. Ela trata de comportamentos possíveis. Ela é o contrato.

Uma API costuma ser estável, especialmente quando ela é de livre uso publicamente. Apesar de incomum ela pode ter partes documentadas como instáveis (mutáveis), o que exige muito cuidado no seu uso.

Em alguns casos uma API pode documentar alguns detalhes de como deve ser a implementação para garantir que alguns objetivos sejam alcançados.

A API é mais uma especificação e não uma implementação.

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.

O termo biblioteca pode ser considerado uma 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.

As bibliotecas podem ser externas, que é o caso de serviços web. Esta é uma forma comum hoje em dia para evitar pirataria, já que muitas aplicações são web. Pode ter algumas vantagens, mas também possui muitas desvantagens.

Framework

Um framework normalmente é um conjunto de bibliotecas para conseguir executar uma operação maior. É 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. Ele costuma dar consistência a um conjunto de bibliotecas (pena que acontece o oposto em alguns casos).

O framework costuma "tomar conta" 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.

Um framework chama você. É um estilo de vida. Seu projeto se compromete com ele.

Frameworks 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. Frequentemente são confundidos, de forma certa ou errada, como um conjunto de classes.

Algumas vezes o termo é usado para determinar um conjunto de arquivos de bibliotecas de códigos binários, ou fontes, ou até outros recursos para a aplicação que são relacionados.

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. Se isto é bom ou ruim deixo para você decidir.

Lib X FW

Toolkits e SDKs

Ainda existem os toolkits que podem ser confundidos com frameworks mas funcionam de forma mais livre, eles são mais como bibliotecas funcionando em conjunto, mas de uma maneira tradicional onde você chama o que precisa.

Existem também 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 além de documentação e exemplos de códigos que ajudam a usar a biblioteca adequadamente.

Conclusão

Na maior parte dos tempo os termos podem ser intercambiáveis sem causar grande problema. Todo mundo entende essas três coisas como um conjunto de códigos prontos para alcançar algum objetivo (mesmo que não seja exatamente bem isto em nos três casos).

Mas quando você está definindo algo mais formal, quando explica para alguém detalhes de um projeto, é melhor usar os termos corretos para dar melhor entendimento. Claro que se o interlocutor não sabe os termos corretos, a conversa fica truncada de qualquer jeito. Aí você manda o sujeito vir aqui ler isto :)

Algumas definições e imagens eu tirei dessas respostas no SO.

Coloquei no GitHub para referência futura.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

Carregando publicação patrocinada...
-4
2

API (Interface de Programação de Aplicações): Imagine que você tem um robô de brinquedo que pode dançar, cantar e acender luzes. A API seria como um controle remoto que permite dizer ao robô o que fazer, sem precisar saber como ele funciona por dentro. Na programação, uma API é um conjunto de regras que permite que diferentes programas conversem entre si e usem as funções uns dos outros.​

Biblioteca: Pense em uma caixa de ferramentas cheia de peças de LEGO especiais, como rodas, portas e janelas. Essas peças ajudam você a construir algo mais rápido e fácil. Na programação, uma biblioteca é um conjunto de códigos prontos que os programadores podem usar para adicionar funcionalidades aos seus programas, sem precisar criar tudo do zero.​

Framework: Agora, imagine que você tem um kit de construção de uma cidade, com ruas, prédios e parques já planejados. Você pode seguir esse plano e adicionar seus próprios detalhes para completar a cidade. Um framework é parecido: é uma estrutura básica que já vem pronta, com regras e direções, que ajuda os programadores a desenvolver aplicativos de forma mais organizada e rápida.