Skip to content

ankorstore/yokai-grpc-template

Repository files navigation

Yokai gRPC Template

License: MIT Go version

gRPC application template based on the Yokai Go framework.

Documentation

For more information about the Yokai framework, you can check its documentation.

Overview

This 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

Getting started

Installation

With GitHub

You can create your repository using the GitHub template.

It will automatically rename your project resources and push them, 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.