Skip to content

unary, server-streaming, client-streaming, bidirectional-streaming, interceptor + JWT auth, secure with SSL/TLS, gRPC-Gateway for REST

Notifications You must be signed in to change notification settings

thanhquy1105/PCBook-gRPC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The PC book application

PC book is an application to manage and search laptop configurations. It provides 4 gRPC APIs:

  1. Create a new laptop: unary gRPC

    This allows client to create a new laptop with some specific configurations.

    The input of the API is a laptop, and it returns the unique ID of the created laptop.

    The laptop ID is a UUID, and can be set by the client, or randomly generated by the server if it's not provided.

  2. Search laptops with some filtering conditions: server-streaming gRPC

    This allows client to search for laptops that satisfies some filtering conditions, such as the maximum price, minimum cores, minimum CPU frequency, and minimum RAM.

    The input of the API is the filtering conditions, and it returns a stream of laptops that satisfy the conditions.

  3. Upload a laptop image file in chunks: client-streaming gRPC

    This allows client to upload 1 laptop image file to the server. The file will be split into multiple chunks of 1 KB, and they will be sent to the server as a stream.

    The input of the API is a stream of request, which can either be:

    • Metadata of the image (only the 1st request): which contains the laptop ID, and the image type (or file extension) such as .jpg or .png.
    • Or a binary data chunk of the image.

    The total size of the image should not exceed 1 MB.

    The API will returns a response that contains the uploaded image ID (random UUID generated by the server) and the total size of the image.

  4. Rate multiple laptops and get back average rating for each of them: bidirectional-streaming gRPC

    This allows client to rate multiple laptops, each with a score between 1 to 10, and get back the average rating score for each of them.

    The input of the API is a stream of requests, each with a laptop ID and a score.

    The API will returns a stream of responses, each contains a laptop ID, the number of times that laptop was rated, and the average rated score.

Setup development environment

go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
  • Install protoc-gen-grpc-gateway and protoc-gen-openapiv2
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2

How to run

  • Generate codes from proto files:
make proto
  • Run unit tests:
make test
  • Run server and client:
make server
make client
  • Run load balancing gRPC service with NGINX: read nginx-cmd file here

About

unary, server-streaming, client-streaming, bidirectional-streaming, interceptor + JWT auth, secure with SSL/TLS, gRPC-Gateway for REST

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published