Diferença entre uma API e SDK

187

Estou tentando explicar para um não desenvolvedor a diferença entre uma API e um SDK. Preciso explicar por que um fornecedor comercial de software de impressão digital provavelmente não fornecerá um SDK, embora possa certamente ter usado um.

Tanto os fornecedores de dispositivos quanto os de software podem e devem expor uma API bem definida. Essa API permite que outros programas de software interajam com os componentes de software ou dispositivos de hardware do próprio fornecedor.

Se alguém tiver mais idéias para explicar isso claramente, eu agradeceria muito as sugestões. Quero enfatizar que o objetivo é explicar os conceitos para um não programador que não conhece a linguagem do desenvolvedor .

Especificamente, no contexto de um sensor de impressão digital versus software para fazer inscrição / verificação, eis como eu tentei explicar:

Se eu sou um fabricante de dispositivos / sensores de impressão digital e não faço parte do ramo de software de escrita, as maneiras pelas quais eu poderia comercializar melhor meu produto são:

  1. Verifique se meus drivers de dispositivo são instaláveis ​​em uma ampla variedade de sistemas operacionais
  2. Defina e forneça uma API para os desenvolvedores de software escreverem programas (por exemplo, para inscrição, verificação) para "conversar" ou usar meu dispositivo
  3. Desenvolva e forneça um SDK (um passo além da API) para tornar mais fácil e rápido para os desenvolvedores de software escrever programas que funcionem com o meu dispositivo. Os SDKs podem fornecer bibliotecas de códigos auxiliares, aplicativos de referência, documentação etc.
Sliceoftime
fonte

Respostas:

225

Pedaco de bolo:

  • uma API é uma interface . É como a especificação do sistema telefônico ou a fiação elétrica da sua casa. Qualquer coisa * pode usá-lo desde que saiba como fazer a interface. Você pode até comprar software pronto para uso para usar uma API específica, assim como comprar equipamentos telefônicos ou dispositivos que se conectam à fiação CA da sua casa.
  • um SDK é uma ferramenta de implementação . É como um kit que permite que você crie algo personalizado para conectar ao sistema telefônico ou à fiação elétrica.

* Qualquer coisa pode usar uma API. Algumas APIs têm disposições de segurança para exigir chaves de licença, autenticação etc., que podem proibir o uso completo da API em determinadas instâncias, mas isso ocorre apenas porque as etapas específicas de autenticação / autorização falham. Qualquer software que apresente as credenciais corretas (se necessário) pode usar a API.

** Tecnicamente, se uma API estiver bem documentada, você não precisará de um SDK para criar seu próprio software para usar a API. Mas ter um SDK geralmente facilita o processo.

Jason S
fonte
2
Algumas outras ideias que tenho para explicar este é o exemplo do iPhone (código proprietário, mas API bem definida), tomada de telefone ou porta USB exemplo para explicar o que uma interface de software é com um fácil de entender visualmente analogia hardware
Sliceoftime
17
Continuando esta boa explicação, ou seja, uma API pode ser, por exemplo, uma API http / REST, enquanto o SDK pode ser uma biblioteca no topo do HttpClient para tornar mais rápido e fácil a interação com os serviços da web REST.
frandevel 27/02
4
Mais simplesmente, uma API é uma interface. Enquanto um SDK é uma camada de abstração sobre a interface.
tvanc 30/09/14
1
O SDK não é necessariamente uma camada de abstração na interface; SDK é uma implementação da interface. (se há uma outra camada de abstração, a questão é por isso que não é especificado como parte da própria interface)
Jason S
Concordo com essa definição, mas ao mesmo tempo pergunto por que iOS e Android usam o termo API para, por exemplo, a biblioteca Bluetooth (API do iOS Core Bluetooth, APIs do Android Bluetooth)?
Tamberg
59

A API é como os blocos de construção de algum jogo intrigante com o qual uma criança brinca para unir blocos de diferentes formas e criar algo em que possam pensar.

O SDK , por outro lado, é uma oficina adequada, onde todas as ferramentas de desenvolvimento estão disponíveis, em vez de blocos de construção pré-moldados. Em uma oficina, você tem as ferramentas reais e não está limitado a blocos e, portanto, pode criar seus próprios blocos ou criar algo sem blocos para começar.

codificar sem SDK ou API é como criar tudo do zero sem um workshop - você precisa criar suas próprias ferramentas

Abdul Rehman
fonte
Você diz que o SDK não possui blocos de construção predefinidos, mas o JAVA SDK vem com estruturas de dados como ArrayList ou HashMap ...?
Koray Tugay
1
Sim, você pode considerá-lo como um componente básico, mas por outro lado, o Java fornece isso como uma ferramenta, não como um componente básico.
Abdul Rehman
1
Me deparei com essa pergunta quando estava tentando ler e entender a documentação do facebook: developers.facebook.com/docs/javascript Uma coisa me confunde é que o facebook o chama de SDK javascript, que na minha opinião é mais uma API. Como ele não fornece ferramentas tangíveis, mas apenas uma biblioteca que os desenvolvedores podem usar, isso não deve ser chamado de API em vez de SDK?
shenkwen
A explicação do SDK não funciona muito bem. Em vez disso not limited to blocks, or can create something without any blocks to begin with, mais parecido com o SDK oferece composições ainda melhores dos blocos da API para trabalhar. O SDK se baseia em uma API.
Don Cheadle
26

Suponha que a empresa C ofereça produtos de P e P que envolvam software de alguma forma. Então C pode oferecer uma biblioteca / conjunto de bibliotecas para desenvolvedores de software que controlam os sistemas de software de P.

Essa biblioteca / bibliotecas são um SDK . Faz parte dos sistemas de P. É um kit para desenvolvedores de software usarem para modificar, configurar, corrigir, melhorar, etc, a parte de software de P.

Se C deseja oferecer a funcionalidade de P a outras empresas / sistemas, o faz com uma API .

Esta é uma interface para P. Uma maneira de sistemas externos interagirem com P.

Se você pensa em termos de implementação, eles parecerão bastante semelhantes. Especialmente agora que a internet se tornou um grande sistema operacional distribuído.

De propósito, porém, eles são realmente bastante distintos.

Você cria algo com um SDK e usa ou consome algo com uma API.

Jack Widman
fonte
22
Você deve editar sua resposta até a última linha e pular todo o blá-de-blá.
mhenry1384
Se C oferecer um conjunto de bibliotecas que controlam o software de P ', essas bibliotecas compõem a (s) API (s), não um SDK (a menos que seja um SDK absolutamente mínimo que não seja nada além da API). O SDK incluiria essas APIs, além de todas as vantagens que os desenvolvedores precisam além de uma API bruta, daí o "kit". Portanto, você está certo sobre construir algo versus usar / consumir (+ / controlar / interagir), mas a distinção é confusa.
Josh Sutterfield 19/01/12
12

A Application Programming Interface é um conjunto de rotinas / estruturas / classes de dados que especifica uma maneira de interagir com a plataforma / software de destino, como OS X, Android, aplicativo de gerenciamento de projetos, software de virtualização etc.

Enquanto o Software Development Kit é um invólucro de API / s que facilita o trabalho para os desenvolvedores.

Por exemplo, o Android SDK facilita que os desenvolvedores interajam com a plataforma Android como um todo, enquanto a própria plataforma é construída por componentes de software compostos que se comunicam por meio de APIs.

Além disso, às vezes os SDKs são criados para facilitar o desenvolvimento em uma linguagem de programação específica. Por exemplo, o driver da web Selenium (construído em Java) fornece APIs para direcionar qualquer navegador de forma nativa, enquanto a capivara pode ser considerada um SDK que facilita os desenvolvedores do Ruby a usar o driver da web Selenium. No entanto, o driver da web Selenium também é um SDK por si só, pois combina a interação com vários drivers nativos do navegador em um único pacote.

user3137634
fonte
Apenas pensei que seria bom citar alguns exemplos.
user3137634
9

Não tenho certeza de que exista alguma definição oficial desses dois termos. Entendo que uma API é um conjunto de bibliotecas programáveis ​​documentadas e fonte de suporte, como cabeçalhos ou arquivos IDL. Os SDKs geralmente contêm APIs, mas geralmente adicionam compiladores, ferramentas e amostras ao mix.

jlew
fonte
1
tecnicamente, as APIs precisam ser especificadas, mas não precisam ser documentadas publicamente; elas podem ser secretas.
21700 Jason S
8

API é especificações sobre como fazer algo, uma interface, como "Os trilhos da ferrovia estão a um metro de distância e a barra de metal tem 1 polegada de largura" Agora que você possui a API, agora pode construir um trem que irá caber nessas ferrovias faixas se você quiser ir a qualquer lugar. API é apenas informações sobre como criar seu código, não faz nada.

SDK é um pacote de ferramentas reais que já se preocupavam com as especificações. "Aqui está um trem, um pouco de carvão e um técnico de manutenção. Use-o para ir de um lugar para outro" Com o SDK, você não se preocupa com detalhes. Um SDK é um código real, pode ser usado sozinho para fazer alguma coisa, mas é claro que o trem não inicia espontaneamente, você ainda precisa de um condutor para controlar o trem.

Os SDKs também têm suas próprias APIs. "Se você quiser alimentar o trem, coloque carvão nele", "Puxe a alavanca azul para mover o trem.", "Se o trem começar a agir de maneira estranha, chame o técnico de manutenção" etc.

Geeks engraçados
fonte
3

API = Dicionário de palavras disponíveis e seus significados (e a gramática necessária para combiná-las)

SDK = Um sistema de processamento de texto… para bebês de 2 anos… que escreve diretamente a partir de idéias

Embora você PODE ir para a escola e se tornar um mestre em seu idioma depois de alguns anos, o uso do SDK ajudará você a escrever sentenças significativas inteiras em pouco tempo (perdoando o fato de que, neste exemplo, como um bebê, você nem teve um bebê) para aprender qualquer outro idioma, pelo menos para aprender a usar o SDK.)

sergio
fonte
2

Que tal ... É como se você quisesse instalar um sistema de home theater em sua casa. Usar uma API é como obter todos os fios, parafusos, bits e peças. As possibilidades são infinitas (limitadas apenas pelas peças que você recebe), mas às vezes esmagadoras. Um SDK é como adquirir um kit. Você ainda precisa montá-lo, mas é mais como obter peças pré-cortadas e instruções para uma estante da IKEA do que uma caixa de parafusos.

user1653667
fonte
0

Você usa um SDK para acessar a funcionalidade de uma biblioteca e uma API para controlá-la.

ixjf
fonte
0

API = Interface de programação de aplicativos SDK = Kit de desenvolvimento de software

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.

Exemplos de APIs: API Java, API do Google Maps, API do Flash Player.

Exemplos de SDKs: JDK, GWT, Flex SDK.

Rehmanali Momin
fonte