Diferencia entre una API y SDK

187

Estoy tratando de explicarle a un no desarrollador la diferencia entre una API y un SDK. Necesito explicar por qué un proveedor comercial de software de huellas dactilares probablemente no proporcionará un SDK, aunque ciertamente pueden haber usado uno.

Tanto los proveedores de dispositivos como los proveedores de software pueden y deben exponer una API bien definida. Esta API permite que otros programas de software interactúen con los componentes de software o dispositivos de hardware del proveedor.

Si alguien tiene más ideas para explicar esto claramente, agradecería mucho las sugerencias. Quiero enfatizar que el objetivo es explicar los conceptos a un no programador que no conoce la jerga del desarrollador .

Específicamente, en el contexto de un sensor de huellas digitales versus software para hacer la inscripción / verificación, así es como intenté explicarlo:

Si soy un fabricante de dispositivos / sensores de huellas digitales y no estoy en el negocio de escribir software, las formas en que podría comercializar mejor mi producto son:

  1. Asegúrese de que los controladores de mis dispositivos se puedan instalar en una amplia variedad de sistemas operativos
  2. Definir y proporcionar una API para que los desarrolladores de software escriban programas (por ejemplo, para inscripción, verificación) para "hablar" o usar mi dispositivo
  3. Desarrollar y proporcionar un SDK (un paso más allá de una API) para que sea más fácil y rápido para los desarrolladores de software escribir programas que funcionen con mi dispositivo. Los SDK pueden proporcionar bibliotecas de código auxiliar, aplicaciones de referencia, documentación, etc.
Sliceoftime
fuente

Respuestas:

225

Pedazo de pastel:

  • una API es una interfaz . Es como la especificación del sistema telefónico o el cableado eléctrico de su casa. Cualquier cosa * puede usarlo siempre que sepa cómo interactuar. Incluso puede comprar software comercial para usar una API particular, del mismo modo que puede comprar equipos o dispositivos telefónicos que se conectan al cableado de CA de su hogar.
  • Un SDK es herramientas de implementación . Es como un kit que le permite ** construir algo personalizado para conectarlo al sistema telefónico o al cableado eléctrico.

* Cualquier cosa puede usar una API. Algunas API tienen disposiciones de seguridad que requieren claves de licencia, autenticación, etc., lo que puede prohibir el uso completo de la API en casos particulares, pero eso es solo porque fallan los pasos de autenticación / autorización particulares. Cualquier software que presente las credenciales correctas (si es necesario) puede usar la API.

** Técnicamente, si una API está bien documentada, no necesita un SDK para construir su propio software para usar la API. Pero tener un SDK generalmente facilita mucho el proceso.

Jason S
fuente
2
Algunas otras ideas que tengo para explicar esto es el ejemplo de iPhone (código propietario pero API bien definido), conector de teléfono o ejemplo de puerto USB para explicar qué es una interfaz de software con una analogía de hardware más fácil de entender visualmente
Sliceoftime
17
Continuando con esta buena explicación, es decir, una API podría ser, por ejemplo, una API http / REST, mientras que el SDK podría ser una biblioteca sobre HttpClient para que sea más rápido y fácil interactuar con los servicios web REST.
frandevel
44
Más simplemente, una API es una interfaz. Mientras que un SDK es una capa de abstracción sobre la interfaz.
tvanc
1
SDK no es necesariamente una capa de abstracción sobre la interfaz; SDK es una implementación de la interfaz. (si hay otra capa de abstracción, la pregunta es por qué no se especifica como parte de la interfaz en sí)
Jason S
Estoy de acuerdo con esta definición, pero al mismo tiempo me pregunto por qué iOS y Android usan el término API para, por ejemplo, la biblioteca de Bluetooth (iOS Core Bluetooth API, Android Bluetooth API).
tamberg
59

API es como los bloques de construcción de un juego desconcertante con el que un niño juega para unir bloques en diferentes formas y construir algo en lo que pueda pensar.

SDK , por otro lado, es un taller adecuado donde todas las herramientas de desarrollo están disponibles, en lugar de bloques de construcción preformados. En un taller, tiene las herramientas reales y no está limitado a bloques, por lo que puede crear sus propios bloques o puede crear algo sin bloques para empezar.

codificar sin un SDK o API es como hacer todo desde cero sin un taller: incluso tiene que hacer sus propias herramientas

Abdul Rehman
fuente
¿Dice que SDK no tiene bloques de construcción preformados, pero JAVA SDK viene con estructuras de datos como ArrayList o HashMap ...?
Koray Tugay
1
Sí, puede considerarlo como un bloque de construcción pero, por otro lado, Java lo proporciona como una herramienta, no como un bloque de construcción.
Abdul Rehman
1
Me encontré con esta pregunta cuando intentaba leer y comprender la documentación de Facebook: developers.facebook.com/docs/javascript Una cosa me confunde es que Facebook lo llama un SDK de JavaScript, que en mi opinión es más como una API. Debido a que no proporciona herramientas tangibles sino solo una biblioteca que los desarrolladores pueden usar, ¿no debería llamarse API en lugar de SDK?
shenkwen
La explicación del SDK no funciona del todo. En lugar de not limited to blocks, or can create something without any blocks to begin witheso, más como el SDK le ofrece composiciones aún mejores de los bloques de la API para trabajar. El SDK se construye sobre una API.
Don Cheadle
26

Supongamos que la compañía C ofrece el producto P y P involucra software de alguna manera. Entonces C puede ofrecer una biblioteca / conjunto de bibliotecas a los desarrolladores de software que manejan los sistemas de software de P.

Esa biblioteca / bibliotecas son un SDK . Es parte de los sistemas de P. Es un kit que los desarrolladores de software pueden usar para modificar, configurar, arreglar, mejorar, etc., la pieza de software de P.

Si C quiere ofrecer la funcionalidad de P a otras compañías / sistemas, lo hace con una API .

Esta es una interfaz para P. Una forma para que los sistemas externos interactúen con P.

Si piensas en términos de implementación, parecerán bastante similares. Especialmente ahora que Internet se ha convertido en un gran sistema operativo distribuido.

Sin embargo, a propósito, en realidad son bastante distintos.

Construye algo con un SDK y usa o consume algo con una API.

Jack Widman
fuente
22
Simplemente debe editar su respuesta hasta la última línea y omitir todo el bla-de-bla.
mhenry1384
Si C ofrece un conjunto de bibliotecas que controlan el software de P ', esas bibliotecas componen las API, no un SDK (a menos que sea un SDK absolutamente mínimo que no sea más que la API). El SDK incluiría estas API más todas las ventajas que los desarrolladores necesitan además de una API sin procesar, de ahí el "kit". Entonces tiene razón sobre construir algo vs. usar / consumir (+ / controlar / interactuar), pero la distinción es confusa.
Josh Sutterfield
12

La interfaz de programación de aplicaciones es un conjunto de rutinas / estructuras de datos / clases que especifica una forma de interactuar con la plataforma / software de destino como OS X, Android, aplicación de gestión de proyectos, software de virtualización, etc.

Mientras que el kit de desarrollo de software es un contenedor de API / s que facilita el trabajo para los desarrolladores.

Por ejemplo, Android SDK facilita a los desarrolladores interactuar con la plataforma Android en su conjunto, mientras que la plataforma en sí está construida por componentes de software compuesto que se comunican a través de API.

Además, a veces los SDK se crean para facilitar el desarrollo en un lenguaje de programación específico. Por ejemplo, el controlador web Selenium (integrado en Java) proporciona API para controlar cualquier navegador de forma nativa, mientras que el capibara puede considerarse un SDK que facilita a los desarrolladores de Ruby el uso del controlador web Selenium. Sin embargo, el controlador web Selenium también es un SDK en sí mismo, ya que combina la interacción con varios controladores de navegador nativos en un solo paquete.

usuario3137634
fuente
Solo pensé que sería bueno citar algunos ejemplos.
user3137634
9

No estoy seguro de que haya alguna definición oficial de estos dos términos. Entiendo que una API es un conjunto de bibliotecas programables documentadas y una fuente de soporte como encabezados o archivos IDL. Los SDK generalmente contienen API, pero a menudo agregan compiladores, herramientas y muestras a la mezcla.

jlew
fuente
1
técnicamente, las API deben especificarse, pero no tienen que documentarse públicamente, pueden ser secretas.
Jason S
8

API es especificaciones sobre cómo hacer algo, una interfaz, como "Las vías del ferrocarril están a cuatro pies de distancia, y la barra de metal es de 1 pulgada de ancho" Ahora que tiene la API, ahora puede construir un tren que se ajuste a esos ferrocarriles pistas si quieres ir a cualquier parte. API es solo información sobre cómo construir su código, no hace nada.

SDK es un paquete de herramientas reales que ya se preocupaban por las especificaciones. "Aquí hay un tren, algo de carbón y un hombre de mantenimiento. Úselo para ir de un lugar a otro" Con el SDK no le preocupan los detalles. Un SDK es un código real, se puede usar solo para hacer algo, pero, por supuesto, el tren no arranca espontáneamente, aún debe obtener un conductor para controlar el tren.

Los SDK también tienen sus propias API. "Si desea impulsar el tren, ponga carbón", "Tire de la palanca azul para mover el tren", "Si el tren comienza a actuar de manera extraña, llame al encargado de mantenimiento", etc.

Geeks divertidos
fuente
3

API = Diccionario de palabras disponibles y sus significados (y la gramática requerida para combinarlos)

SDK = Un sistema de procesamiento de textos ... para bebés de 2 años ... que escribe directamente a partir de ideas

Aunque PODRÍAS ir a la escuela y convertirte en un maestro en tu idioma después de unos años, usar el SDK te ayudará a escribir oraciones enteras y significativas en poco tiempo (perdonando el hecho de que, en este ejemplo, como un bebé ni siquiera has conseguido aprender cualquier otro idioma para al menos aprender a usar el SDK).

sergio
fuente
2

Qué tal ... Es como si quisieras instalar un sistema de cine en casa en tu casa. Usar una API es como obtener todos los cables, tornillos, brocas y piezas. Las posibilidades son infinitas (limitadas solo por las piezas que recibe), pero a veces abrumadoras. Un SDK es como obtener un kit. Todavía tiene que armarlo, pero es más como obtener piezas precortadas e instrucciones para una estantería IKEA que una caja de tornillos.

usuario1653667
fuente
0

Utiliza un SDK para acceder a la funcionalidad de una biblioteca y una API para controlarla.

ixjf
fuente
0

API = Interfaz de programación de aplicaciones SDK = Kit de desarrollo de software

Un SDK parece ser un conjunto completo de API que le permite realizar casi cualquier acción que necesite para crear aplicaciones. Además un SDK puede incluir otras herramientas para desarrollar la plataforma / elemento para el que es.

Una API por otro lado, es solo una serie de métodos relacionados que pueden ser buenos para un propósito específico.

Como ejemplo, el JDK (Java Development Kit) contiene la API, así como los compiladores, tiempos de ejecución y otras herramientas diversas. La API de Java es simplemente todas las bibliotecas que componen el lenguaje principal con el que puede trabajar de forma inmediata.

Ejemplos de API: API de Java, API de Google Maps, API de Flash Player.

Ejemplos de SDK: JDK, GWT, Flex SDK.

Rehmanali Momin
fuente