Differenza tra API e SDK


187

Sto cercando di spiegare a un non sviluppatore la differenza tra un'API e un SDK. Devo spiegare perché un fornitore commerciale di software per impronte digitali non fornirà probabilmente un SDK, sebbene possa averne sicuramente utilizzato uno.

Sia i venditori di dispositivi che quelli di software possono e devono esporre un'API ben definita. Questa API consente ad altri programmi software di (essere scritti) interagire con i componenti software o i dispositivi hardware del fornitore.

Se qualcuno ha più idee per spiegarlo chiaramente, apprezzerei molto i suggerimenti. Voglio sottolineare che l'obiettivo è quello di spiegare i concetti a un non programmatore che non conosce il linguaggio degli sviluppatori .

Nello specifico, nel contesto di un sensore di impronte digitali rispetto a un software per effettuare la registrazione / verifica, ecco come ho tentato di spiegarlo:

Se sono un produttore di dispositivi / sensori di impronte digitali e non mi occupo della scrittura di software, i modi in cui potrei commercializzare meglio il mio prodotto sono:

  1. Assicurati che i driver del mio dispositivo siano installabili su un'ampia varietà di sistemi operativi
  2. Definire e fornire un'API per gli sviluppatori di software per scrivere programmi (ad esempio, per l'iscrizione, la verifica) per "parlare" o utilizzare il mio dispositivo
  3. Sviluppa e fornisci un SDK (un passo oltre un'API) per rendere più semplice e veloce per gli sviluppatori software la scrittura di programmi compatibili con il mio dispositivo. Gli SDK possono fornire librerie di codici di supporto, applicazioni di riferimento, documentazione ecc.

Risposte:


225

Pezzo di torta:

  • un'API è un'interfaccia . È come le specifiche del sistema telefonico o del cablaggio elettrico di casa tua. Qualsiasi cosa * può usarlo fintanto che sa come interfacciarsi. Puoi anche acquistare software standardizzati per utilizzare una particolare API, così come puoi acquistare apparecchiature telefoniche o dispositivi standard collegati al cablaggio CA di casa tua.
  • un SDK è uno strumento di implementazione . È come un kit che ti consente di ** creare qualcosa di personalizzato da collegare al sistema telefonico o al cablaggio elettrico.

* Tutto può usare un'API. Alcune API hanno disposizioni di sicurezza che richiedono chiavi di licenza, autenticazione, ecc. Che potrebbero vietare il completo utilizzo dell'API in casi particolari, ma ciò è dovuto solo al fallimento di particolari passaggi di autenticazione / autorizzazione. Qualsiasi software che presenti le giuste credenziali (se richiesto) può utilizzare l'API.

** Tecnicamente, se un'API è ben documentata, non è necessario un SDK per creare il proprio software per utilizzare l'API. Ma avere un SDK generalmente rende il processo molto più semplice.


2
Alcune altre idee che ho per spiegare questo sono l'esempio di iPhone (codice proprietario ma API ben definita), jack telefonico o porta USB per spiegare cos'è un'interfaccia software con un'analogia hardware visivamente più facile da capire
Sliceoftime

17
Continuando questa buona spiegazione, ad esempio un'API potrebbe essere ad esempio un'API http / REST, mentre l'SDK potrebbe essere una libreria in cima a HttpClient per rendere più semplice e veloce l'interazione con i servizi web REST.
frevevel,

4
Più semplicemente, un'API è un'interfaccia. Considerando che un SDK è un livello di astrazione sull'interfaccia.
tvanc,

1
SDK non è necessariamente un livello di astrazione sull'interfaccia; SDK è un'implementazione dell'interfaccia. (se c'è un altro livello di astrazione, la domanda è perché non è specificato come parte dell'interfaccia stessa)
Jason S

Sono d'accordo con questa definizione, ma allo stesso tempo mi chiedo perché iOS e Android utilizzino il termine API per es. La libreria Bluetooth (API Core iOS Bluetooth, API Bluetooth Android)?
tamberg

59

L'API è come i mattoni di un gioco enigmatico con cui un bambino gioca per unire blocchi di forme diverse e costruire qualcosa a cui possono pensare.

SDK , d'altra parte, è un'officina adeguata in cui sono disponibili tutti gli strumenti di sviluppo, anziché blocchi predefiniti. In un'officina hai gli strumenti reali e non sei limitato ai blocchi, e quindi puoi creare i tuoi blocchi o creare qualcosa senza blocchi per cominciare.

la codifica senza SDK o API è come fare tutto da zero senza un seminario: devi persino creare i tuoi strumenti


Dici che l'SDK non ha blocchi predefiniti ma l'SDK di JAVA include Data Structures come ArrayList o HashMap ...?
Koray Tugay,

1
Sì, puoi considerarlo come blocco predefinito ma, d'altra parte, Java lo fornisce come uno strumento non come un blocco predefinito.
Abdul Rehman,

1
Mi sono imbattuto in questa domanda quando stavo cercando di leggere e comprendere la documentazione di Facebook: developers.facebook.com/docs/javascript Una cosa che mi confonde è che Facebook lo chiama un SDK javascript, che a mio avviso è più simile a un'API. Poiché non fornisce strumenti tangibili, ma solo una libreria che gli sviluppatori possono utilizzare, non dovrebbe essere chiamato API anziché SDK?
shenkwen,

La spiegazione dell'SDK non funziona perfettamente. Piuttosto che not limited to blocks, or can create something without any blocks to begin with, più come l'SDK offre composizioni ancora migliori dei blocchi dell'API con cui lavorare. SDK si basa su un'API.
Don Cheadle,

26

Supponiamo che la società C offra prodotti P e P che coinvolgono il software in qualche modo. Quindi C può offrire una libreria / serie di librerie agli sviluppatori software che guidano i sistemi software di P.

Quella libreria / librerie sono un SDK . Fa parte dei sistemi di P. È un kit che gli sviluppatori di software possono utilizzare per modificare, configurare, riparare, migliorare, ecc. Il software di P.

Se C vuole offrire la funzionalità di P ad altre società / sistemi, lo fa con un'API .

Questa è un'interfaccia per P. Un modo per i sistemi esterni di interagire con P.

Se pensi in termini di implementazione, sembreranno abbastanza simili. Soprattutto ora che Internet è diventato come un grande sistema operativo distribuito.

In proposito, tuttavia, sono in realtà abbastanza distinti.

Costruisci qualcosa con un SDK e usi o consumi qualcosa con un'API.


22
Dovresti semplicemente modificare la tua risposta fino all'ultima riga e saltare tutto il blah-de-blah.
mhenry1384,

Se C offre un set di librerie che guidano il software di P, quelle librerie compongono le API, non un SDK (a meno che non sia un SDK assolutamente minimale che non sia altro che l'API). L'SDK includerebbe queste API oltre a tutte le chicche di cui gli sviluppatori hanno bisogno oltre a un'API non elaborata, da cui il "kit". Quindi hai ragione a costruire qualcosa piuttosto che usare / consumare (+ / controllare / interagire), ma la distinzione è altrimenti confusa.
Josh Sutterfield,

12

Application Programming Interface è un insieme di routine / strutture di dati / classi che specifica un modo per interagire con la piattaforma / software di destinazione come OS X, Android, l'applicazione di gestione dei progetti, software di virtualizzazione ecc.

Mentre Software Development Kit è un wrapper attorno alle API / e che semplifica il lavoro per gli sviluppatori.

Ad esempio, Android SDK facilita gli sviluppatori a interagire con la piattaforma Android nel suo insieme mentre la piattaforma stessa è costruita da componenti software compositi che comunicano tramite API.

Inoltre, a volte vengono creati SDK per facilitare lo sviluppo in un linguaggio di programmazione specifico. Ad esempio, il driver web Selenium (integrato in Java) fornisce API per guidare nativamente qualsiasi browser, mentre capybara può essere considerato un SDK che facilita agli sviluppatori Ruby di utilizzare il driver web Selenium. Tuttavia, il driver Web Selenium è anche un SDK da solo poiché combina l'interazione con vari driver di browser nativi in ​​un unico pacchetto.


Ho solo pensato che sarebbe bello citare alcuni esempi.
user3137634

9

Non sono sicuro che ci sia una definizione ufficiale di questi due termini. Comprendo che un'API è un insieme di librerie programmabili documentate e fonti di supporto come intestazioni o file IDL. Gli SDK di solito contengono API ma spesso aggiungono compilatori, strumenti ed esempi al mix.


1
tecnicamente le API devono essere specificate ma non devono essere documentate pubblicamente, potrebbero essere segrete.
Jason S,

8

L'API è specifiche su come fare qualcosa, un'interfaccia, come "I binari della ferrovia sono a quattro piedi di distanza e la barra di metallo è larga 1 pollice" Ora che hai l'API puoi ora costruire un treno che si adatterà a quella ferrovia tracce se vuoi andare ovunque. L'API è solo informazioni su come costruire il tuo codice, non fa nulla.

SDK è un pacchetto di strumenti reali che si preoccupavano già delle specifiche. "Ecco un treno, un po 'di carbone e un addetto alla manutenzione. Usalo per spostarti da un posto all'altro" Con l'SDK non ti preoccupare dei dettagli. Un SDK è un vero codice, può essere usato da solo per fare qualcosa, ma ovviamente il treno non si avvia spontaneamente, devi comunque avere un conduttore per controllare il treno.

Gli SDK hanno anche le proprie API. "Se vuoi alimentare il treno mettici del carbone", "Tira la leva blu per muovere il treno.", "Se il treno inizia a comportarsi in modo strano, chiama il manutentore" ecc.


3

API = Dizionario delle parole disponibili e dei loro significati (e la grammatica richiesta per combinarle)

SDK = Un sistema di elaborazione testi ... per bambini di 2 anni ... che scrive direttamente dalle idee

Sebbene POTREBBE andare a scuola e diventare un maestro nella tua lingua dopo pochi anni, l'uso dell'SDK ti aiuterà a scrivere intere frasi significative in pochissimo tempo (Perdona il fatto che, in questo esempio, come bambino non hai nemmeno ottenuto per imparare qualsiasi altra lingua almeno per imparare a usare l'SDK.)


2

Che ne dici di ... È come se volessi installare un sistema home theater a casa tua. Usare un'API è come ottenere tutti i fili, viti, punte e pezzi. Le possibilità sono infinite (vincolate solo dai pezzi che ricevi), ma a volte travolgenti. Un SDK è come ottenere un kit. Devi ancora metterlo insieme, ma è più come ottenere pezzi pretagliati e istruzioni per una libreria IKEA che una scatola di viti.


0

Si utilizza un SDK per accedere alla funzionalità di una libreria e un'API per controllarlo.


0

API = Application Programming Interface SDK = Software Development Kit

Un SDK sembra essere un set completo di API che consente di eseguire la maggior parte delle azioni necessarie per la creazione di applicazioni. Inoltre, un SDK può includere altri strumenti per lo sviluppo per la piattaforma / articolo per cui è destinato.

Un API invece è solo una serie di metodi correlati che possono essere buoni per uno scopo specifico.

Ad esempio, il JDK (Java Development Kit) contiene l'API, nonché i compilatori, i runtime e altri strumenti vari. L'API Java è semplicemente tutte le librerie che compongono il linguaggio principale con cui è possibile lavorare immediatamente.

Esempi di API: API Java, API di Google Maps, API di Flash Player.

Esempi di SDK: JDK, GWT, Flex SDK.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.