/gRPCrud

Golang Client/Server gRPC Crud App

Primary LanguageGoMIT LicenseMIT

gRPCrud

Golang Client/Server gRPC CRUD App

Table of Contents

Overview

Basic Go Client/Server CRUD app using gRPC.

Features

Requirements

Configuration

Runtime environment variables that need to be in your Shell.

Parameter Example Description
GOPATH $HOME/$USER/go
GOROOT /usr/local/go
GOBIN $HOME/$USER/go/bin

Postgres configuration variables that need to be defined in ./docker/postgres/postgres.env.

Parameter Example Description
POSTGRES_USER read_write_user
POSTGRES_PASSWORD securepassword
POSTGRES_DB grpcrud

Postgres configuration variables that need to be defined in ./configs/app.toml.

  • Replace 0.0.0.0 with your Host IP using make hostIP or by manually editing the tile
Parameter Example Description
GRPC_PORT "0.0.0.0.9090"
POSTGRES_HOST "0.0.0.0:5432"
POSTGRES_DATABASE "grpcrud"
POSTGRES_USER_USERNAME "read_write_user"
POSTGRES_USER_PASSWORD "securepassword"
SERVER "0.0.0.0:9090"

Quickstart

1. Download and Install The Protobuf Compiler (Protoc)

  • Place the binary somewhere in your $PATH
$ which protoc

  /usr/local/bin/protoc
Copy The "Include" Files (Optional)
  • If you intend to use the included common types (such as "google/protobuf/timestamp.proto"), copy the contents of the include directory into '/usr/local/include/'.
/usr/local/include
└── google
    └── protobuf
        ├── any.proto
        ├── api.proto
        ├── compiler
        │   └── plugin.proto
        ├── descriptor.proto
        ├── duration.proto
        ├── empty.proto
        ├── field_mask.proto
        ├── source_context.proto
        ├── struct.proto
        ├── timestamp.proto
        ├── type.proto
        └── wrappers.proto

2. Compile the Proto Files

$ make protogen

./pkg
|── api
    └── v1
        └── todo-service.pb.go

3. Start the Client, Server and Postgres Containers

$ docker-compose up

Architecture


├── api
│   └── proto
│       └── v1
│           └── todo-service.proto  - V1 Proto Description
├── cmd
│   ├── client-grpc
│   │   └── main.go                 - gRPC client entrypoint
│   └── server
│       └── main.go                 - Server entrypoint
├── configs
│   └── app.toml                    - Client/Server environment variables
├── docker
│   └── postgres
│       ├── init.sql
│       ├── postgres.dockerfile
│       └── postgres.env            - PostgreSQL environment variables
├── docker-compose.yaml
├── Dockerfile
├── Gopkg.lock                      - Project's Dependency Graph Snapshot (Autogenerated by "dep ensure" and "dep init")
├── Gopkg.toml                      - Rule declarations to govern dep's management behavior
├── Makefile
├── pkg
│   ├── api
│   │   └── v1
│   │       └── todo-service.pb.go  - Compiled Protobuf TodoService Package (Autogenerated by protoc-gen-go)
│   ├── protocol
│   │   └── grpc
│   │       └── server.go           - Functionality to run the gRPC server
│   └── service
│       └── v1
│           └── todo-service.go     - CRUD functionality using compiled protobuf API and PB definitions
├── README.md
├── scripts
│   ├── clean-host-ip.sh            - Remove Host IP Address from app.toml configs
│   ├── gen-host-ip.sh              - Inject Host IP Address into app.toml configs
│   ├── protoc-gen.sh               - Compile Proto Files
│   ├── start-grpc-client.sh
│   └── start-grpc-server.sh
└── vendor
    ├── github.com
    │   ├── golang
    │   │   └── protobuf
    │   │       └── ptypes
    │   └── jmoiron
    │       └── sqlx
    ├── golang.org
    │   └── x
    │       └── net
    └── google.golang.org
        ├── genproto
        │   ├── googleapis
        │   │   └── rpc
        └── grpc

Todo

  • Add Remainder of CRUD Functions
  • Add REST Server and Swagger Files
  • Add Mock Data Creation to the PSQL Init Script

Credits