Qual é a diferença entre uma api e um protocolo?

Para ilustrar com um protocolo e API conhecidos:

TCP é Protocolo de Controle de Transporte. É um protocolo de handshake de três vias com um conjunto preciso de regras associadas a ele.

O protocolo expõe seus serviços a protocolos de nível superior por meio de uma interface ou API. No caso do protocolo TCP, essa interface é uma interface de soquete. Um protocolo de nível superior, como HTTP, pode usar o protocolo TCP por meio de sua interface / API de soquete exposto.

Uma API é específica para um aplicativo, por exemplo, a API do Twitter (ou algumas das APIs ruins que o Google publica).

Um protocolo é um padrão neutro de fornecedor / sistema (de fato ou de direito) que define que os exemplos de processos são tratados: X.400, X.500, TCP / IP.

Um protocolo é provavelmente melhor documentado do que uma API, em média, compara os detalhes de uma especificação OSI versus algumas das más documentações de APIs que o Google possui realmente muito ruim.

Uma API:

-é especificado nos termos de uma linguagem de programação

-especifica como duas unidades de código se comunicarão dentro do mesmo programa

Por exemplo, a biblioteca padrão C é uma API. É especificado nos termos de uma linguagem de programação, “C” (ex .: função C “printf (formato char *,…)”). Ele especifica como o programa do usuário se comunicará com a C Runtime Library. O código C do usuário e a Biblioteca Padrão C são vinculados (estaticamente ou dinamicamente) para formar um programa executável.

Um protocolo:

-é especificado em termos de bytes de dados. É independente de qualquer linguagem de programação específica

-especifica a interação entre dois programas separados e independentes

Por exemplo, HTTP é um protocolo. É especificado em termos de bytes de dados (por exemplo: string ASCII “GET”). Ele especifica como dois programas independentes e separados (um cliente HTTP e um servidor HTTP) se comunicarão.

A principal diferença, como Sam mencionou em sua resposta, é o nível (ou camada) em que cada um é implementado.

Uma API é uma interface para um sistema subjacente destinado ao uso do programador de aplicativos na construção de seus aplicativos ou, geralmente, para permitir a integração com outros aplicativos. Seus objetivos são tipicamente abstrair o máximo possível os detalhes de baixo nível do sistema subjacente, tornando assim o programador mais fácil e sua interação com o sistema mais segura.

Um protocolo, por outro lado, é tipicamente uma construção de nível inferior definida como um conjunto de regras que regem como os componentes do aplicativo interagem e como as funções da API são realmente implementadas fisicamente. Um protocolo pode ser tão específico quanto especificar um nível de bits, no entanto, isso é raro, pois a maioria (mas não todos) os aplicativos utiliza TCP / IP.

API significa "Interface de programação de aplicativos"; refere-se aos procedimentos e / ou estruturas de dados que um software disponibiliza para outro. Por exemplo, as bibliotecas do sistema podem disponibilizar um procedimento chamado "aberto", que permite que um programa disponibilize um arquivo para leitura (por meio de um segundo procedimento chamado "leitura").

Protocolo é, para meu conhecimento limitado, definido com menos precisão (ou mais especificamente, possui várias definições). Por exemplo, no modelo clássico de "camada" OSI de redes de computadores, existem vários protocolos em cada uma das várias camadas: a camada "rede" tem IP; a camada "aplicativo" possui milhares (principalmente HTTP e SMTP) e, claro, na camada de transporte, há TCP e UDP e outros. Em todas essas siglas, o "P" significa "Protocolo". A palavra também pode ser um termo artístico em outros contextos.

Uma API descreve todas as mensagens válidas que um programa pode aceitar. Não diz nada sobre a ordem adequada dessas mensagens ou a interação delas com outros programas.

Os protocolos estão no topo das APIs. Um protocolo descreve a sequência válida de mensagens que fluem entre as APIs de várias partes para realizar alguma tarefa de nível superior.

Portanto, um objeto HTTPRequest pode ter uma API como:

open (método) addHeader (nome, valor) send (data, progressHandler) abort ()

com uma API HTTPRequestProgressHandler correspondente, como:

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

O protocolo para enviar uma solicitação com essa API pode ser:

1. Chamada aberta () 2. Chame addHeader () conforme necessário3. Chame send (), opcionalmente passando um progressHandler4. O progressHandler terá seu método onprogress chamado repetidamente enquanto o send () estiver em andamento5. Chame abort () se necessário6. O progressHandler terá seu método onsucess, onerror ou onaborted chamado quando a solicitação for concluída.

Observe que o termo "mensagem" aqui é conceitual. APIs e protocolos podem ocorrer em qualquer meio de comunicação. As mensagens podem ser chamadas de função local em um processo, chamadas IPC em uma máquina, bits em uma ligação, chamadas REST na Internet etc.