Programação Concorrente e Distribuída

Introdução à Comunicação e REST

Aula 07 — Protocolos, tipos de comunicação e arquitetura REST
Prof. Newton S. B. Miyoshi
newton.miyoshi@baraodemaua.br
Centro Universitário Barão de Mauá — Ribeirão Preto
Parte 1

Camadas de Protocolos

Como processos combinam o formato das mensagens que trocam.

Comunicação — Introdução

  • Programação distribuída depende de comunicação interprocesso — troca de informação.
  • Trocar mensagens em uma rede é mais difícil do que usar primitivas em memória compartilhada.
  • A base das comunicações em sistemas distribuídos são os protocolos de comunicação em rede.

Protocolos em Camadas

  • Não há memória compartilhada entre processos em máquinas diferentes.
  • A comunicação acontece por troca de mensagens.
  • Formato e significado das mensagens precisam estar combinados entre os dois processos — isso é um protocolo.
  • Um protocolo de comunicação define um serviço, e pode ser orientado à conexão ou sem conexão.

Protocolos em Camadas — Modelo OSI

Modelo OSI de 7 camadas, cada uma com seu protocolo entre as duas pontas
Cada camada fala com sua equivalente do outro lado através de um protocolo específico.

Protocolos em Camadas — Mensagens e Cabeçalhos

Mensagem com um cabeçalho de cada camada de protocolo, do link de dados até a aplicação
Cada camada adiciona seu próprio cabeçalho — a multiplexação/demultiplexação usa esses cabeçalhos para saber a quem entregar a mensagem.

Protocolos em Camadas — Protocolos

Rede

IP — Internet Protocol

Transporte

TCP, UDP, RTP

Aplicação

HTTP, FTP, SMTP

Protocolos de Comunicação

Protocolos de aplicação são construídos empilhados sobre os protocolos de transporte — TCP ou UDP.

REST
GraphQL
gRPC
WebSockets
Web Service
VoIP
HTTP 1.1
HTTP 2
QUIC / HTTP 3
TCP
UDP

Protocolos em Camadas — Protocolos de Middleware

  • Middleware é uma aplicação que busca simplificar a complexidade da comunicação usando o modelo OSI.
  • Exemplos de protocolos utilizados por middleware:
    • DNS pode ser visto como uma aplicação de propósito geral que pode ser parte de um middleware.
    • Protocolos de autenticação e autorização — ex.: OAuth.
    • Protocolos de transação e travamento (lock).
Parte 2

Tipos de Comunicação

Persistência e sincronicidade das mensagens.

Middleware como serviço entre cliente e servidor

Um middleware pode oferecer vários tipos de serviço às aplicações — considere-o como um serviço adicional entre o cliente e o servidor, a nível de aplicação.

Cliente
Middlewareserviço adicional
Servidor
Quanto à persistência

Comunicação Persistente

  • A mensagem é armazenada no middleware de comunicação pelo tempo necessário até ser entregue ao destinatário.
  • O remetente não precisa aguardar nem o destinatário estar em execução.
  • Ex.: e-mail, WhatsApp.
Quanto à persistência

Comunicação Transiente

  • A mensagem só é armazenada enquanto ambas as aplicações (remetente e destinatária) estiverem em execução.
  • Se houver problema na transmissão, a mensagem é descartada — não fica guardada no middleware.
  • Ex.: todos os protocolos de transporte são transientes.
Quanto à assincronicidade

Comunicação Assíncrona

O remetente continua sua execução logo após o envio da mensagem — sem esperar resposta.

Quanto à assincronicidade

Comunicação Síncrona

Diagrama com os três pontos de sincronização: na submissão, na entrega e no processamento pelo servidor
O remetente aguarda (bloqueante) — a sincronização pode ocorrer no envio, na entrega ou no processamento completo pelo destinatário.

Combinando persistência e sincronicidade

Sistemas de fila de mensagens

Comunicação persistente, com sincronização no envio.

Chamadas de procedimento remotas

Comunicação transiente, com sincronização após o processamento.

Parte 3

REST

A arquitetura por trás da maioria das APIs web.

REpresentational State Transfer — REST

  • Transferência de Estado Representacional”.
  • Proposto na tese de doutorado de Roy Fielding, em 2000.
  • Uma nova arquitetura para sistemas na Web.
Foto de Roy Fielding, criador do REST
Roy Fielding

Os conceitos do REST

Diagrama UML dos conceitos do REST: Application, Representation, Resource, Entity, Message, User agent, URI e Origin server, e suas relações
Um recurso (identificado por uma URI) é representado em mensagens trocadas entre um user agent e um origin server.

REpresentational State Transfer — REST

  • Propriedades:
    • Sem estado (Stateless).
    • Cacheável.
    • Arquitetura Cliente-Servidor em camadas.
    • Interface Uniforme.
Atenção
REST HTTP — REST é um estilo arquitetural; HTTP é apenas o protocolo mais usado para implementá-lo.

Serviços Web RESTful

  • Usam todos os métodos HTTP: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD.
  • Gerenciam recursos/entidades.
  • Representação padrão: JSON.
Diagrama: cliente envia HTTP com verbo GET/POST/DELETE/PUT para uma URL no servidor, que responde com JSON
REST na prática — e-commerce

Listar e obter detalhes de um recurso

Recurso: Produto — parte do CRUD (Create, Retrieve, Update, Delete).


GET /:nome_recurso_plural
GET /products

GET /produtos/:id
GET /produtos/2342
GET /produtos/ram-ddr4-16-adata-23
        

O identificador pode ser um id numérico ou um slug — ambos identificam o recurso de forma única.

REST na prática — e-commerce

Criar um novo recurso


POST /:nome_recurso_plural
POST /products
        

Os dados do novo recurso vão em JSON no corpo da requisição.

REST na prática — e-commerce

Atualizar todos os dados de um recurso


PUT /:nome_recurso_plural/:id_recurso
PUT /products/:id
        

Os dados completos do recurso vão em JSON no corpo — PUT substitui o recurso por inteiro.

REST na prática — e-commerce

Atualizar parcialmente um recurso


PATCH /:nome_recurso_plural/:id_recurso
PATCH /products/:id
        

Só os campos enviados em JSON são alterados — os demais permanecem como estavam.

REST na prática — e-commerce

Deletar um recurso e outros métodos


DELETE /:nome_recurso_plural/:id_recurso
DELETE /products/:id
        
  • OPTIONS — verifica quais métodos são permitidos para uma entidade.
  • HEAD — obtém metadados de um recurso (campos, tamanho, última versão…) sem baixar o corpo.

Códigos HTTP

CódigoSignificado
200Requisição processada com sucesso.
201Recurso criado com sucesso.
400Bad Request — dados inválidos enviados.
401Não autorizado.
404Recurso não encontrado.
500Erro geral no servidor.

REST Design / Build / Generate

Swagger UI documentando os endpoints de uma Todo API: GET, POST, PUT e DELETE
OpenAPI descreve a API; ferramentas como o Swagger geram documentação e clientes automaticamente a partir dessa descrição.
Ferramentas

Clientes REST

Logo do Insomnia
Insomnia
Logo do Postman
Postman
Logo do Bruno
Bruno
Exemplo prático

API REST com Django e Django Ninja

Exemplo completo disponível no GitHub da disciplina.

Material em vídeo Miniatura do vídeo FastAPI do zero — Criando um CRUD Playlist REST + FastAPI — playlist completa youtube.com/watch?v=QShMRcicxnE

Playlist bem completa sobre REST e como criar uma API com FastAPI. Para uma visão mais geral, vale começar pelo vídeo 3.

Referências bibliográficas

  • TANENBAUM, A. S.; VAN STEEN, M. Distributed Systems. 3. ed. 2018. Cap. 4. ISBN 978-90-815406-2-9. distributed-systems.net