Qual é a diferença entre uma API e um SDK?

174

Eu estava examinando várias APIs e SDKs, quando percebi que não sabia realmente a diferença entre algo chamado API e algo chamado SDK .

Ambos são, conceitualmente, uma maneira de o seu programa interagir e controlar os recursos fornecidos por outro software, seja ele um serviço da Web, um aplicativo de usuário final, um serviço ou daemon do SO ou um kernel driver do dispositivo.

Então, qual é a diferença semântica entre um SDK e uma API?

KeithS
fonte
3
O SDK é um Kit de desenvolvimento, geralmente uma biblioteca do lado do cliente que facilita o uso de uma API. Uma API é apenas a definição de biblioteca / serviço e / ou documentação.
precisa saber é o seguinte
ver também" Biblioteca vs. quadro vs API?
mosquito

Respostas:

175

Eu acho que é mais ou menos como "Todos os SDKs são / contêm APIs, mas nem todas as APIs são SDKs".

Um SDK parece ser um conjunto completo de APIs que permitem executar quase todas as ações necessárias para criar aplicativos. Além disso, um SDK pode incluir outras ferramentas para o desenvolvimento da plataforma / item a que se destina.

Uma API, por outro lado, é apenas uma série de métodos relacionados que podem ser bons para uma finalidade específica.

Como exemplo, o JDK (Java Development Kit) contém a API, bem como os compiladores, tempos de execução e outras ferramentas diversas. A API Java é simplesmente todas as bibliotecas que compõem a linguagem principal com a qual você pode trabalhar imediatamente.

Desduplicador
fonte
7
Gostaria de acrescentar que um SDK é apenas uma amostra de como você interage com a referida API.
The Muffin Man
10
Eu acho que você pode ter invertido esse Nick. Um SDK é um superconjunto de coisas, que contém (entre outras coisas) APIs para interagir com suas bibliotecas (não a própria biblioteca, mas a interface para a biblioteca que um codificador usando a biblioteca usaria).
Danny Staple
7
Um SDK pode incluir uma API, ferramentas, documentação, amostras e tudo o mais necessário.
Gregmac
4
@gregmac Não transmiti esse fato?
Em termos práticos, seria justo dizer que uma API provavelmente conterá apenas definições de interface que as classes devem implementar, enquanto um SDK conterá classes base com a maioria das funcionalidades padrão já programadas?
Ben
85
  • API = Interface de programação de aplicativos
  • SDK = Kit de Desenvolvimento de Software

Portanto, a diferença real é que uma API não é mais ou menos que uma interface para "algum serviço", enquanto um SDK é um conjunto de ferramentas / componentes / classes para uma finalidade específica. De fato, um SDK apresenta uma API para a interface. Mas você pode usar uma API sem ter os componentes subjacentes, por exemplo, quando a API é fornecida por meio de um serviço da web.

Exemplos de APIs:

Exemplos de SDKs:

back2dos
fonte
3
+10 para "você pode usar uma API sem ter os componentes subjacentes". Btw, o segundo link está inoperante .......
Pacerier
24

API → interface documentada (em um determinado momento e para um determinado público. A documentação pode estar incompleta e / ou indisponível para o público em geral e isso pode ser intencional, mas isso não diminui o fato de que deveria ser documentado para terceiros usá-lo.)

SDK → documentação da interface (+ exemplos e ferramentas)

ZJR
fonte
4
Finalmente alguém que menciona documentação!
Gregmac
4
Nem todas as APIs estão documentadas - às vezes você só precisa inspecionar / refletir a interface.
JBRWilkinson
Os "exemplos" não fazem parte da API?
Pacerier 27/08/14
1
@ Pacerier ... absolutamente não. Os exemplos podem fazer parte de uma documentação da API , mas a interface pura pode ser "não documentada" (isto é, a documentação relativa a ela é mantida em segredo para o mundo externo: pense ... idk, microsoft ) enquanto ainda é uma API. É apenas a interface. Funções, classes, chamadas, talvez um protocolo, talvez um formato de arquivo, mas nada mais.
ZJR
17

"SDK" é coletivo em um sentido maior que "API".

Você normalmente encontra apenas um SDK para cobrir uma plataforma inteira. Há um MacOS X SDK e um iOS SDK, por exemplo, e cada um deles contém as APIs para diversas áreas de funcionalidade.

"API" também foi originalmente usado como termo coletivo, e ainda é usado dessa maneira (MAPI, WSAPI etc.), mas geralmente é limitado a alguma tecnologia específica. O escopo implícito na "API" parece ter diminuído ao longo dos anos; as pessoas costumavam falar sobre a "API Mac Toolbox" ou a "API do Windows", ambas obviamente contendo muitas funcionalidades. Atualmente, não é incomum ouvir "API" usada para significar uma única função do sistema; pode-se dizer que uma nova versão de um sistema operacional contém centenas de novas APIs, e o que se quer dizer são centenas de novas chamadas de sistema.

Nenhum dos termos é muito preciso sem algum contexto.

Caleb
fonte
11

O que é API?

API é uma interface que permite que programas de software interajam. Ele define um conjunto de regras que devem ser seguidas pelos programas para se comunicarem. As APIs geralmente especificam como as rotinas, estruturas de dados etc. devem ser definidas para que dois aplicativos se comuniquem. APIs diferem na funcionalidade fornecida por eles. Existem APIs gerais que fornecem funcionalidades de biblioteca de uma linguagem de programação, como a API Java. Também existem APIs que fornecem funcionalidades específicas, como a API do Google Maps. Também existem APIs dependentes da linguagem, que só podem ser usadas por uma linguagem de programação específica. Além disso, existem APIs independentes de idioma que podem ser usadas com várias linguagens de programação. As APIs precisam ser implementadas com muito cuidado, expondo apenas a funcionalidade ou os dados necessários para o exterior, mantendo as outras partes do aplicativo inacessíveis. O uso de APIs se tornou muito popular na internet. Tornou-se muito comum permitir algumas funcionalidades e dados por meio de uma API para o exterior na Web. Essa funcionalidade pode ser combinada para oferecer uma funcionalidade aprimorada aos usuários.

O que é o SDK?

O SDK é um conjunto de ferramentas que podem ser usadas para desenvolver aplicativos de software direcionados a uma plataforma específica. Os SDKs incluem ferramentas, bibliotecas, documentação e código de exemplo que ajudariam um programador a desenvolver um aplicativo. A maioria dos SDKs pode ser baixada da Internet e muitos deles são fornecidos gratuitamente para incentivar os programadores a usar a linguagem de programação do SDK. Alguns SDKs amplamente utilizados são o Java SDK (JDK), que inclui todas as bibliotecas, utilitários de depuração etc., o que tornaria os programas de gravação muito mais fáceis em Java. Os SDKs facilitam a vida de um desenvolvedor de software, pois não há necessidade de procurar componentes / ferramentas compatíveis entre si e todos eles integrados a um único pacote fácil de instalar.

Qual é a diferença entre API e SDK?

API é uma interface que permite que programas de software interajam, enquanto um SDK é um conjunto de ferramentas que podem ser usadas para desenvolver aplicativos de software direcionados a uma plataforma específica. A versão mais simples de um SDK pode ser uma API que contém alguns arquivos necessários para interagir com uma linguagem de programação específica. Portanto, uma API pode ser vista como um SDK simples sem todo o suporte à depuração etc.

chiranjib
fonte
7

Um SDK pode ser nada além de uma API (arquivos para ajudar a interface com outro aplicativo), mas geralmente inclui outro código para ajudar na depuração e em outras partes do seu IDE.

Estou sem acrônimos.

JeffO
fonte
8
Rápido, obtenha mais TLAs!
Mason Wheeler
4
Estou quase pronto para o EIEIO.
Jeffo
5

Tudo mencionado anteriormente é verdade, mas sobre o SDK eu gostaria de acrescentar que um kit de desenvolvimento de software é (ou deveria ser) um pacote realmente completo com (quase) todas as ferramentas necessárias para o processo de desenvolvimento, enquanto a API é "apenas" uma interface para interagir.

Scorchio
fonte
1

Meus dois centavos: acredito que o termo API é frequentemente usado incorretamente.

Uma API é uma interface de programação de aplicativos.

Embora meio que seja um nome estranho, significa que é uma interface . Portanto, um aplicativo pode ter uma API para permitir que outros aplicativos se comuniquem com ele. E um software (por exemplo, uma classe em um sistema OO) pode oferecer uma API para permitir que outros módulos no sistema se comuniquem com ele.

No entanto, muitas vezes o termo API é usado como sinônimo de "biblioteca". Eu não acho que esse seja um uso correto da palavra. Parte da biblioteca é uma API para permitir que o código a use, mas a biblioteca não é uma API.

E um SDK é um tipo de biblioteca, então é aí que a confusão pode estar.

Aviv Cohn
fonte
1
Concordo. Eu provavelmente pararia de dizer que é "incorreto". Este navio navegou e o uso da "API" mudou. Mas eu concordo que a "biblioteca" é muitas vezes uma palavra melhor para o que as pessoas estão chamando de "API"
Harry Madeira
0

Muitas das outras respostas explicam que um SDK é ferramenta , mas nenhuma delas sai diretamente e diz que uma API é uma especificação .

A API do X complementar é todas as informações necessárias para gravar outro componente que irá interagir com o X. Um SDK para o componente X pode conter rotinas de biblioteca que facilitam a gravação desse componente, mas as bibliotecas não são a API: eles são apenas uma modalidade da API.

Salomão Lento
fonte
esta é apenas sua opinião ou você pode apoiá-la de alguma forma?
mosquito
"a API descreve e prescreve o comportamento esperado enquanto a biblioteca é uma implementação real desse conjunto de regras" en.wikipedia.org/wiki/…
Solomon Slow
de acordo com a minha leitura, isso não está relacionado ao ponto que você está tentando fazer: "que uma API é uma especificação" #
3013
-3

Eu gostaria de comparar dessa maneira.

Se você é um desenvolvedor usando o Microsoft Tools:

API = Microsoft.Net Framework vs. SDK = Visual Studio

Se você é um desenvolvedor usando Java:

API = Java RunTime Vs SDK = Qualquer ferramenta que forneça o Development Kit (JDK)

Eu acho que um SDK precisaria necessariamente confiar em uma API correspondente - não há SDK sem uma API.

Uma corrida
fonte
Acho que o que você está falando em termos de Visual Studio é um IDE, que pode fornecer acesso a um ou mais SDKs e / ou APIs.
Keiths
1
O Visual Studio não é um SDK, mas algumas edições incluem o Windows ou .NET SDK, como é provável que você desenvolva para eles usando o VS.
JBRWilkinson
-3

Aqui está uma analogia simples ... APIs são como palavras que você pode usar, e SDKs são como frases que foram criadas para você.

Peter
fonte
-4

À medida que os aplicativos são desenvolvidos e aprimorados através da interface com outros aplicativos, é necessário permitir que outros aplicativos (lógicos) façam interface com a lógica principal - isso é feito por meio de um conjunto definido de APIs. O SDK é usado para criar / criar código que usa APIs para interagir com outros aplicativos.

user144980
fonte
1
este não parece oferecer nada substancial sobre os pontos feitos e explicado em antes 11 respostas
mosquito