Skip to content

Getting started - gRPC application

Yokai provides a ready to use gRPC application template to start your gRPC projects.

Overview

The gRPC application template provides:

Layout

This template is following the recommended project layout:

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

Makefile

This template 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/example.proto)
make test   # run tests
make lint   # run linter

Installation

With GitHub

You can create your repository using the GitHub template.

It will automatically rename your project resources, this operation can take a few minutes.

Once ready, after cloning and going into your repository, simply run:

make fresh

With gonew

You can install gonew, and simply run:

gonew github.com/ankorstore/yokai-grpc-template github.com/foo/bar
cd bar
make fresh

Usage

Once ready, the application will be available on:

  • localhost:50051 for the application gRPC server
  • http://localhost:8081 for the application core dashboard

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

Usage examples with gRPCurl:

  • with ExampleService/ExampleUnary:
grpcurl -plaintext -d '{"text":"hello"}' localhost:50051 example.ExampleService/ExampleUnary
{
  "text": "response from grpc-app: you sent hello"
}
  • with ExampleService/ExampleStreaming:
grpcurl -plaintext -d '@' localhost:50051 example.ExampleService/ExampleStreaming <<EOF
{"text":"hello"}
{"text":"world"}
EOF
{
  "text": "response from grpc-app: you sent hello"
}
{
  "text": "response from grpc-app: you sent world"
}

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

Going further

To go further, you can: