O protocolo de eventos é um esquema de abstração sobre a camada de transporte, garantindo rastreabilidade.
Essa abstração se baseia em um conjunto de convenções entre Ids e pacotes de metadados e autenticação que ajudam no rastreio e manutenção de sistemas distribuídos.
Quando trabalhamos com sistemas distribuídos, ao utilizarmos a implementação padrão do REST acabamos amarrados ao protocolo HTTP, mas não é uma realidade fazer a comunicação somente via HTTP. Há disponíveis protocolos de fila, socket, troca de arquivos.
Ao fazer uma requisição, facilmente perdemos rastreio do ponto em que algo se perdeu.
Criar um esquema que garanta a troca de chaves, o registro de metadatos e o encapsulamento do payload, garantindo o histórico da chamada e a intenção do evento.
Ao invés de representar um estado, representar um evento gerado por um terminal. Esse evento vai ser transformado e acompanhado em todo seu ciclo de vida.
O protocolo é construído em propriedades, que podem ser traduzidas em
name = identificador do evento
version = versao única do payload evento
flowId = identificador do fluxo, do início ao fim
id = identificador da sessão do terminal
payload = conteúdo do pacote do evento
metadata = dados informativos sobre o evento
identity = identidade do terminal
auth = chaves de autenticação
Identificador do evento, identificação com o domínio, o recurso e a ação que foi tomada sobre esse recurso
Cabe ao nome também trazer a natureza do event
No caso de uma resposta de sucesso, será sufixados response
, no caso de um erro, o código de identificação
O nome possui uma notação específica, que traduz o domínio, o recurso e a ação que gerou o evento
Para garantir a universalidade, a notação é separada por :
e as identificações serão em letras minúsculas apenas e underscores
[a-z_]+[a-z]:[a-z_]+[a-z]:[a-z_]+[a-z](:[a-z]+[a-z])*
Exemplo:
user:name:set
Os sufixos são utilizados nas respostas à um evento
Os sufixos podem ser de sucesso ou falha
response
: utilizado em caso de completude da requisição
error
: erro genérico de origem no servidorbad_request
: erro de natureza do requisitanteunauthorized
:auth
sem capacidade de transcrição ou gerador de permissãonot_found
: evento indisponível no servidorforbidden
:identity
proibido de acessar recursofailed_dependency
: falha por dependência não devolver resposta esperada
Versão única do payload do evento, garantindo a compatibilidade dos clientes e servidores envolvidos naquele ciclo
A versão também pode ser utilizada para identificar aquele evento como beta
, alpha
ou test
Identificador do fluxo, do início ao fim. Este identificador deve ser uma chave que garanta a unicidade do fluxo
Um fluxo é o conjunto de eventos que começa no terminal, as chamadas para os próximos servidores e clientes, até a resposta retornar ao terminal
Identificador da sessão do terminal, que deve encapsular um conjunto de eventos em um período de interação em um terminal
Conteúdo do pacote do evento, sendo crucial para o sucesso ou falha daquele evento
Dados informativos sobre o evento, não podendo interferir no sucesso ou falha daquele evento
Identidade do terminal, contendo dados que possam identifica unicamente o terminal
Não deve ser preenchida concomitantemente com auth
Chaves de autenticação, tokens como JWT
, cifradas e assinadas
Não deve ser preenchida concomitantemente com identity
Não deve conter identificadore abertos
Copyright @ 2016 Guiabolso
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.