Сервис на golang, предоставляющий gRPC API. API сервиса, включая все структуры запросов, ответов и коды ошибок описаны в protobuf
- сервис должен работать в отдельной БД (Postgresql) с заданной структурой таблиц (схема данных - crebas.sql
- сервис должен конфигурироваться (хост бд, пользователь, адрес интерфейса gRPC и т.д.) через задание опций командной строки.
Для сборки проекта использовался go версии 1.12.6. Результат вызова protoc
, файл api.pb.go, включен в проект и эта зависимость будет нужна только в случае изменения api.proto.
Команда сборки сервиса: go build .
Сервис поддерживает следующие аргументы командной строки:
$ ./grpcsample -h
Usage:
grpcsample [OPTIONS]
Application Options:
--addr= Listen address (default: localhost:7070)
--metric_addr= prometheus service host:port (default: localhost:8080)
--metric_url= prometheus service URL (default: /metrics)
--log_level= Log level (default: debug)
DB Options:
--db.addr= host:port (default: localhost:5432)
--db.driver= DB driver (default: postgres)
--db.user= User name
--db.password= User password
--db.name= Database name
--db.opts= Database connect options (default: sslmode=disable)
Help Options:
-h, --help Show this help message
Для облегчения повторного запуска можно использовать команды make
:
make conf
- создать файл конфигурации .envmake run
- локальная сборка и запуск сервиса с конфигурацией из .env
Полный список команд:
$ make help
build Build the binary file for server
clean Remove previous builds
conf Create initial config
dcape-db-create Create user, db and load dump
dcape-db-drop Drop database and user
dcape-psql Run psql
dc Run docker-compose (make dc CMD=build)
dep Get the dependencies
down Stop containers and remove them
help Display this help screen
lint Run linter
pb Generate pb sources
psql Run psql via postgresql docker container
run Build and run binary
test Run grpc client tests
up-db Start pg container only
up Start pg and app containers
При наличии локально установленных make и docker, сборка и запуск сервиса могут быть произведены командой
make up
Выполнение этой команды повлечет
- запуск локальной копии БД
- загрузку в БД файлов из sql
- сборку проекта
- запуск сервиса проекта
при этом будут использованы образы docker:
- docker/compose:1.23.2
- golang:1.12.6-alpine3.9
- postgres:11.4
Сервис также поддерживает деплой в рамках сервиса dcape
Файл server_test.go позволяет провести тестирование методов API при работающем сервисе, но текущая версия не удаляет после запуска изменения в БД
- golint выдает замечания на использование
Id
, но такая особенность protobuf документирована - protoc добавляет в структуры поля с префиксом
XXX_
, что мешает использовать эти структуры в gorm. Для решения можно было бы использовать gogo/protobuf или retag, но пришлось бы добавить комменты в api.proto
Copyright (c) 2019 Aleksei Kovrizhkin [email protected]