-
Notifications
You must be signed in to change notification settings - Fork 0
1.0 Omcp
OSIRIS module communication protocol
O OMCP é um protocolo de comunicação desenvolvido para a comunicação entre os módulos do OSIRIS Framework. Baseado no HTTP, implementa o estilo arquitetural REST. O protocolo define métodos para requisição, códigos de resposta e formato do pacote de comunicação. Em resumo, o protocolo define como os módulos devem comunicar-se.
A motivação para a construção deste protocolo vem do fato do OSIRIS internamente utilizar um broker para a troca de mensagens ponto a ponto. Devido à necessidade de realizar chamadas RPC entre os módulos, a troca de mensagens se tornaram pacotes de dados, definindo um método de chamada, parâmetros de cabeçalho e os dados a serem transmitidos. Apesar de o protocolo ter sido desenvolvido para funcionar com um broker de mensagens, nada impede que o mesmo trabalhe sobre outros protocolos de comunicação, como o HTTP por exemplo.
O OMCP define cinco métodos para uso: GET, POST, PUT, DELETE e NOTIFY. Os quatro primeiros métodos funcionam para chamadas síncronas, RPC, já que eles necessitam de retorno obrigatório. Já o NOTIFY é um método sem retorno, que pode ser utilizado para notificar os módulos assincronamente. O protocolo não garante que uma mensagem assíncrona seja entregue ao destinatário, cabendo à implementação definir este quesito. Baseado no HTTP1.1 RESTFUL, os métodos GET, POST, PUT e DELETE desempenham comportamento similar. O GET recupera informações de um recurso, o POST cria um novo recurso, o PUT atualiza um recurso e o DELETE apaga um recurso existente.
Os quatro métodos síncronos precisam de retorno. Para isso foram criados códigos para identificar um resultado do servidor. Estes códigos também foram baseados no HTTP.
2xx – Sucesso. Ação recebida com sucesso, entendida e aceita | |
---|---|
200 | OK |
201 | CREATED |
4xx – Erro do cliente. A requisição contém sintaxe errônea ou não pode ser realizada | |
400 | BAD_REQUEST |
403 | FORBIDDEN |
404 | NOT_FOUND |
405 | METHOD_NOT_ALLOWED |
5xx – Erro do servidor. Falha do servidor para atender uma requisição aparentemente válida | |
500 | INTERNAL_SERVER_ERROR |
501 | NOT_IMPLEMENTED |
O OMCP define dois pacotes para o protocolo: o pacote de requisição e o pacote de resposta. Baseados no HTTP.
O pacote de requisição segue o seguinte modelo:
Método | Caminho do recurso | Versão do protocolo |
date | Data e hora de envio | |
module | Módulo destinatário | |
source | Nome da fonte requisitora | |
content-type | Tipo do dado enviado(usado em POST/PUT/NOTIFY ou GET para definir o tipo do dado de resposta) | |
content-length | Tamanho do dado enviado(usado em POST/PUT/NOTIFY) | |
... | ||
Dados do pacote(usado em POST/PUT/NOTIFY) |
O pacote de resposta segue o modelo:
Versão do protocolo | Código de retorno | Descrição de retorno |
date | Data e hora de envio | |
module | Descrição do módulo destinatário | |
content-type | Tipo do dado enviado(usado em GET) | |
content-length | Tamanho do dado enviado(usado em GET) | |
location | Caminho completo de onde um recurso foi criado(usado em POST) | |
error | Mensagem de erro(usado em caso de erro) | |
... | ||
Dados do pacote(usado em GET) |
A seguir é apresentada uma tabela com os métodos e as características das respostas padrão dos pacotes:
Método de requisição | Código de resposta | Retorno | Cabeçalho |
---|---|---|---|
GET | 200 OK | Object | content-length |
POST | 201 CREATED | location | |
PUT | 200 OK | ||
DELETE | 200 OK | ||
NOTIFY |
O OMCP é um protocolo projetado para funcionar onde todos os parceiros para a comunicação são conhecidos. Diferente do HTTP, que utiliza o serviço de DNS para resolver nomes em endereços IP, o OMCP parte do princípio que todos os pares sejam previamente conhecidos, como se os mesmos estivessem em um mesmo ambiente.
A topologia do OMCP é similar a topologia estrela, onde todos estão conectados à todos. A seguir, uma imagem para ilustrar a organização.