¿Cuál es la diferencia entre una API y un SDK?

174

Estaba mirando a través de varias API y SDK, cuando me di cuenta de que realmente no podía distinguir la diferencia entre algo llamado API y algo llamado SDK .

Ambas son, conceptualmente, una forma para que su programa interactúe y controle los recursos proporcionados por otra pieza de software, ya sea que ese otro software sea un servicio web, una aplicación de usuario final, un servicio de sistema operativo o demonio, o un núcleo controlador de dispositivo.

Entonces, ¿cuál es la diferencia semántica entre un SDK y una API?

KeithS
fuente
3
SDK es un kit de desarrollo, generalmente una biblioteca del lado del cliente que facilita el uso de una API. Una API es solo la definición y / o documentación de la biblioteca / servicio.
dietbuddha
ver también " Biblioteca vs. framework vs API?
mosquito

Respuestas:

175

Creo que más bien cae en la línea de "Todos los SDK son / contienen API pero no todas las API son SDK".

Un SDK parece ser un conjunto completo de API que le permiten 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 (Kit de desarrollo de Java) 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.

Deduplicador
fuente
77
Me gustaría agregar que un SDK es solo una muestra de cómo interactuaría con dicha API.
The Muffin Man
10
Creo que puedes haber invertido ese Nick. Un SDK es un superconjunto de cosas, que contiene (entre otras cosas) API para interactuar con sus bibliotecas (no la biblioteca en sí, sino la interfaz a la biblioteca que usaría un codificador que la use).
Danny Staple
77
Un SDK puede incluir una API, herramientas, documentación, muestras y todo lo que se necesita.
gregmac
44
@gregmac ¿No transmití ese hecho?
En términos prácticos, ¿sería justo decir que una API probablemente contendrá definiciones de interfaz que las clases deberían implementar, mientras que un SDK contendría clases base con la mayoría de la funcionalidad estándar ya programada?
Ben
85
  • API = interfaz de programación de aplicaciones
  • SDK = Kit de desarrollo de software

Entonces, la verdadera diferencia es que una API no es más o menos que una interfaz para "algún servicio", mientras que un SDK es un conjunto de herramientas / componentes / clases para un propósito específico. De hecho, un SDK le presenta una API para interactuar. Pero puede usar una API sin tener los componentes subyacentes, por ejemplo, cuando la API se proporciona a través de un servicio web.

Ejemplos de API:

Ejemplos de SDK:

back2dos
fuente
3
+10 para "puede usar una API sin tener los componentes subyacentes". Por cierto, el segundo enlace está inactivo .......
Pacerier
24

API → interfaz documentada (en un momento determinado, y para una audiencia determinada. La documentación puede estar incompleta y / o no disponible para el público en general y esto puede ser a propósito, pero esto no disminuye el hecho de que estaba destinado a ser documentado para que terceros lo usen)

SDK → documentación de la interfaz (+ ejemplos y herramientas)

ZJR
fuente
44
Finalmente alguien que menciona documentación!
gregmac
44
No todas las API están documentadas; a veces solo tiene que inspeccionar / reflejar la interfaz.
JBRWilkinson
¿No son los "ejemplos" parte de la API?
Pacerier
1
@Pacerier ... absolutamente no. Los ejemplos pueden ser parte de una documentación de la API , pero la interfaz puede ser "indocumentada" (es decir, la documentación al respecto se mantiene en secreto para el mundo exterior: piense ... idk, microsoft ) mientras sigue siendo una API. Es solo la interfaz. Funciones, clases, llamadas, quizás un protocolo, quizás un formato de archivo, pero nada más.
ZJR
17

"SDK" es colectivo en un sentido más amplio que "API".

Por lo general, solo encuentra un SDK para cubrir una plataforma completa. Hay un SDK de MacOS X y un SDK de iOS, por ejemplo, y cada uno contiene las API para muchas áreas diferentes de funcionalidad.

"API" se usó originalmente como un término colectivo también, y todavía se usa a menudo de esa manera (MAPI, WSAPI, etc.), pero generalmente se limita a alguna tecnología en particular. El alcance implícito en la "API" parece haber disminuido con los años; la gente solía hablar sobre la "API de Mac Toolbox" o la "API de Windows", que obviamente contenían mucha funcionalidad. En estos días, no es raro escuchar que "API" significa una sola función del sistema; Se podría decir que una nueva versión de un sistema operativo contiene cientos de nuevas API, y lo que significa son cientos de nuevas llamadas al sistema.

Ninguno de los términos es muy preciso sin algún contexto.

Caleb
fuente
11

¿Qué es la API?

API es una interfaz que permite que los programas de software interactúen entre sí. Define un conjunto de reglas que los programas deben seguir para comunicarse entre sí. Las API generalmente especifican cómo se deben definir las rutinas, las estructuras de datos, etc. para que dos aplicaciones se comuniquen. Las API difieren en la funcionalidad que proporcionan. Existen API generales que proporcionan funcionalidades de biblioteca de un lenguaje de programación como la API de Java. También hay API que proporcionan funcionalidades específicas, como la API de Google Maps. También hay API dependientes del idioma, que solo pueden ser utilizadas por un lenguaje de programación específico. Además, hay API independientes del lenguaje que podrían usarse con varios lenguajes de programación. Las API deben implementarse con mucho cuidado exponiendo solo la funcionalidad o los datos requeridos al exterior, mientras se mantiene inaccesibles las otras partes de la aplicación. El uso de API se ha vuelto muy popular en Internet. Se ha vuelto muy común permitir parte de la funcionalidad y los datos a través de una API al exterior en la Web. Esta funcionalidad se puede combinar para ofrecer una funcionalidad mejorada a los usuarios.

¿Qué es el SDK?

SDK es un conjunto de herramientas que se pueden usar para desarrollar aplicaciones de software dirigidas a una plataforma específica. Los SDK incluyen herramientas, bibliotecas, documentación y código de muestra que ayudarían a un programador a desarrollar una aplicación. La mayoría de los SDK se pueden descargar de Internet y muchos de los SDK se proporcionan de forma gratuita para alentar a los programadores a usar el lenguaje de programación del SDK. Algunos SDK ampliamente utilizados son Java SDK (JDK) que incluye todas las bibliotecas, herramientas de depuración, etc., lo que facilitaría mucho la escritura de programas en Java. Los SDK facilitan la vida de un desarrollador de software, ya que no es necesario buscar componentes / herramientas que sean compatibles entre sí y todos están integrados en un solo paquete que es fácil de instalar.

¿Cuál es la diferencia entre API y SDK?

API es una interfaz que permite que los programas de software interactúen entre sí, mientras que un SDK es un conjunto de herramientas que pueden usarse para desarrollar aplicaciones de software dirigidas a una plataforma específica. La versión más simple de un SDK podría ser una API que contiene algunos archivos necesarios para interactuar con un lenguaje de programación específico. Por lo tanto, una API puede verse como un SDK simple sin todo el soporte de depuración, etc.

chiranjib
fuente
7

Un SDK podría ser nada más que una API (archivos para ayudar a interactuar con otra aplicación), pero generalmente incluye otro código para ayudar con la depuración y otras piezas para su IDE.

Me he quedado sin siglas.

JeffO
fuente
8
¡Rápido, consiga más TLA!
Mason Wheeler
44
Estoy casi listo para EIEIO.
JeffO
5

Todo lo mencionado anteriormente es cierto, pero sobre SDK me gustaría agregar que un kit de desarrollo de software es (o debería ser) un paquete realmente completo con (casi) todas las herramientas necesarias para el proceso de desarrollo, mientras que API es "solo" una interfaz para interactuar con

Escorchio
fuente
1

Mis dos centavos: creo que el término API a menudo se usa incorrectamente.

Una API es una interfaz de programación de aplicaciones.

Aunque es un nombre incómodo, significa que es una interfaz . Por lo tanto, una aplicación puede tener una API para permitir que otras aplicaciones se comuniquen con ella. Y una pieza de software (por ejemplo, una clase en un sistema OO) podría ofrecer una API para permitir que otros módulos en el sistema se comuniquen con él.

Sin embargo, a menudo el término API se usa como sinónimo de "biblioteca". No creo que sea un uso correcto de la palabra. Parte de la biblioteca es una API para permitir que el código la use, pero la biblioteca no es una API.

Y un SDK es un tipo de biblioteca, así que ahí es donde podría estar la confusión.

Aviv Cohn
fuente
1
Estoy de acuerdo. Probablemente me detendría antes de decir que es "incorrecto". Este barco ha navegado y el uso de "API" ha cambiado. Pero sí estoy de acuerdo en que "biblioteca" es a menudo una mejor palabra para lo que la gente llama "API"
Harry Wood
0

Muchas de las otras respuestas explican que un SDK es herramientas , pero ninguna de ellas sale directamente y dice que una API es una especificación .

La API para el componente X es toda la información que necesita para escribir algún otro componente que interactuará con X. Un SDK para el componente X puede contener rutinas de biblioteca que le faciliten escribir ese componente, pero las bibliotecas no son la API: son simplemente una encarnación de la API.

Salomón lento
fuente
¿Es esta simplemente su opinión o puede respaldarla de alguna manera?
mosquito
"la API describe y prescribe el comportamiento esperado mientras la biblioteca es una implementación real de este conjunto de reglas" en.wikipedia.org/wiki/…
Solomon Slow
por mi lectura esto no está relacionado con el punto que estamos tratando de hacer: "que una API es una especificación"
mosquito
-3

Me gustaría comparar de esta manera.

Si usted es un desarrollador que utiliza herramientas de Microsoft:

API = Microsoft.Net Framework Vs SDK = Visual Studio

Si eres un desarrollador que usa Java:

API = Java RunTime Vs SDK = Cualquier herramienta que proporcione el Kit de desarrollo (JDK)

Supongo que un SDK necesariamente tendría que depender de una API correspondiente: no hay SDK sin una API.

Arun
fuente
Creo que de lo que estás hablando en términos de Visual Studio es un IDE, que puede proporcionar acceso a uno o más SDK y / o API.
KeithS
1
Visual Studio no es un SDK, pero algunas ediciones incluyen el SDK de Windows o .NET, ya que es probable que lo desarrolles con VS.
JBRWilkinson
-3

Aquí hay una analogía simple ... Las API son como palabras que puedes usar, y los SDK son como oraciones que se han reunido para ti.

Peter
fuente
-4

A medida que las aplicaciones se desarrollan y mejoran al interactuar con otras aplicaciones, es necesario permitir que otras aplicaciones (lógica) interactúen con la lógica central; esto se hace a través de un conjunto definido de API. El SDK se usa para crear / crear código que usa API para interactuar con otras aplicaciones.

usuario144980
fuente
1
esto no parece ofrecer nada sustancial sobre los puntos realizados y explicados en anteriores 11 respuestas
mosquito