Unterschied zwischen einer API und einem SDK

187

Ich versuche einem Nicht-Entwickler den Unterschied zwischen einer API und einem SDK zu erklären. Ich muss erklären, warum ein kommerzieller Anbieter von Fingerabdrucksoftware wahrscheinlich kein SDK bereitstellt, obwohl er sicherlich eines verwendet hat.

Sowohl Gerätehersteller als auch Softwareanbieter können und sollten eine genau definierte API verfügbar machen. Mit dieser API können andere Softwareprogramme mit den eigenen Softwarekomponenten oder Hardwaregeräten des Herstellers zusammenarbeiten.

Wenn jemand mehr Ideen hat, um dies klar zu erklären, würde ich mich sehr über die Vorschläge freuen. Ich möchte betonen, dass das Ziel darin besteht, die Konzepte einem Nicht-Programmierer zu erklären, der die Umgangssprache der Entwickler nicht kennt .

Im Zusammenhang mit einem Fingerabdrucksensor im Vergleich zu einer Software zur Registrierung / Überprüfung habe ich Folgendes versucht:

Wenn ich ein Hersteller von Fingerabdruckgeräten / Sensoren bin und keine Software schreibe, kann ich mein Produkt besser vermarkten:

  1. Stellen Sie sicher, dass meine Gerätetreiber auf einer Vielzahl von Betriebssystemen installiert werden können
  2. Definieren und bereitstellen Sie eine API für Softwareentwickler, um Programme zu schreiben (z. B. zur Registrierung, Überprüfung), um mit meinem Gerät zu „sprechen“ oder es zu verwenden
  3. Entwickeln und Bereitstellen eines SDK (ein Schritt über eine API hinaus), damit Softwareentwickler einfacher und schneller Programme schreiben können, die mit meinem Gerät funktionieren. SDKs können Hilfecodebibliotheken, Referenzanwendungen, Dokumentation usw. bereitstellen.
Sliceoftime
quelle

Antworten:

225

Stück Kuchen:

  • Eine API ist eine Schnittstelle . Es ist wie die Spezifikation der Telefonanlage oder der elektrischen Verkabelung in Ihrem Haus. Alles * kann es verwenden, solange es weiß, wie man eine Schnittstelle herstellt. Sie können sogar Standard-Software kaufen, um eine bestimmte API zu verwenden, genauso wie Sie Standard-Telefongeräte oder -Geräte kaufen können, die an die Wechselstromkabel in Ihrem Haus angeschlossen sind.
  • Ein SDK ist ein Implementierungstool . Es ist wie ein Kit, mit dem Sie ** etwas Benutzerdefiniertes bauen können, um es an die Telefonanlage oder die elektrische Verkabelung anzuschließen.

* Alles kann eine API verwenden. Einige APIs enthalten Sicherheitsbestimmungen, die Lizenzschlüssel, Authentifizierung usw. erfordern, die in bestimmten Fällen die vollständige Verwendung der API verhindern können. Dies liegt jedoch nur daran, dass bestimmte Authentifizierungs- / Autorisierungsschritte fehlschlagen. Jede Software mit den richtigen Anmeldeinformationen (falls erforderlich) kann die API verwenden.

** Wenn eine API gut dokumentiert ist, benötigen Sie technisch gesehen kein SDK, um Ihre eigene Software für die Verwendung der API zu erstellen. Ein SDK erleichtert den Prozess jedoch im Allgemeinen erheblich.

Jason S.
quelle
2
Einige andere Ideen, die ich habe, um dies zu erklären, sind das iPhone-Beispiel (proprietärer Code, aber gut definierte API), die Telefonbuchse oder der USB-Anschluss, um zu erklären, was eine Softwareschnittstelle mit einer leichter visuell verständlichen Hardwareanalogie ist
Sliceoftime
17
Fortsetzung dieser guten Erklärung, dh eine API könnte beispielsweise eine http / REST-API sein, während das SDK eine Bibliothek über HttpClient sein könnte, um die Interaktion mit den REST-Webdiensten zu beschleunigen und zu vereinfachen.
Frandevel
4
Einfacher ist eine API eine Schnittstelle. Während ein SDK eine Abstraktionsschicht über der Schnittstelle ist.
tvanc
1
SDK ist nicht unbedingt eine Abstraktionsschicht über der Schnittstelle. SDK ist eine Implementierung der Schnittstelle. (Wenn es eine andere Abstraktionsschicht gibt, ist die Frage, warum sie nicht als Teil der Schnittstelle selbst angegeben wird)
Jason S
Ich stimme dieser Definition zu, frage mich aber gleichzeitig, warum iOS und Android den Begriff API beispielsweise für die Bluetooth-Bibliothek (iOS Core Bluetooth API, Android Bluetooth APIs) verwenden.
Tamberg
59

API ist wie die Bausteine ​​eines Puzzlespiels, mit dem ein Kind spielt, um Blöcke in verschiedenen Formen zu verbinden und etwas zu bauen, an das es denken kann.

SDK hingegen ist eine geeignete Werkstatt, in der alle Entwicklungswerkzeuge verfügbar sind und keine vorgeformten Bausteine. In einem Workshop haben Sie die eigentlichen Werkzeuge und sind nicht auf Blöcke beschränkt. Sie können daher Ihre eigenen Blöcke erstellen oder zunächst etwas ohne Blöcke erstellen.

Das Codieren ohne SDK oder API ist so, als würde man alles ohne Workshop von Grund auf neu erstellen - man muss sogar seine eigenen Tools erstellen

Abdul Rehman
quelle
Sie sagen, SDK hat keine vorgeformten Bausteine, aber JAVA SDK enthält Datenstrukturen wie ArrayList oder HashMap ...?
Koray Tugay
1
Ja, Sie können es als Baustein betrachten, aber andererseits stellt Java es als Werkzeug und nicht als Baustein bereit.
Abdul Rehman
1
Ich bin auf diese Frage gestoßen, als ich versucht habe, die Facebook-Dokumentation zu lesen und zu verstehen: developer.facebook.com/docs/javascript Eine Sache, die mich verwirrt, ist, dass Facebook es ein Javascript-SDK nennt, das meiner Meinung nach eher einer API ähnelt. Sollte dies nicht als API anstelle von SDK bezeichnet werden, da es keine konkreten Tools bietet, sondern nur eine Bibliothek, die Entwickler verwenden können?
Shenkenwen
Die SDK-Erklärung funktioniert imo nicht ganz. Anstatt not limited to blocks, or can create something without any blocks to begin withwie beim SDK erhalten Sie noch bessere Zusammensetzungen der API-Blöcke, mit denen Sie arbeiten können. SDK baut auf einer API auf.
Don Cheadle
26

Angenommen, Unternehmen C bietet Produkt P an und P beinhaltet in irgendeiner Weise Software. Dann kann C Softwareentwicklern, die die Softwaresysteme von P steuern, eine Bibliothek / einen Satz von Bibliotheken anbieten.

Diese Bibliothek / Bibliotheken sind ein SDK . Es ist Teil der Systeme von P. Es ist ein Kit, das Softwareentwickler verwenden können, um das Softwareteil von P. zu modifizieren, zu konfigurieren, zu reparieren, zu verbessern usw.

Wenn C die Funktionalität von P anderen Unternehmen / Systemen anbieten möchte, geschieht dies mit einer API .

Dies ist eine Schnittstelle zu P. Eine Möglichkeit für externe Systeme, mit P. zu interagieren.

Wenn Sie in Bezug auf die Implementierung denken, werden sie ziemlich ähnlich erscheinen. Besonders jetzt, wo das Internet zu einem großen verteilten Betriebssystem geworden ist.

In der Absicht sind sie jedoch tatsächlich ziemlich verschieden.

Sie erstellen etwas mit einem SDK und verwenden oder konsumieren etwas mit einer API.

Jack Widman
quelle
22
Sie sollten einfach Ihre Antwort bis zur letzten Zeile bearbeiten und das gesamte bla-de-blah überspringen.
Mhenry1384
Wenn C eine Reihe von Bibliotheken anbietet, die die Software von P steuern, bilden diese Bibliotheken die API (s) und kein SDK (es sei denn, es handelt sich um ein absolut minimales SDK, das nichts anderes als die API ist). Das SDK würde diese APIs sowie alle Extras enthalten, die Entwickler außer einer Roh-API benötigen, daher das "Kit". Sie haben also Recht, etwas zu bauen oder zu verwenden / zu konsumieren (+ / steuern / interagieren), aber die Unterscheidung ist ansonsten durcheinander.
Josh Sutterfield
12

Die Anwendungsprogrammierschnittstelle besteht aus einer Reihe von Routinen / Datenstrukturen / Klassen, die eine Möglichkeit zur Interaktion mit der Zielplattform / -software wie OS X, Android, Projektmanagementanwendung, Virtualisierungssoftware usw. angeben.

Während das Software Development Kit ein Wrapper für APIs ist, der Entwicklern die Arbeit erleichtert.

Mit dem Android SDK können Entwickler beispielsweise mit der gesamten Android-Plattform interagieren, während die Plattform selbst aus zusammengesetzten Softwarekomponenten besteht, die über APIs kommunizieren.

Manchmal werden auch SDKs erstellt, um die Entwicklung in einer bestimmten Programmiersprache zu erleichtern. Beispielsweise bietet der Selenium-Webtreiber (in Java integriert) APIs, um jeden Browser nativ zu steuern, während Capybara als SDK betrachtet werden kann, das Ruby-Entwicklern die Verwendung des Selenium-Webtreibers erleichtert. Der Selenium-Webtreiber ist jedoch auch ein SDK für sich, da er die Interaktion mit verschiedenen nativen Browsertreibern in einem Paket kombiniert.

user3137634
quelle
Ich dachte nur, dass es schön sein wird, einige Beispiele zu zitieren.
user3137634
9

Ich bin mir nicht sicher, ob es eine offizielle Definition dieser beiden Begriffe gibt. Ich verstehe eine API als eine Reihe dokumentierter programmierbarer Bibliotheken und unterstützender Quellen wie Header oder IDL-Dateien. SDKs enthalten normalerweise APIs, fügen jedoch häufig Compiler, Tools und Beispiele zum Mix hinzu.

jlew
quelle
1
Technisch gesehen müssen APIs angegeben werden, müssen aber nicht öffentlich dokumentiert werden, sie können geheim sein.
Jason S
8

API ist eine Spezifikation, wie etwas zu tun ist, eine Schnittstelle wie "Die Eisenbahnschienen sind vier Fuß voneinander entfernt und die Metallstange ist 1 Zoll breit". Nachdem Sie die API haben, können Sie jetzt einen Zug bauen, der auf diese Eisenbahn passt Tracks, wenn Sie irgendwohin wollen. API ist nur eine Information darüber, wie Sie Ihren Code erstellen, sie macht nichts.

SDK ist ein Paket aktueller Tools, die sich bereits Sorgen um die Spezifikationen gemacht haben. "Hier ist ein Zug, etwas Kohle und ein Wartungsmann. Verwenden Sie ihn, um von Ort zu Ort zu fahren." Mit dem SDK sorgen Sie sich nicht um Einzelheiten. Ein SDK ist ein tatsächlicher Code, der von sich aus verwendet werden kann, um etwas zu tun, aber natürlich startet der Zug nicht spontan, Sie müssen immer noch einen Schaffner beauftragen, den Zug zu steuern.

SDKs haben auch eigene APIs. "Wenn Sie den Zug antreiben möchten, geben Sie Kohle hinein", "Ziehen Sie den blauen Hebel, um den Zug zu bewegen.", "Wenn der Zug sich lustig verhält, rufen Sie den Wartungsmann an" usw.

Lustige Geeks
quelle
3

API = Wörterbuch der verfügbaren Wörter und ihrer Bedeutungen (und der erforderlichen Grammatik, um sie zu kombinieren)

SDK = Ein Textverarbeitungssystem… für 2-jährige Babys… das direkt aus Ideen schreibt

Obwohl Sie nach einigen Jahren zur Schule gehen und ein Meister in Ihrer Sprache werden KÖNNTEN, können Sie mit dem SDK in kürzester Zeit ganze aussagekräftige Sätze schreiben (Verzeihen Sie die Tatsache, dass Sie in diesem Beispiel als Baby noch nicht einmal bekommen haben um eine andere Sprache zu lernen, um zumindest die Verwendung des SDK zu lernen.)

Sergio
quelle
2

Wie wäre es ... Es ist, als ob Sie ein Heimkinosystem in Ihrem Haus installieren möchten. Die Verwendung einer API ist wie das Abrufen aller Drähte, Schrauben, Bits und Teile. Die Möglichkeiten sind endlos (nur durch die erhaltenen Teile eingeschränkt), aber manchmal überwältigend. Ein SDK ist wie ein Kit. Sie müssen es noch zusammensetzen, aber es ist eher so, als würden Sie vorgeschnittene Teile und Anweisungen für ein IKEA-Bücherregal erhalten als eine Schachtel Schrauben.

user1653667
quelle
0

Sie verwenden ein SDK, um auf die Funktionen einer Bibliothek zuzugreifen, und eine API, um sie zu steuern.

ixjf
quelle
0

API = Anwendungsprogrammierschnittstelle SDK = Software Development Kit

Ein SDK scheint ein vollständiger Satz von APIs zu sein , mit denen Sie fast alle Aktionen ausführen können, die Sie zum Erstellen von Anwendungen benötigen würden. Darüber hinaus kann ein SDK andere Tools für die Entwicklung der Plattform / des Elements enthalten, für die es bestimmt ist.

Eine API hingegen ist nur eine Reihe verwandter Methoden, die für einen bestimmten Zweck geeignet sein können.

Das JDK (Java Development Kit) enthält beispielsweise die API sowie die Compiler, Laufzeiten und andere verschiedene Tools. Die Java-API besteht einfach aus allen Bibliotheken, aus denen die Kernsprache besteht, mit der Sie sofort arbeiten können.

Beispiele für APIs: Java-API, Google Maps-API, Flash Player-API.

Beispiele für SDKs: JDK, GWT, Flex SDK.

Rehmanali Momin
quelle