DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on

Descomplicando RPC e gRPC

Introdução

A Chamada de Procedimento Remoto (RPC) é um dos paradigmas mais simples de API, em que um cliente executa um bloco de código em outro servidor.

Imagine que você tem um aplicativo no seu computador (Cliente) e ele precisa calcular uma fórmula complexa. Em vez de calcular isso localmente, ele chama uma função chamada CalcularImposto(). A mágica do RPC é que essa função não existe no seu computador; ela está em um servidor do outro lado do mundo.

Para fazer isso parecer local, o RPC usa um conceito chamado Stub:

  1. O Cliente chama o Client Stub (um pedaço de código local que finge ser a função real).
  2. O Stub pega os parâmetros que você passou, empacota tudo (processo chamado de Serialização) e envia pela rede.
  3. O servidor recebe a mensagem, passa para o Server Stub, que desempacota os dados (Desserialização) e chama a função real.
  4. O resultado faz o caminho inverso até chegar ao seu cliente.

O grande objetivo do RPC é esconder a complexidade da rede. O desenvolvedor apenas chama funções, sem se preocupar em montar requisições HTTP ou gerenciar conexões manualmente.

Exemplo

POST
/api/conversations.archive
HOST slack.com
Content-Type: application/x-www-form-urlencoded
Authorization:
Bearer xoxp-1650112-jgc2asDae

channel=C01234
Enter fullscreen mode Exit fullscreen mode

API de Conversação do Slack

Diferente do REST, onde o verbo é passado no argumento do método HTTP, no RPC o verbo é explícito dentro da URI.

Método Descrição
conversations.archive Archives a conversation.
conversations.close Closes a direct message or multi-person direct message.
conversations.create Initiates a public or private channel-based conversation
conversations.history Fetches a conversation's history of messages and events.
conversations.info Retrieve information about a conversation.
conversations.invite Invites users to a channel.
conversations.join Joins an existing conversation.
conversations.kick Removes a user from a conversation.
conversations.leave Leaves a conversation.
conversations.list Lists all channels in a Slack team.
conversations.members Retrieve members of a conversation.
conversations.open Opens or resumes a direct message or multi-person direct message.

Top comments (0)