Qual é a diferença entre um API e um Protocolo?
Uma API descreve todas as mensagens válidas que um programa pode aceitar. Ela não diz nada sobre a ordenação apropriada dessas mensagens, ou sua interação com outros programas.
Protocolos ficam em cima das APIs. Um protocolo descreve a seqüência válida de mensagens que fluem entre as APIs de várias partes para realizar alguma tarefa de nível superior.
Então, um objeto HTTPRequest pode ter uma API como:
open(method)
addHeader(name, value)
send(data, progressHandler)
abort()
com uma API HTTPRequestProgressHandler correspondente como:
ongress(percentComplete)
onsuccess()
onerror()
onaborted()
p>O protocolo para enviar uma requisição com aquela API pode ser:
1. Chame open()
2. Chame addHeader() conforme necessário
3. Chame send(), opcionalmente passando um progressHandler
4. O progressHandler terá seu método onprogress chamado repetidamente enquanto o send() estiver em progresso
5. Chame abort() se necessário
6. O progressHandler terá seu método onsucess, onerror, ou onaborted chamado quando a requisição for concluída.
Note que o termo "mensagem" aqui é conceitual. APIs e protocolos podem ocorrer em qualquer meio de comunicação. As mensagens podem ser chamadas de funções locais dentro de um processo, chamadas IPC dentro de uma máquina, bits em um fio, chamadas REST através da Internet, etc.