Différence entre une API et un SDK

187

J'essaie d'expliquer à un non-développeur la différence entre une API et un SDK. Je dois expliquer pourquoi un fournisseur de logiciel d'empreintes digitales commercial ne fournira probablement pas de SDK, même s'il en a certainement utilisé un.

Les fournisseurs d'appareils et les éditeurs de logiciels peuvent et doivent exposer une API bien définie. Cette API permet à d'autres programmes logiciels d'interagir (sur lesquels écrire) avec les composants logiciels ou les périphériques matériels du fournisseur.

Si quelqu'un a plus d'idées pour expliquer cela clairement, j'apprécierais beaucoup les suggestions. Je tiens à souligner que le but est d'expliquer les concepts à un non-programmeur qui ne connaît pas le jargon des développeurs .

Plus précisément, dans le contexte d'un capteur d'empreintes digitales par rapport à un logiciel pour faire l'inscription / vérification, voici comment j'ai tenté de l'expliquer:

Si je suis un fabricant de dispositifs / capteurs d'empreintes digitales et que je ne suis pas dans le domaine de l'écriture de logiciels, je pourrais mieux commercialiser mon produit:

  1. Assurez-vous que mes pilotes de périphérique sont installables sur une grande variété de systèmes d'exploitation
  2. Définir et fournir une API permettant aux développeurs de logiciels d'écrire des programmes (par exemple, pour l'inscription, la vérification) pour «parler» ou utiliser mon appareil
  3. Développez et fournissez un SDK (une étape au-delà d'une API) pour permettre aux développeurs de logiciels d'écrire plus facilement et plus rapidement des programmes qui fonctionnent avec mon appareil. Les SDK peuvent fournir des bibliothèques de codes d'assistance, des applications de référence, de la documentation, etc.
Sliceoftime
la source

Réponses:

225

Part de gâteau:

  • une API est une interface . C'est comme les spécifications du système téléphonique ou du câblage électrique de votre maison. Tout * peut l'utiliser tant qu'il sait s'interfacer. Vous pouvez même acheter un logiciel standard pour utiliser une API particulière, tout comme vous pouvez acheter du matériel téléphonique standard ou des appareils qui se branchent sur le câblage CA de votre maison.
  • un SDK est un outil de mise en œuvre . C'est comme un kit qui vous permet ** de construire quelque chose de personnalisé à brancher au système téléphonique ou au câblage électrique.

* Tout peut utiliser une API. Certaines API ont des dispositions de sécurité pour exiger des clés de licence, une authentification, etc., ce qui peut interdire l'utilisation complète de l'API dans des instances particulières, mais c'est uniquement parce que des étapes d'authentification / autorisation particulières échouent. Tout logiciel qui présente les bonnes informations d'identification (si nécessaire) peut utiliser l'API.

** Techniquement, si une API est bien documentée, vous n'avez pas besoin d'un SDK pour créer votre propre logiciel et utiliser l'API. Mais avoir un SDK facilite généralement le processus.

Jason S
la source
2
Quelques autres idées que j'ai pour expliquer cela sont l'exemple iPhone (code propriétaire mais API bien défini), exemple de prise téléphonique ou de port USB pour expliquer ce qu'est une interface logicielle avec une analogie matérielle plus facile à comprendre visuellement
Sliceoftime
17
Poursuivant cette bonne explication, à savoir qu'une API pourrait être par exemple une API http / REST, tandis que le SDK pourrait être une bibliothèque au-dessus de HttpClient pour rendre plus rapide et plus facile l'interaction avec les services web REST.
frandevel
4
Plus simplement, une API est une interface. Alors qu'un SDK est une couche d'abstraction sur l'interface.
tvanc
1
Le SDK n'est pas nécessairement une couche d'abstraction sur l'interface; Le SDK est une implémentation de l'interface. (s'il y a une autre couche d'abstraction, la question est de savoir pourquoi elle n'est pas spécifiée dans le cadre de l'interface elle-même)
Jason S
Je suis d'accord avec cette définition, mais je me demande en même temps pourquoi iOS et Android utilisent le terme API pour, par exemple, la bibliothèque Bluetooth (API Bluetooth iOS Core, API Bluetooth Android)?
tamberg
59

L'API est comme les éléments constitutifs d'un jeu déroutant avec lequel un enfant joue pour joindre des blocs de différentes formes et construire quelque chose auquel il peut penser.

SDK , d'autre part, est un véritable atelier où tous les outils de développement sont disponibles, plutôt que des blocs de construction préformés. Dans un atelier, vous avez les outils réels et vous n'êtes pas limité aux blocs, et pouvez donc créer vos propres blocs, ou pouvez créer quelque chose sans aucun bloc pour commencer.

coder sans SDK ou API, c'est comme tout faire à partir de zéro sans atelier - vous devez même créer vos propres outils

Abdul Rehman
la source
Vous dites que le SDK n'a pas de blocs de construction préformés, mais JAVA SDK est livré avec des structures de données telles que ArrayList ou HashMap ...?
Koray Tugay
1
Oui, vous pouvez le considérer comme un bloc de construction, mais d'un autre côté, Java le fournit comme un outil et non comme un bloc de construction.
Abdul Rehman
1
Je suis tombé sur cette question lorsque j'essayais de lire et de comprendre la documentation de Facebook: développeurs.facebook.com/ docs/javascript Une chose me déroute, c'est que Facebook l'appelle un SDK javascript, qui à mon avis ressemble plus à une API. Parce qu'il ne fournit pas d'outils tangibles mais seulement une bibliothèque que les développeurs peuvent utiliser, cela ne devrait-il pas être appelé API au lieu de SDK?
shenkwen
L'explication du SDK ne fonctionne pas tout à fait imo. Plutôt que not limited to blocks, or can create something without any blocks to begin with, plus comme le SDK vous donne des compositions encore meilleures des blocs de l'API avec lesquels travailler. Le SDK repose sur une API.
Don Cheadle
26

Supposons que la société C propose le produit P et que P implique en quelque sorte un logiciel. Ensuite, C peut offrir une bibliothèque / un ensemble de bibliothèques aux développeurs de logiciels qui pilotent les systèmes logiciels de P.

Cette bibliothèque / bibliothèques est un SDK . Il fait partie des systèmes de P. Il s'agit d'un kit à utiliser par les développeurs de logiciels afin de modifier, configurer, réparer, améliorer, etc. le logiciel de P.

Si C veut offrir la fonctionnalité de P à d'autres entreprises / systèmes, il le fait avec une API .

Il s'agit d'une interface avec P. Un moyen pour les systèmes externes d'interagir avec P.

Si vous pensez en termes de mise en œuvre, ils vous sembleront assez similaires. Surtout maintenant qu'Internet est devenu comme un grand système d'exploitation distribué.

Dans le but, cependant, ils sont en fait assez distincts.

Vous créez quelque chose avec un SDK et vous utilisez ou consommez quelque chose avec une API.

Jack Widman
la source
22
Vous devriez simplement modifier votre réponse jusqu'à la dernière ligne et sauter tout le bla-de-bla.
mhenry1384
Si C propose un ensemble de bibliothèques qui pilotent le logiciel de P, ces bibliothèques constituent la ou les API, pas un SDK (à moins qu'il ne s'agisse d'un SDK absolument minimal qui n'est rien d'autre que l'API). Le SDK inclurait ces API ainsi que tous les goodies dont les développeurs ont besoin autres qu'une API brute, d'où le "kit". Vous avez donc raison de construire quelque chose par rapport à l'utilisation / à la consommation (+ / contrôler / interagir), mais la distinction est par ailleurs confuse.
Josh Sutterfield
12

L'interface de programmation d'application est un ensemble de routines / structures de données / classes qui spécifie un moyen d'interagir avec la plate-forme / le logiciel cible comme OS X, Android, une application de gestion de projet, un logiciel de virtualisation, etc.

Alors que le kit de développement logiciel est un wrapper autour des API / s qui facilite le travail des développeurs.

Par exemple, Android SDK permet aux développeurs d'interagir avec la plate-forme Android dans son ensemble, tandis que la plate-forme elle-même est construite par des composants logiciels composites communiquant via des API.

En outre, parfois, les SDK sont conçus pour faciliter le développement dans un langage de programmation spécifique. Par exemple, le pilote Web Selenium (intégré en Java) fournit des API pour piloter n'importe quel navigateur de manière native, tandis que capybara peut être considéré comme un SDK qui facilite l'utilisation du pilote Web Selenium aux développeurs Ruby. Cependant, le pilote Web Selenium est également un SDK en lui-même car il combine l'interaction avec divers pilotes de navigateur natifs dans un seul package.

user3137634
la source
Je pensais juste que ce serait bien de citer quelques exemples.
user3137634
9

Je ne suis pas sûr qu'il existe une définition officielle de ces deux termes. Je comprends qu'une API est un ensemble de bibliothèques programmables documentées et de sources de support telles que des en-têtes ou des fichiers IDL. Les SDK contiennent généralement des API, mais ajoutent souvent des compilateurs, des outils et des exemples au mélange.

jlew
la source
1
techniquement, les API doivent être spécifiées mais ne doivent pas être documentées publiquement, elles peuvent être secrètes.
Jason S
8

L'API est une spécification sur la façon de faire quelque chose, une interface, telle que "Les voies ferrées sont distantes de quatre pieds et la barre métallique mesure 1 pouce de large" Maintenant que vous disposez de l'API, vous pouvez maintenant construire un train qui s'adaptera à ces voies ferrées pistes si vous voulez aller n'importe où. L'API n'est que des informations sur la façon de créer votre code, elle ne fait rien.

Le SDK est un ensemble d'outils réels qui s'inquiètent déjà des spécifications. "Voici un train, du charbon et un homme de maintenance. Utilisez-le pour aller d'un endroit à l'autre" Avec le SDK, vous ne vous souciez plus des détails. Un SDK est un code réel, il peut être utilisé seul pour faire quelque chose, mais bien sûr, le train ne démarre pas spontanément, vous devez quand même demander à un conducteur de contrôler le train.

Les SDK ont également leurs propres API. "Si vous voulez alimenter le train, mettez du charbon dedans", "Tirez sur le levier bleu pour déplacer le train.", "Si le train commence à agir bizarrement, appelez l'homme de maintenance" etc.

Geeks drôles
la source
3

API = Dictionnaire des mots disponibles et leurs significations (et la grammaire requise pour les combiner)

SDK = Un système de traitement de texte… pour les bébés de 2 ans… qui écrit directement à partir d'idées

Bien que vous POUVEZ aller à l'école et devenir un maître dans votre langue après quelques années, l'utilisation du SDK vous aidera à écrire des phrases entières significatives en un rien de temps (pardonner le fait que, dans cet exemple, en tant que bébé, vous n'avez même pas pour apprendre une autre langue pour au moins apprendre à utiliser le SDK.)

Sergio
la source
2

Que diriez-vous ... C'est comme si vous vouliez installer un système de cinéma maison dans votre maison. Utiliser une API, c'est comme obtenir tous les fils, vis, embouts et pièces. Les possibilités sont infinies (limitées uniquement par les pièces que vous recevez), mais parfois écrasantes. Un SDK, c'est comme obtenir un kit. Vous devez encore l'assembler, mais c'est plus comme obtenir des pièces prédécoupées et des instructions pour une étagère IKEA qu'une boîte de vis.

user1653667
la source
0

Vous utilisez un SDK pour accéder aux fonctionnalités d'une bibliothèque et une API pour la contrôler.

ixjf
la source
0

API = SDK d'interface de programmation d'application = Kit de développement logiciel

Un SDK semble être un ensemble complet d' API qui vous permettent d'effectuer la plupart des actions dont vous auriez besoin pour créer des applications. En plus un SDK peut inclure d'autres outils de développement pour la plate-forme / l'élément auquel il est destiné.

Une API, en revanche, n'est qu'une série de méthodes associées qui peuvent être utiles pour un objectif spécifique.

À titre d'exemple, le JDK (Java Development Kit) contient l'API ainsi que les compilateurs, les runtimes et d'autres outils divers. L'API Java est simplement toutes les bibliothèques qui composent le langage de base avec lequel vous pouvez travailler directement.

Exemples d'API: API Java, API Google Maps, API Flash Player.

Exemples de SDK: JDK, GWT, Flex SDK.

Rehmanali Momin
la source