Como iniciar o uso do gRPC com PHP – Parte 2

Vamos explorar o uso de um servidor gRPC com Golang, convenientemente empacotado como um container Docker. O código fonte do servidor será apresentado para fins didáticos, mas não é necessário ser um desenvolvedor Golang para acompanhar. Ao final, você terá um servidor gRPC em execução e testado com sucesso usando a ferramenta grpcurl.

Requisitos do Ambiente

Antes de começar, verifique se sua máquina de desenvolvimento possui os seguintes serviços instalados e prontos para uso:

  • Linux ou WSL (Windows não está incluído neste guia)
  • Docker
  • grpcurl

Certifique-se de que todos os componentes estejam devidamente instalados para evitar problemas durante o processo. A configuração correta do ambiente é crucial para o sucesso deste guia.

Servidor GRPC e Arquivo Protobuff

Este guia é sobre PHP, mas estamos usando um servidor Golang. Isso porque não é possível criar um servidor gRPC usando PHP, apenas clients. Você pode ler mais sobre isso na página oficial do gRPC PHP.

Para usar gRPC, o primeiro passo é escrever um arquivo .proto:

syntax = "proto3";

option go_package = "getjv.github.com/protos";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}

  // Sends a stream of greetings from server to client
  rpc StreamGreetings (HelloRequest) returns (stream HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

Para simplificar, vamos pular os detalhes da especificação do Protocol Buffers. Se quiser saber mais, visite a especificação oficial do protobuff, mas não é essencial agora.

Os pontos mais importantes são:

  1. Existem dois serviços disponíveis: SayHello e StreamGreetings.
  2. Ambos usam os mesmos tipos de solicitação e resposta: HelloRequest e HelloReply.

Agora que sabemos o que está definido no arquivo proto, entendemos o que esperar do servidor gRPC com o qual vamos interagir.

Iniciando o Servidor gRPC com Docker

Para baixar e iniciar o servidor gRPC, execute o seguinte comando:

docker run --rm --name grpc -p 50051:50051 getjv/go-grpc-server

Este comando baixa uma imagem pronta do meu Docker Hub pessoal. O resultado esperado deve ser:

$ docker run --rm --name grpc -p 50051:50051 getjv/hello-go-grpc-server
Unable to find image 'getjv/hello-go-grpc-server:latest' locally
[...]
Status: Downloaded newer image for getjv/hello-go-grpc-server:latest
2025/01/19 12:47:38 GreeterSrvImpl listening at [::]:50051

Neste ponto, seu terminal deve estar bloqueado e aguardando chamadas gRPC na porta 50051. Agora é hora de testar o serviço usando a ferramenta grpcurl.

O gRPCurl é uma ferramenta muito útil, e os principais comandos são:

  • grpcurl -plaintext [::]:50051 list – lista os serviços disponíveis.
  • grpcurl -plaintext [::]:50051 describe <ServiceName> – fornece mais informações sobre o serviço disponível.
  • grpcurl -plaintext -d '<JSON-Payload>' [::]:50051 <ServiceName.MethodName> – faz uma chamada direta a um método com um payload.

Execute estes comandos em ordem, e você poderá chamar qualquer serviço assim:

grpcurl -plaintext -d '{"name": "jhonatan"}' [::]:50051 helloworld.Greeter.SayHello

O resultado deve ser:

$ grpcurl -plaintext -d '{"name": "jhonatan"}' [::]:50051 helloworld.Greeter.SayHello
{
  "message": "Hello jhonatan"
}

Com estes passos, temos o servidor rodando e funcionando corretamente. Agora é hora de preparar o lado do PHP.

Até o próximo post!

Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.
Via Dev.to

Leave a Comment