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

Una API describe todos los mensajes válidos que un programa puede aceptar. No dice nada sobre el orden adecuado de estos mensajes, o su interacción con otros programas.

Los protocolos se sientan encima de las API. Un protocolo describe la secuencia válida de mensajes que fluyen entre las API de múltiples partes para realizar alguna tarea de nivel superior.

Entonces, un objeto HTTPRequest podría tener una API como:

abierto (método)
addHeader (nombre, valor)
enviar (data, progressHandler)
abortar()

con una API HTTPRequestProgressHandler correspondiente como:

onprogress (percentComplete)
onsuccess ()
onerror ()
onaborted ()

El protocolo para enviar una solicitud con esa API podría ser:

1. Llamada abierta ()
2. Llame a addHeader () según sea necesario
3. Llame a send (), opcionalmente pasando un progressHandler
4. El progressHandler tendrá su método onprogress llamado repetidamente mientras el send () está en progreso
5. Llame a abortar () si es necesario
6. El progressHandler tendrá su método onucess, onerror o onaborted cuando se complete la solicitud.

Tenga en cuenta que el término “mensaje” aquí es conceptual. Las API y los protocolos pueden tener lugar en cualquier medio de comunicación. Los mensajes pueden ser llamadas a funciones locales dentro de un proceso, llamadas IPC dentro de una máquina, bits en un cable, llamadas REST a través de Internet, etc.

API significa “interfaz de programación de aplicaciones”; se refiere a los procedimientos y / o estructuras de datos que una pieza de software pone a disposición de otra. Por ejemplo, las bibliotecas del sistema pueden poner a disposición un procedimiento llamado “abierto” que permite que un programa ponga a disposición un archivo para leer (a través de un segundo procedimiento llamado “leer”).

Según mi conocimiento limitado, el protocolo se define con menos precisión (o más específicamente, tiene múltiples definiciones). Por ejemplo, en el modelo clásico de “capa” OSI de redes de computadoras, existen múltiples protocolos en cada una de varias capas: la capa de “red” tiene IP; la capa de “aplicación” tiene miles (especialmente HTTP y SMTP), y por supuesto en la capa de transporte hay TCP y UDP y otros. En todas esas siglas, la “P” significa “Protocolo”. La palabra también puede ser un término de arte en otros contextos.

La principal diferencia, como Sam aludió en su respuesta, es el nivel (o capa) en el que se implementa cada uno.

Una API es una interfaz con un sistema subyacente destinado al uso del programador de aplicaciones para crear su aplicación o, a menudo, para permitir la integración con otras aplicaciones. Por lo general, sus objetivos son abstraer la mayor cantidad posible de los detalles de bajo nivel del sistema subyacente, lo que hace que el programador sea más fácil y su interacción con el sistema sea más segura y segura.

Un protocolo, por otro lado, es típicamente una construcción de nivel inferior definida como un conjunto de reglas que gobiernan cómo interactúan los componentes de la aplicación y cómo las funciones de API se implementan físicamente. Un protocolo puede ser tan específico como para especificar cosas hasta un nivel de bits, sin embargo, esto es raro ya que la mayoría (pero no todas) las aplicaciones utilizan TCP / IP.