Skip to content
Latchkey

O Que É gRPC Reflection? Explicado

gRPC reflection é um protocolo que permite a um servidor gRPC descrever seus próprios serviços em tempo de execução, para que clientes e ferramentas descubram e chamem métodos sem o arquivo .proto.

Como o gRPC usa um formato protobuf binário, você normalmente precisa do schema .proto para conversar com um servidor. O gRPC reflection remove esse requisito em tempo de execução: o servidor pode entregar suas próprias definições de serviço quando solicitado. Isso torna a depuração interativa e os smoke tests de serviços gRPC no CI muito mais fáceis, do mesmo jeito que o curl torna fácil cutucar uma REST.

O que é gRPC reflection

O gRPC reflection é um serviço padrão que um servidor gRPC pode habilitar para expor metadados sobre os serviços e métodos que oferece. Um cliente consulta esse serviço de reflection para descobrir os métodos disponíveis e os formatos de mensagem, e então constrói chamadas dinamicamente - sem precisar de schema local.

Por que é útil

Sem reflection, toda ferramenta que chama um servidor gRPC precisa dos arquivos .proto correspondentes compilados. A reflection permite que ferramentas genéricas como o grpcurl listem métodos e os invoquem em tempo real, que é exatamente o que você quer para testes exploratórios e verificações rápidas de saúde.

O trade-off de segurança

A reflection anuncia seus serviços para qualquer um que consiga alcançar o servidor. Isso é ótimo em desenvolvimento, mas costuma ser desabilitado em produção para evitar revelar a superfície da API. Um padrão comum é reflection ligada em ambientes de dev e CI, desligada em produção.

gRPC reflection no CI

Em um pipeline você pode subir o serviço gRPC como um service container e usar uma ferramenta ciente de reflection para chamar um método como smoke test - confirmando que o servidor está no ar e respondendo corretamente - sem compilar protobufs no job de teste.

gRPC smoke test using reflection
# Smoke-test a gRPC service via reflection in CI
steps:
  - run: grpcurl -plaintext localhost:50051 list
  - run: grpcurl -plaintext -d '{"id":1}' localhost:50051 my.Service/Get

Nota Latchkey

Service containers e ferramentas como o grpcurl rodam nos runners do Latchkey exatamente como nos hospedados pelo GitHub, então smoke tests de gRPC baseados em reflection funcionam sem nenhuma configuração especial.

Principais conclusões

  • O gRPC reflection permite a um servidor descrever seus próprios serviços em tempo de execução, para que clientes não precisem de um .proto local.
  • Ele viabiliza ferramentas genéricas como o grpcurl para chamadas interativas e smoke tests de CI.
  • A reflection expõe a superfície da API, então costuma ser habilitada em dev e CI mas desabilitada em produção.

Guias relacionados