Skip to content
Felipe Santos edited this page Mar 26, 2015 · 1 revision

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.

Motivação

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.

Características

Métodos de requisição

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.

Códigos de resposta

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

Pacotes

O OMCP define dois pacotes para o protocolo: o pacote de requisição e o pacote de resposta. Baseados no HTTP.

Requisição

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)

Resposta

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)

Relação requisição e resposta para ação de sucesso

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

Serviço de descoberta

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.

Topologia

A topologia do OMCP é similar a topologia estrela, onde todos estão conectados à todos. A seguir, uma imagem para ilustrar a organização.

cliente