Was ist der Unterschied zwischen einer API und einem SDK?

174

Ich habe verschiedene APIs und SDKs durchgesehen, als mir klar wurde, dass ich den Unterschied zwischen einer so genannten API und einer so genannten SDK nicht wirklich erkennen konnte .

Beide sind konzeptionell eine Möglichkeit für Ihr Programm, mit den Ressourcen einer anderen Software zu kommunizieren und diese zu steuern, unabhängig davon, ob es sich bei dieser anderen Software um einen Webdienst, eine Endbenutzer-App, einen Betriebssystemdienst, einen Dämon oder einen Kernel handelt Gerätetreiber.

Was ist der semantische Unterschied zwischen einem SDK und einer API?

KeithS
quelle
3
SDK ist ein Development Kit, normalerweise eine clientseitige Bibliothek, die die Verwendung einer API erleichtert. Eine API ist nur die Bibliotheks- / Service-Definition und / oder Dokumentation.
Dietbuddha
Siehe auch " Library vs. Framework vs API?
Mücke

Antworten:

175

Ich denke, es fällt eher in die Richtung von "Alle SDKs sind / enthalten APIs, aber nicht alle APIs sind SDKs".

Ein SDK scheint ein vollständiger Satz von APIs zu sein, mit denen Sie die meisten Aktionen ausführen können, die Sie zum Erstellen von Anwendungen benötigen. Darüber hinaus kann ein SDK andere Tools zum Entwickeln für die Plattform / das Objekt enthalten, für das es bestimmt ist.

Eine API ist jedoch 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 Hauptsprache besteht, mit der Sie sofort arbeiten können.

Deduplizierer
quelle
7
Ich möchte hinzufügen, dass ein SDK nur ein Beispiel dafür ist, wie Sie mit dieser API interagieren würden.
The Muffin Man
10
Ich glaube, du hast diesen Nick vielleicht umgedreht. Ein SDK ist eine Obermenge von Dingen, die (unter anderem) APIs zur Interaktion mit seinen Bibliotheken enthält (nicht die Bibliothek selbst, sondern die Schnittstelle zu der Bibliothek, die ein Codierer, der die Bibliothek verwendet, verwenden würde).
Danny Staple
7
Ein SDK kann eine API, Tools, Dokumentation, Beispiele und alles andere enthalten, was benötigt wird.
Gregmac
4
@gregmac Habe ich diese Tatsache nicht mitgeteilt?
Wäre es in der Praxis fair zu sagen, dass eine API höchstwahrscheinlich nur Schnittstellendefinitionen enthält, die Klassen implementieren sollten, während ein SDK Basisklassen enthält, in denen die meisten Standardfunktionen bereits programmiert sind?
Ben
85
  • API = Application Programming Interface
  • SDK = Software Development Kit

Der eigentliche Unterschied besteht also darin, dass eine API nicht mehr oder weniger als eine Schnittstelle zu "einem bestimmten Dienst" ist, während ein SDK eine Reihe von Tools / Komponenten / Klassen für einen bestimmten Zweck ist. Ein SDK bietet Ihnen eine Schnittstelle zu einer API. Sie können jedoch eine API verwenden, ohne über die zugrunde liegenden Komponenten zu verfügen, z. B. wenn die API über einen Webdienst bereitgestellt wird.

Beispiele für APIs:

Beispiele für SDKs:

back2dos
quelle
3
+10 für "Sie könnten eine API verwenden, ohne die zugrunde liegenden Komponenten zu haben". Übrigens ist die zweite Verbindung
ausgefallen
24

API → dokumentierte Schnittstelle (zu einem bestimmten Zeitpunkt und für eine bestimmte Zielgruppe. Die Dokumentation ist möglicherweise unvollständig und / oder für die breite Öffentlichkeit nicht verfügbar. Dies ist möglicherweise absichtlich, mindert jedoch nicht die Tatsache, dass sie dokumentiert werden soll für Dritte zu verwenden.)

SDK → Schnittstellendokumentation (+ Beispiele & Tools)

ZJR
quelle
4
Endlich jemand, der Dokumentation erwähnt!
Gregmac
4
Nicht alle APIs sind dokumentiert - manchmal müssen Sie nur die Schnittstelle überprüfen / reflektieren.
JBRWilkinson
Sind "Beispiele" nicht Teil der API?
Pacerier
1
@ Pacerier ... absolut nicht. Beispiele könnten Teil einer API- Dokumentation sein , aber die reine Benutzeroberfläche könnte "undokumentiert" sein (dh die Dokumentation darüber wird für die Außenwelt geheim gehalten: think ... idk, microsoft ), während sie immer noch eine API ist. Es ist nur die Schnittstelle. Funktionen, Klassen, Aufrufe, vielleicht ein Protokoll, vielleicht ein Dateiformat, aber nichts weiter.
ZJR
17

"SDK" ist im weiteren Sinne kollektiv als "API".

In der Regel finden Sie nur ein SDK, das eine gesamte Plattform abdeckt. Es gibt beispielsweise ein MacOS X SDK und ein iOS SDK, die jeweils die APIs für viele verschiedene Funktionsbereiche enthalten.

"API" wurde ursprünglich auch als Sammelbegriff verwendet und wird immer noch häufig auf diese Weise verwendet (MAPI, WSAPI usw.), ist jedoch in der Regel auf eine bestimmte Technologie beschränkt. Der durch die "API" implizierte Anwendungsbereich scheint sich im Laufe der Jahre verringert zu haben. Früher sprachen die Leute über die "Mac Toolbox API" oder die "Windows API", die beide offensichtlich viele Funktionen enthielten . Heutzutage ist es nicht ungewöhnlich, dass "API" eine einzelne Systemfunktion bezeichnet. Man könnte sagen, dass eine neue Version eines Betriebssystems Hunderte neuer APIs enthält, und was gemeint ist, sind Hunderte neuer Systemaufrufe.

Keiner der Begriffe ist ohne Kontext sehr präzise.

Caleb
quelle
11

Was ist API?

API ist eine Schnittstelle, über die Softwareprogramme miteinander interagieren können. Es definiert eine Reihe von Regeln, die von den Programmen befolgt werden müssen, um miteinander zu kommunizieren. APIs geben im Allgemeinen an, wie die Routinen, Datenstrukturen usw. definiert werden sollen, damit zwei Anwendungen kommunizieren können. APIs unterscheiden sich in der von ihnen bereitgestellten Funktionalität. Es gibt allgemeine APIs, die Bibliotheksfunktionalitäten einer Programmiersprache wie der Java-API bereitstellen. Es gibt auch APIs, die bestimmte Funktionen bereitstellen, z. B. die Google Maps-API. Es gibt auch sprachabhängige APIs, die nur von einer bestimmten Programmiersprache verwendet werden können. Darüber hinaus gibt es sprachunabhängige APIs, die mit mehreren Programmiersprachen verwendet werden können. APIs müssen sehr sorgfältig implementiert werden, indem nur die erforderlichen Funktionen oder Daten nach außen freigegeben werden, während auf die anderen Teile der Anwendung nicht zugegriffen werden kann. Die Verwendung von APIs ist im Internet sehr populär geworden. Es ist weit verbreitet, einige der Funktionen und Daten über eine API nach außen im Web zuzulassen. Diese Funktionalität kann kombiniert werden, um den Benutzern eine verbesserte Funktionalität anzubieten.

Was ist SDK?

SDK ist eine Reihe von Tools, mit denen Softwareanwendungen für eine bestimmte Plattform entwickelt werden können. Zu den SDKs gehören Tools, Bibliotheken, Dokumentation und Beispielcode, mit denen ein Programmierer eine Anwendung entwickeln kann. Die meisten SDKs können aus dem Internet heruntergeladen werden, und viele der SDKs werden kostenlos zur Verfügung gestellt, um die Programmierer zur Verwendung der Programmiersprache des SDK zu ermutigen. Einige weit verbreitete SDKs sind Java SDK (JDK), das alle Bibliotheken, Debugging-Dienstprogramme usw. enthält und das Schreiben von Programmen in Java erheblich vereinfacht. SDKs vereinfachen das Leben eines Softwareentwicklers, da keine Komponenten / Tools gesucht werden müssen, die miteinander kompatibel sind, und alle in einem einzigen Paket integriert sind, das einfach zu installieren ist.

Was ist der Unterschied zwischen API und SDK?

API ist eine Schnittstelle, über die Softwareprogramme miteinander interagieren können, wohingegen ein SDK eine Reihe von Tools ist, mit denen Softwareanwendungen für eine bestimmte Plattform entwickelt werden können. Die einfachste Version eines SDK kann eine API sein, die einige Dateien enthält, die für die Interaktion mit einer bestimmten Programmiersprache erforderlich sind. So kann eine API als einfaches SDK ohne jegliche Debugging-Unterstützung usw. angesehen werden.

chiranjib
quelle
7

Ein SDK kann nichts anderes als eine API sein (Dateien, die als Schnittstelle zu einer anderen App dienen), enthält jedoch normalerweise anderen Code, der beim Debuggen und anderen Komponenten für Ihre IDE hilfreich ist.

Ich habe keine Akronyme mehr.

JeffO
quelle
8
Schnell, hol dir noch ein paar TLAs!
Mason Wheeler
4
Ich bin bereit für EIEIO.
JeffO
5

Alles, was zuvor erwähnt wurde, ist wahr, aber zu SDK möchte ich hinzufügen, dass ein Software Development Kit ein wirklich vollständiges Paket mit (fast) allen notwendigen Tools für den Entwicklungsprozess ist (oder sein sollte), während API "nur" eine Schnittstelle ist interagieren mit.

Scorchio
quelle
1

Meine zwei Cent: Ich glaube, der Begriff API wird oft falsch verwendet.

Eine API ist eine Anwendungsprogrammierschnittstelle.

Obwohl es sich um einen peinlichen Namen handelt, bedeutet dies, dass es sich um eine Schnittstelle handelt . Eine Anwendung verfügt möglicherweise über eine API, über die andere Anwendungen mit ihr kommunizieren können. Eine Software (z. B. eine Klasse in einem OO-System) bietet möglicherweise eine API, mit der andere Module im System mit ihr kommunizieren können.

Der Begriff API wird jedoch häufig als Synonym für "Bibliothek" verwendet. Ich denke nicht, dass dies eine korrekte Verwendung des Wortes ist. Ein Teil der Bibliothek ist eine API, mit der Code sie verwenden kann, die Bibliothek ist jedoch keine API.

Und ein SDK ist eine Art Bibliothek, also könnte das Verwirrung stiften.

Aviv Cohn
quelle
1
Genau. Ich würde wahrscheinlich aufhören zu sagen, dass es "falsch" ist. Dieses Schiff ist gesegelt und die Nutzung von "API" hat sich verschoben. Aber ich stimme zu, dass "Bibliothek" oft ein besseres Wort für das ist, was die Leute "API" nennen
Harry Wood
0

Viele der anderen Antworten erklären , dass ein SDK Werkzeuge , aber keiner von ihnen direkt kommt heraus und sagt , dass eine API - a - Spezifikation .

Die API für Compoonent X enthält alle Informationen, die Sie benötigen, um eine andere Komponente zu schreiben, die mit X interagiert. Ein SDK für Komponente X enthält möglicherweise Bibliotheksroutinen , die Ihnen das Schreiben dieser Komponente erleichtern, die Bibliotheken jedoch nicht die API: Sie sind lediglich eine Verkörperung der API.

Solomon Slow
quelle
Ist das nur deine Meinung oder kannst du es irgendwie bestätigen?
gnat
"Die API beschreibt und schreibt das erwartete Verhalten vor, während die Bibliothek eine tatsächliche Implementierung dieses Regelsatzes ist" en.wikipedia.org/wiki/…
Solomon Slow
Laut meiner Lektüre hat dies nichts mit dem Punkt zu tun, den Sie anstreben: "dass eine API eine Spezifikation ist"
gnat
-3

Ich würde gerne so vergleichen.

Wenn Sie ein Entwickler sind, der Microsoft Tools verwendet:

API = Microsoft.Net Framework Vs SDK = Visual Studio

Wenn Sie ein Entwickler sind, der Java verwendet:

API = Java RunTime Vs SDK = Jedes Tool, das das Development Kit (JDK) bereitstellen würde

Ich denke, ein SDK müsste unbedingt auf eine entsprechende API angewiesen sein - es gibt kein SDK ohne API.

Arun
quelle
Ich denke, was Sie in Bezug auf Visual Studio sprechen, ist eine IDE, die Zugriff auf ein oder mehrere SDKs und / oder APIs bieten kann.
KeithS
1
Visual Studio ist kein SDK, aber einige Editionen enthalten das Windows- oder .NET-SDK, da Sie wahrscheinlich mit VS für sie entwickeln werden.
JBRWilkinson
-3

Hier ist eine einfache Analogie ... APIs sind wie Wörter, die Sie verwenden können, und SDKs sind wie Sätze, die für Sie zusammengestellt wurden.

Peter
quelle
-4

Da Anwendungen durch die Anbindung an andere Anwendungen entwickelt und erweitert werden, müssen andere Anwendungen (Logik) mit der Kernlogik verbunden werden können - dies erfolgt über einen definierten Satz von APIs. SDK wird verwendet, um Code zu erstellen / zu erstellen, der APIs verwendet, um mit anderen Anwendungen zu interagieren.

user144980
quelle
1
dies scheint nicht alles zu bieten erhebliche über Punkte gemacht und erläutert vor 11 Antworten
gnat