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.

Conteúdo excluído
Conteúdo excluído
-2

Sim, eu sou inexperiente, não tenho mais de 40 anos na área. Vai ver eu não seja premiado internacionamente, e não tenha trablhado em sistemas usados por milhares de empreaas e até milhões de usuários, we pode ser que eu nunca tenha sido avaliado por programadores muito experientes e de qualidade inquestionável antes, né? Pode ser que eu seja de uma época antiga, onde as pessoas estudavam para falar algo e não aprendi por blogs e vídeos de Youtube, e está meio fora de moda se importar com ciência. Talvez não.

O que está incorreto você pode falar o que é, assim todos aprendem. Precisamos disso porque você tewde atacar as coisas mas não apresenta o certo. Você é aquela pessoa que diz que JS é mais rápido que quase ou qualquer linguagem, especialmente C#, Java, e mais ainda usando frameworks pesados, nem é puro, mas nunca apresentou um indício sequer. Só para citar um exemplo de coisas insanas que já disse.

https://pt.stackoverflow.com/q/17501/101 do tempo que o Stack Overflow era visitado por programadores que sabiam o que estavam fazendo, bons tempos. Clica lá no meu perfil. Enganei toda essa gente, né?

Pode ser que todas essas pessoas estejam erradas em colocar esses assuntos como desconexos, certo? https://www.google.com/search?q=api+framework+library. Eu nem sei como argumentar contra isso, seria como argumentar que a Terra é redonda. Ainda bem que nem quis incluir engine, plataforma e outras coisas que eu mais uns outros inexperientes acham que são coisas relacionadas, pelo menos conceitualmente, em outros aspctos depende.

Você está criticando, e isso em si não seria problema, o que pega é que quase todas as suas críticas são fantasiosas, e o fato de dizer que não é crítica mostra o quão distante está da realidade, e por isso provavelmente, junto com outros indícios de várias postagens, mostra alguém desesperado por atenção, já que os milhões que você tem não estão te fazendo feliz. Se estivesse feliz não precisaria perdewr tempo com os fracassados que não sabem nada que estão aqui. Continue com seus negócios maravilhos, parabéns, e não estou sendo irônico, mas se ainda quer falar de engenharia demostre que sabe algo e não apenas tem um monte de opiniões sem base, o que é um direito de todo mundo, mas é bom deixar isso mais claro para as pessoas que estão aprendendo. E no começo diz que é crítica, depois não é, ou seja, seu tyexto não tem nem pé nem cabeça e projeta isso em mim.

Espero que desta vez se for responder seja uma resposta ao que eu perguntei, imaginando que você consiga fazer alguma interpretação de texto corrta. Estou aqui pedindo pela segunda vez. Então mostre porque ou eu ou você apredemos errado e treinamos o erro, um dos dois vai ter que aprender o certo, então se for eu, me ensine o certo.

Aproveita para arrumar ou reclamar nos links que eu coloquei sobre o assunto, todo mundo deve estar errado e você certo. Boa sorte nessa empreitada, vai ter que enfrentar muita gente qualificada.

Eu não me escondo em um username, eu uso meu nome, não estou brincando na internet e tenho links para meus perfis em vários lugares, então pode me pesquisar se quiser, assim elimina pelo menos uma especulação que você costuma fazer.

Se fizer algo útil para a comunidade eu vou agradecer.

Conteúdo excluído
Conteúdo excluído
-2

Agora você vai postar o correto? Vai ajudar a comunidade ou o comentário é só um hate sem sentido? Eu coloquei links que corroboram o que eu falei, você vai ter fontes que mostram que eu estou errado? Você vai reclamar com todo mundo que considera o mesmo que eu?https://www.google.com/search?q=api+framework+library.

Você não acha que existe a possibilidade de você ter aprendido errado? Ou isso é imposível, todas as outras pessoas é que aprenderam, menos você?

Onde já postei antes: https://pt.stackoverflow.com/q/17501/101.

Depois dos negativos dados acho que não vai postar nada útil, é só fanfarronice em quase todos os comentários que posta.

Conteúdo excluído
1

Nunca contribui com nada, só estraga o trabalho dos outros sem sequer dar um argumento contra. Se acha que tem algo errado poste o certo. E coloque seu nome para não ser confundido com um troll, a não ser que seja um.