226

Me parecem termos muito próximos e eventualmente vejo textos que trocam um pelo outro, como se em algumas determinadas situações suas definições se sobreponham.

Quais seriam as definições técnicas que permitem distinguir o que é API, biblioteca e framework?

Em quais situações é permitido intercambiar os termos sem ferir sua definição técnica?

6 Respostas 6

200

Para complementar, ajudar ou confundir um pouco mais :) e ser ligeiramente dissonante. Os termos podem ser definidos diferentemente dependendo do contexto.

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.

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.

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

Você não perguntou mas 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 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 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.

7
  • 7
    É verdade, toolkit e SDK também podem entrar na "mistura" desses conceitos. Gostei que tenha citado.
    – Math
    Commented 29/05/2014 às 16:36
  • 6
    Aceitei essa resposta por considerar ela a mais didática.
    – Math
    Commented 6/06/2014 às 11:29
  • 5
    +1 pelo "Estilo de vida"
    – Josh
    Commented 13/12/2014 às 12:34
  • 2
    @bigown estou tentando entender a aplicação real desse termo, e para não abrir outra questão cá estou: onde a API se encontra no código ? Se é que existe nexo na minha pergunta... Tipo, ela é uma parte do código, ela é o código + documentação, o que compõem a API ?
    – MagicHat
    Commented 30/07/2016 às 6:47
  • 3
    @MagicHat A grosso modo, o que é público no código (feito com consciência) acaba sendo parte da API, afinal é um contrato público para uso. Mas se não for documentado não podemos considerar como a API, pode ser público por acaso.
    – Maniero
    Commented 30/07/2016 às 11:14
83

API

API(Application Programming Interface - Interface entre Aplicativo e programação) é um conjunto de instruções e padrões de programação para acesso a um aplicativo de software. Uma empresa de software lança sua API para o público de modo que outros criadores de software possam desenvolver produtos acionados por esse serviço.

Pegue como exemplo o MercadoLivre, que disponibiliza a sua API de modo que desenvolvedores de sites pudessem obter acesso mais fácil a informações sobre seus produtos. Com a utilização da API, um site independente pode postar links diretamente para produtos da MercadoLivre, com preços atualizados e uma opção que permite compra imediata.

Com as APIs, os aplicativos conversam uns com os outros sem conhecimento e/ou intervenção dos usuários. Quando você compra ingressos de cinema online, o site de ingressos usa uma API para enviar a sua informação de cartão de crédito a um aplicativo remoto que verifica se os dados procedem. Assim que o pagamento é confirmado, o aplicativo remoto envia uma resposta ao site de ingressos liberando a emissão dos ingressos adquiridos.

Um outro exemplo, a API do Windows proporciona aos desenvolvedores acessar coisas como:

  1. Sistema de arquivos(ie CreateFile, DeleteFile, GetFileSize),
  2. Gerenciamento dos Dispositivos(ie SetupDiEnumDeviceInfo, DiShowUpdateDevice),
  3. Registro do Windows(ie RegCreateKeyEx, RegDeleteKeyEx),
  4. Shell(ie CreateProfile, GetAllUsersProfileDirectory, ShellExecuteEx).

inserir a descrição da imagem aqui

Biblioteca

Uma Biblioteca é uma coleção de implementações(ie funções, classes, procedimentos), que tem uma interface bem definida pelo qual o comportamento é invocado. Além disso, o comportamento é fornecido para reutilização por vários programas independentes. Um programa invoca o comportamento fornecidos pela biblioteca através de um mecanismo da linguagem. O que distingue a chamada como sendo a uma biblioteca vs outra função no mesmo programa, é a maneira que o código é organizado no sistema.

inserir a descrição da imagem aqui

Framework

Um Framework é muitas vezes uma estrutura em camadas, indicando que tipo de programas podem ou devem ser construídos e como eles se inter-relacionam. Algumas estruturas de sistemas também incluem programas reais, especificam interfaces de programação ou oferecer ferramentas de programação para usar os Frameworks.

inserir a descrição da imagem aqui

Nota: Imagem retirada do site Dot Net Tricks

Um Framework pode ser para um conjunto de funções dentro de um sistema e como elas se inter-relacionam, as camadas de um sistema operacional, as camadas de um subsistema de aplicação, como a comunicação deve ser padronizado em algum nível de uma rede, e assim por diante.

1
  • 3
    O link da API do Windows foi muito oportuno
    – LCarvalho
    Commented 1/09/2017 às 1:54
45

As definições formais já estão em outras respostas, então vou tentar uma abordagem mais pragmática.

API em geral é o conjunto de interfaces, classes e métodos disponíveis para você usar em um framework, ferramenta ou serviço. Um Web Service REST ou SOAP que possui um conjunto de serviços disponíveis pode ser chamado de API. O padrão de arquitetura JEE é composto por várias APIs (Servlets, EJB, etc.). Cada Javadoc documenta a API do respectivo projeto.

Pense num Framework como uma estrutura pré-fabricada que você "compra", monta as pecinhas segundo o manual, preenche os miolos com o que faltar e constrói o que você precisa. Cada um atenderá escopos diferentes, mas todos tentarão resolver problemas comuns que o desenvolvedor enfrenta. Por exemplo, um framework web lhe proporcionará meios para resolver todos os pontos mais comuns de uma arquitetura web: listagem de dados, internacionalização, formatação, lógica de controle, concorrência, escalabilidade e por aí vai.

Por outro lado, existe também o conceito de framework de trabalho que vai além da tecnologia em si. Ele propõe uma forma de trabalho baseado em determinados conceitos. Exemplos são o RUP e o Scrum, que podem ser chamados de frameworks de processo. O conceito de MapReduce usado em Big Data também é um tipo de framework que define como se faz processamento paralelo e distribuído. A partir dos conceitos, então se pode construir APIs, ferramentas, bibliotecas e mesmo frameworks que implementam os conceitos envolvidos.

Uma biblioteca poderia ser bem definida como um conjunto de classes ou rotinas que auxiliam em tarefas comuns. Dizem que todos os bons programadores tem seu próprio conjunto de bibliotecas.

Finalmente, considere que todos esses termos estão interligados:

  • Uma API pode ser definida por uma instituição (W3C, JCP) e implementada por ferramentas, frameworks e bibliotecas.
  • Um framework pode implementar e disponibilizar uma ou mais APIs e usar várias bibliotecas internas ou de terceiros.
  • Uma biblioteca tem sua própria API e pode trabalhar em conjunto com vários frameworks.

Em teoria, é errado usar os termos de forma intercambiável, pois há sutis diferenças dependendo contexto. Na prática isso fica um tanto borrado, principalmente quando o usuário não conhece em detalhes a biblioteca, ferramenta ou framework.

Mesmo assim, alguém pode dizer sem nenhum problema que usou a API de formatação do framework Spring ou ainda a biblioteca de rotinas úteis que estão presentes framework Spring para trabalhar com listas (Collections).

Abstraindo: se um framework implementa uma API, eu posso dizer tanto que estou usando o framework quanto a API, pois no caso são a mesma "pessoa".

3
  • 1
    Logo, todo API é uma biblioteca? Por exemplo JodaTime é uma biblioteca para trabalhar com datas e no máximo se comunica com outras bibliotecas mas não serve para implementar um serviço, e Servlets são bibliotecas para utilizar o framework web, logo, uma API?
    – Math
    Commented 29/05/2014 às 12:48
  • 3
    @Math Toda biblioteca é uma API. Servlets não são bibliotecas, é uma API pois consiste num conjunto de interfaces e classes que você implementa para construir sua aplicação. Mas falando em JSPs podemos dizer que as taglibs são bibliotecas de uso comum que implentam uma API definida no padrão JEE ou mesmo taglibs adicionais definidas por terceiros.
    – utluiz
    Commented 29/05/2014 às 12:52
  • 2
    Uma biblioteca tem uma API (Application Programming Interface). Do mesmo jeito que um programa tem uma interface com o usuário, mas o programa não é apenas a sua tela; uma biblioteca tem uma interface (nomes de funções, tipos de parâmetros, etc.) para acessar a funcionalidade interna, mas a biblioteca não é a API. Algumas vezes as pessoas definem uma API comum para ser usada por várias bibliotecas, por exemplo.
    – marcus
    Commented 29/05/2014 às 19:14
37

De acordo com a Wikipédia:

API

API, de Application Programming Interface (ou Interface de Programação de Aplicativos) é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades por aplicativos que não pretendem envolver-se em detalhes da implementação do software, mas apenas usar seus serviços

Framework

Um framework (ou arcabouço), em desenvolvimento de software, é uma abstração que une códigos comuns entre vários projetos de software 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, chamado de Inversão de Controle.

Mas você com certeza já procurou pelas definições.

Uma API basicamente é uma Aplicação traduzida num serviço direcionado, através do qual outras Aplicações, completas ou não, possam existir. Tudo isso independente da linguagem pois, como toda Interface (não visual, claro), tem como função permitir ao programador compreender uma arquitetura sem conhecer sua implementação.

Perceba que não listei a definição de Biblioteca pois ela está diretamente relacionada à um Framework, mesmo que ela possa não fazer parte de um framework, com todas suas regras e diretrizes.

Muitas vezes uma biblioteca é apenas um grupo de funções de múltiplos arquivos que permutam soluções para resolver um problema específico (ver abaixo).

E um Framework pode se classificar em dois grupos: os de domínio específico e os chamados full-stack que nada mais são do que vários frameworks de domínio específico parte de algo maior, podendo, inclusive, compartilhar dependências.

E todo framework, seja do tipo que for, possui sua própria API, com as assinaturas de seus métodos os quais, como dito, permite ao programador utilizá-lo sem abrir o código.

Idealmente não se deve misturar as definições para não causar confusão ao interlocutor, óbvio, mas, por exemplo, usar o termo framework tanto para domínio específico como full stack é inofensivo pois de todo jeito são frameworks.

Uma simples biblioteca também é um framework, porém de domínio específico, um termo nem sempre conhecido que pode resultar numa afirmação errônea, porém inofensiva.

Já API é diferente. Apesar de intrinsecamente relacionada ela representa uma coisa completamente diferente.

2
  • 2
    Me levantaram algumas dúvidas lendo seu texto, toda API é uma biblioteca, entretanto nem toda biblioteca é uma API? Uma API então seria uma biblioteca que interfaceia dois serviços? E um Framework é um conjunto de bibliotecas?
    – Math
    Commented 29/05/2014 às 12:37
  • 3
    Não vejo uma API como uma biblioteca mas sim, toda biblioteca tem sua API, mesmo que muitos "programadores" (aqueles caras que acham que programam) não verem isso. E sim, um framework é um conjunto de bibliotecas, todas elas codificadas num mesmo padrão, estruturadas de uma mesma forma, regradas sob um mesmo modelo padronizado e etc. Commented 29/05/2014 às 14:24
34

API

Application Programming Interface ou Interface de Programação de Aplicativos. Você usará uma API para acessar um programa ou serviço externo. Por exemplo: tu pode criar um aplicativo de terceiro para o Facebook, Twitter ou mesmo o StackOverflow usando suas respectivas APIs. Há funcionalidades de sistemas operacionais, como o Windows e Android, que também estão disponíveis via APIs.

Biblioteca

Usado para algo que atende uma necessidade específica. Por exemplo, converter HTML em PDF, ORM (Object Relational Mapping), entre muitos outros.

Framework

Usado para algo muito mais amplo. Pense na quantidade de coisas que um framework web faz: rotas, ORM, sessão, versionamento de banco de dados, geração de HTML, gerenciamento de usuários, entre muitas outras coisas. Em alguns casos, frameworks são feitos a partir de várias bibliotecas funcionando em conjunto.

Ainda sobre API

Como foi dito nas outras respostas, tanto bibliotecas quanto frameworks costumam ter uma API, ou seja, uma interface documentada para que os programadores consigam usá-las. Neste caso você está usando tanto a biblioteca/framework como sua respectiva API. Como exemplo veja a documentação desta API da biblioteca ActiveRecord.

0
18

Explicação resumida:

API

Serve para integrar sistemas. Alguém disponibiliza uma API para que você consiga integrar seu sistema com o sistema que disponibilizou a API. Ou você cria e disponibiliza uma API caso deseje que alguém integre um sistema com o seu. Em geral, pode ser um conjunto de classes ou maneiras de como acessar um webservice rest ou soap.

Biblioteca

Conjunto de funções agrupadas com a mesma finalidade. É como um canivete suíço, você usa o que precisa, na hora que precisa.

Framework

É um esqueleto para construir aplicações. Você deve obedecer a estrutura de pastas e seguir as práticas definidas pelo framework.

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .