Getting started - gRPC application (original) (raw)
Yokai provides a ready to use gRPC application template to start your gRPC projects.
Overview
The gRPC application 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
Layout
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
Makefile
This template provides a Makefile:
[](#%5F%5Fcodelineno-0-1)make up # start the docker compose stack [](#%5F%5Fcodelineno-0-2)make down # stop the docker compose stack [](#%5F%5Fcodelineno-0-3)make logs # stream the docker compose stack logs [](#%5F%5Fcodelineno-0-4)make fresh # refresh the docker compose stack [](#%5F%5Fcodelineno-0-5)make stubs # generate gRPC stubs with protoc (ex: make stubs from=proto/example.proto) [](#%5F%5Fcodelineno-0-6)make test # run tests [](#%5F%5Fcodelineno-0-7)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:
With gonew
You can install gonew, and simply run:
[](#%5F%5Fcodelineno-2-1)gonew github.com/ankorstore/yokai-grpc-template github.com/foo/bar [](#%5F%5Fcodelineno-2-2)cd bar [](#%5F%5Fcodelineno-2-3)make fresh
Usage
Once ready, the application will be available on:
localhost:50051for 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:
[](#%5F%5Fcodelineno-3-1)grpcurl -plaintext -d '{"text":"hello"}' localhost:50051 example.ExampleService/ExampleUnary [](#%5F%5Fcodelineno-3-2){ [](#%5F%5Fcodelineno-3-3) "text": "response from grpc-app: you sent hello" [](#%5F%5Fcodelineno-3-4)}
- with
ExampleService/ExampleStreaming:
[](#%5F%5Fcodelineno-4-1)grpcurl -plaintext -d '@' localhost:50051 example.ExampleService/ExampleStreaming <<EOF [](#%5F%5Fcodelineno-4-2){"text":"hello"} [](#%5F%5Fcodelineno-4-3){"text":"world"} [](#%5F%5Fcodelineno-4-4)EOF [](#%5F%5Fcodelineno-4-5){ [](#%5F%5Fcodelineno-4-6) "text": "response from grpc-app: you sent hello" [](#%5F%5Fcodelineno-4-7)} [](#%5F%5Fcodelineno-4-8){ [](#%5F%5Fcodelineno-4-9) "text": "response from grpc-app: you sent world" [](#%5F%5Fcodelineno-4-10)}
You can use any gRPC clients, for example Postman or Evans.
Going further
To go further, you can:
- check the gRPC server module documentation to learn more about its features
- follow the gPRC application tutorial to create, step by step, a gRPC application
- test the gPRC demo application to see all this in action