gRPC application template based on the Yokai Go framework.
For more information about the Yokai framework, you can check its documentation.
This template provides:
- a ready to extend Yokai application, with the gRPC server module installed
- a ready to use dev environment, based on Air (for live reloading)
- a ready to use Dockerfile for production
- some examples of service and test to get started
This template is following the recommended project layout:
cmd/
: entry pointsconfigs/
: configuration filesinternal/
:service/
: gRPC service and test examplesbootstrap.go
: bootstrapregister.go
: dependencies registration
proto/
: protobuf definition and stubs
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
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
You can install gonew, and simply run:
gonew github.com/ankorstore/yokai-grpc-template github.com/foo/bar
cd bar
make fresh
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"
}