REST vs. gRPC: Qual Escolher para o Seu Próximo Projeto?

Foto do autor

By luis

Ao trabalhar com APIs, é comum encontrar as abordagens REST e gRPC. Embora o REST tenha sido predominante por um longo período, o gRPC tem se mostrado um forte concorrente.

REST e gRPC são duas metodologias distintas para a concepção de uma API. As APIs funcionam como canais de comunicação entre serviços, os quais podem representar sistemas complexos distribuídos em diferentes máquinas ou desenvolvidos em linguagens de programação variadas.

Neste artigo, vamos explorar o REST e o gRPC, destacando suas semelhanças, diferenças e as situações ideais para a utilização de cada um.

O que é REST?

REST (Transferência de Estado Representacional) é um modelo arquitetônico de software que define diretrizes para a troca de dados entre componentes de software. O REST é baseado no protocolo HTTP, o padrão para comunicação na web.

Todas as APIs que seguem o estilo arquitetônico REST são designadas como APIs RESTful. Similarmente, os serviços da web que adotam o design arquitetônico REST são conhecidos como serviços da web RESTful.

O modelo arquitetônico REST é regido pelos seguintes princípios:

  • Interface uniforme: O servidor deve transmitir dados em um formato padrão. No entanto, a forma dos dados pode ser diferente da representação interna do recurso no aplicativo do servidor.
  • Ausência de estado (Stateless): O servidor deve processar cada solicitação do cliente de forma independente, sem levar em consideração as solicitações anteriores. As requisições de recursos do cliente podem ocorrer em qualquer ordem, com cada solicitação sendo isolada das demais.
  • Sistema em camadas: Introduz uma camada de intermediários autorizados entre o servidor e o cliente. O cliente pode interagir com esses intermediários e ainda receber respostas do servidor.
  • Capacidade de Cache: Algumas respostas são armazenadas em um intermediário ou no cliente, visando aprimorar o tempo de resposta.
  • Código sob demanda: Os servidores personalizam ou expandem a funcionalidade do cliente ao transferir código de programação para o cliente.

Vantagens do REST

  • Escalabilidade: As APIs REST são reconhecidas por sua escalabilidade, otimizando as interações entre cliente e servidor. O armazenamento em cache e a ausência de estado são fatores cruciais que reduzem a sobrecarga do servidor.
  • Flexibilidade: APIs RESTful proporcionam uma separação total entre cliente e servidor. Esses serviços desacoplam e simplificam os diversos componentes do servidor, que podem evoluir de forma independente.
  • Independência: É possível desenvolver aplicativos de servidor e cliente em diferentes linguagens de programação, sem que isso afete o design da API.

Aplicações do REST

  • APIs web
  • Serviços web
  • Arquitetura de microsserviços

O que é gRPC?

gRPC é um framework de chamada de procedimento remoto (RPC) que pode ser executado em qualquer ambiente. Essa estrutura de código aberto foi criada como um protocolo de alta performance, capaz de conectar serviços de forma eficaz tanto dentro como entre data centers.

Um aplicativo cliente pode invocar um método em um aplicativo servidor em outra máquina como se fosse um objeto local. Com o gRPC, você define um serviço e especifica os métodos que podem ser invocados remotamente, juntamente com seus parâmetros e tipos de retorno.

O gRPC oferece verificação de integridade conectável, autenticação, balanceamento de carga e suporte para rastreamento. Essa estrutura utiliza HTTP 2 e buffers de protocolo para a transmissão de dados. Na troca de dados, um procedimento é invocado em vez de um URL de recurso.

Vantagens do gRPC

  • Escalabilidade: o gRPC permite configurar ambientes de tempo de execução com um único comando, escalando para milhões de RPCs por segundo.
  • Definição simples de serviço: Utilize buffers de protocolo para definir seus serviços e colocá-los em operação.
  • Plataforma cruzada: essa estrutura gera stubs de cliente e servidor para diversas plataformas e linguagens.
  • Streaming bidirecional e autenticação integrada.

Aplicações do gRPC

  • APIs web
  • Serviços web
  • Aplicativos de streaming
  • Comunicação de microsserviços

Semelhanças entre REST e gRPC

  • Mecanismo de troca de dados: Ambas as abordagens arquitetônicas permitem que servidores e clientes troquem informações, obedecendo a certas regras.
  • Adequado para sistemas escaláveis e distribuídos: A comunicação assíncrona e o design sem estado do REST e do gRPC facilitam a escalabilidade de suas APIs.
  • Comunicação baseada em HTTP: Ambos utilizam o HTTP, o protocolo de comunicação padrão da web.
  • Flexibilidade: REST e gRPC podem ser utilizados com diversas tecnologias e linguagens de programação.

REST x gRPC: Comparação Detalhada

Os serviços REST e gRPC se diferenciam nos seguintes aspectos:

Troca de Dados

Em APIs REST, os dados transmitidos entre componentes de software devem ser expressos no formato JSON. O JSON precisa ser serializado e traduzido para uma linguagem de programação para a troca de informações. No entanto, APIs REST também podem usar outros formatos, como HTML e XML.

Por padrão, o gRPC utiliza o formato Protocol Buffers. Contudo, também oferece suporte nativo para JSON. Os Protocol Buffers não são legíveis por humanos. O servidor usa a linguagem de descrição de interface Protocol Buffer para definir uma estrutura de dados. O gRPC, então, serializa essa estrutura para um formato binário e desserializa os dados em qualquer linguagem de programação especificada.

Modelo de Comunicação

No REST, um cliente envia uma única solicitação a um servidor, que envia uma resposta correspondente. O cliente precisa aguardar a resposta do servidor antes de prosseguir com suas operações. Trata-se de um modelo de requisição-resposta.

Já no gRPC, um cliente pode enviar uma ou mais solicitações a um servidor, resultando em uma ou mais respostas, respectivamente. As conexões de dados podem ser de muitos-para-muitos, muitos-para-um, um-para-muitos ou um-para-um. O gRPC emprega um modelo de comunicação de resposta do cliente.

Geração de Código

O gRPC possui recursos de geração de código nativos, tanto no lado do servidor quanto do cliente. Esses recursos estão disponíveis em diversas linguagens, graças ao compilador Protocol Buffers. O gRPC gera o código do lado do servidor e do cliente após a definição da estrutura no arquivo proto.

O REST não possui recursos de geração de código integrados. Caso necessite dessa funcionalidade, pode-se recorrer a ferramentas de terceiros.

Protocolo HTTP

As APIs REST utilizam HTTP 1.1. Para enviar uma solicitação em um serviço REST, é necessário um URL de recurso. O HTTP 1 envia informações entre um computador e um servidor web. O URL do recurso no serviço REST é visível para o cliente. Os designers de API controlam a estrutura dos URLs de recursos.

O gRPC usa HTTP 2. Essa versão do HTTP foi introduzida em 2015 e é usada em navegadores como Internet Explorer, Safari e Chrome. Diferentemente do HTTP 1, que mantém tudo em texto simples, esse formato mais recente utiliza encapsulamento de formato binário, o que proporciona mais opções de entrega de dados e acelera o processo.

Estrutura de Dados da Carga Útil

O REST utiliza XML ou JSON para enviar e receber dados. O JSON é o formato mais utilizado para o envio de dados dinâmicos em REST, devido à sua flexibilidade e ausência de estrutura pré-definida. Os dados JSON também são legíveis por humanos. A única desvantagem do JSON é sua velocidade, pois ele precisa ser serializado e traduzido durante a transferência de dados.

O gRPC utiliza buffers de protocolo para serializar os dados da carga útil. Trata-se de um formato altamente compactado que reduz o tamanho das mensagens. Essa estrutura usa Protobuf para converter automaticamente mensagens com tipos definidos nas linguagens de programação do cliente e do servidor.

Suporte a Navegadores

O REST é compatível com todos os navegadores, pois utiliza HTTP 1.1. Isso o torna uma escolha ideal para serviços web e APIs.

O gRPC tem suporte limitado para navegadores, uma vez que se baseia em HTTP 2. Para oferecer suporte a todos os navegadores, é necessário adicionar o gRPC-web como uma camada proxy. Por esse motivo, o gRPC é mais utilizado em sistemas internos.

Acoplamento Cliente-Servidor

O REST é um projeto de arquitetura com baixo acoplamento. Isso significa que o cliente e o servidor não precisam conhecer as implementações um do outro. Essa característica facilita a evolução de uma API RESTful ao longo do tempo, uma vez que não é necessário alterar o código do cliente ao modificar as definições do servidor.

O gRPC é um framework com alto acoplamento, em que o servidor e o cliente precisam ter acesso ao mesmo arquivo proto. Ao realizar alterações no arquivo, é necessário atualizar também o servidor e o cliente.

REST vs. gRPC

Recurso REST gRPC
Protocolo HTTP HTTP 1.1 HTTP 2
Suporte ao navegador Suporta todos os navegadores, pois usa HTTP 1.1 Suporte ao navegador limitado, pois usa HTTP 2
Geração de código Usa ferramentas de terceiros Recursos de geração de código integrados
Abordagem de design Design orientado a entidades Abordagem orientada a serviços
Acesso a dados URLs de recursos Chamadas de serviço
Fluxo de dados bidirecional Indisponível Disponível
Implementação Nenhum software comum é necessário para implementar REST no cliente ou no lado do servidor Software RPC é necessário tanto no lado do cliente quanto no lado do servidor.
Modelo de comunicação Um único cliente se comunica com um único servidor Vários modelos de comunicação, como um cliente enviando solicitações para vários servidores, um servidor se comunicando com vários clientes ou um servidor se comunicando com um cliente.

Quando Usar REST

APIs RESTful e serviços web são amplamente populares. Serviços RESTful são fáceis de implementar, estruturar dados, flexíveis e legíveis. Você pode utilizar o REST nas seguintes situações:

  • Arquiteturas baseadas na web: é possível criar APIs web, móveis e multiplataforma utilizando o design arquitetônico REST.
  • Comunicações de dados simples: O REST utiliza JSON, um formato de dados de fácil leitura.
  • APIs voltadas para o público: Caso seu objetivo seja que o público consuma dados e utilize sua API, o REST é uma boa alternativa, devido à sua legibilidade.

Quando Usar gRPC

O gRPC não é tão popular quanto os serviços RESTful. No entanto, ele possui características únicas que o destacam em certas aplicações:

  • Sistemas multilíngues: O gRPC se adapta a arquiteturas de microsserviços desenvolvidas em diferentes linguagens de programação, nas quais a API provavelmente não será alterada.
  • Conexões de microsserviços: Recursos como streaming bidirecional e suporte limitado a navegadores tornam o gRPC uma boa opção para APIs internas.
  • Redes de streaming em tempo real: O gRPC pode ser utilizado com serviços internos que lidam com grandes volumes de dados e exigem streaming em tempo real.

Opinião dos Autores

Embora o gRPC possua algumas características específicas que podem ofuscar o REST em aplicações como a Internet das Coisas, o REST se destaca devido à sua legibilidade, flexibilidade e ampla adoção. O suporte inferior a navegadores do gRPC o torna uma escolha menos interessante para desenvolvedores que desejam criar serviços web.

O suporte universal para serviços RESTful torna o REST o estilo de arquitetura de API ideal para integrações de microsserviços e web.

Conclusão

REST e gRPC são dois dos muitos estilos de arquitetura de API disponíveis na hora de criar uma nova API. A escolha final dependerá do produto que você deseja construir. Serviços RESTful são perfeitos para criar APIs voltadas para o público, enquanto o gRPC é uma boa opção para serviços como aplicativos móveis que não demandam suporte a navegadores.

Em seguida, confira nosso artigo sobre como criar um gRPC do zero usando Java.