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:
- Existem dois serviços disponíveis:
SayHello
eStreamGreetings
. - Ambos usam os mesmos tipos de solicitação e resposta:
HelloRequest
eHelloReply
.
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