Skip to content

Latest commit

 

History

History

grpc-demo

Yokai gRPC Demo

License: MIT Go version

gRPC API demo application, based on the Yokai Go framework.

Overview

This demo application is a simple gRPC API offering a text transformation service.

It provides:

  • a Yokai application container, with the gRPC server module to offer the gRPC API
  • a Jaeger container to collect the application traces

Layout

This demo application is following the recommended project layout:

  • cmd/: entry points
  • configs/: configuration files
  • internal/:
    • interceptor/: gRPC interceptors
    • service/: gRPC services
    • bootstrap.go: bootstrap
    • register.go: dependencies registration
  • proto/: protobuf definition and stubs

Makefile

This demo application provides a Makefile:

make up     # start the docker compose stack
make down   # stop the docker compose stack
make logs   # stream the docker compose stack logs
make fresh  # refresh the docker compose stack
make stubs  # generate gRPC stubs with protoc (ex: make stubs from=proto/transform.proto)
make test   # run tests
make lint   # run linter

Usage

Start the application

To start the application, simply run:

make fresh

After a short moment, the application will offer:

Available services

This demo application provides a TransformTextService, with the following RPCs:

RPC Type Description
TransformText unary Transforms a given text using a given transformer
TransformAndSplitText streaming Transforms and splits a given text using a given transformer

If no Transformer is provided, the transformation configured in config.transform.default will be applied.

If you update the proto definition, you can run make stubs from=proto/transform.proto to regenerate the stubs.

This demo application also provides reflection and health check services.

Authentication

This demo application provides example authentication interceptors.

You can enable authentication in the application configuration file with config.authentication.enabled=true.

If enabled, you need to provide the secret configured in config.authentication.secret as context authorization metadata.

Examples

Usage examples with grpcurl:

  • with TransformTextService/TransformText:
grpcurl -plaintext -d '{"text":"abc","transformer":"TRANSFORMER_UPPERCASE"}' localhost:50051 transform.TransformTextService/TransformText
{
  "text": "ABC"
}
  • with TransformTextService/TransformAndSplitText:
grpcurl -plaintext -d '{"text":"ABC DEF","transformer":"TRANSFORMER_LOWERCASE"}' localhost:50051 transform.TransformTextService/TransformAndSplitText
{
  "text": "abc"
}
{
  "text": "def"
}

You can use any gRPC clients, for example Postman or Evans.