Пример (для fork) cервиса на golang, демонстрирующий использование технологий:
- gRPC
- OpenAPI
- Websocket
- SOAP
- NRPC (gRPC via NATS)
- NATS pub/sub
в котором весь обмен данными между подсистемами, включая все структуры запросов, ответов и коды ошибок, описан в protobuf
- mono - полный функционал без NRPC (monolyth: proxy <-> handler)
- bus - полный функционал с обменом по NRPC между gRPC-proxy и сервером (proxy <-> bus <-> handler)
- handler - функционал сервера, который подключается к NATS в качестве сервера
- proxy - функционал gRPC-proxy, который подключается к NATS в качестве клиента
├── docker-compose.yml
├── Dockerfile
├── go.mod - в текущей версии требует установки в соседнем каталоге [rpckit](github.com/TenderPro/rpckit)
├── main.go
├── main.proto - описание сервиса
├── Makefile
├── pkg
│ ├── app - сборка сервиса из компонентов
│ ├── nrpcgen
│ ├── pb
│ ├── service - прикладная часть сервиса
│ ├── soapgen
│ ├── staticgen
│ └── template - работа с шаблонами
├── README.md
└── static
├── html
├── sql
└── tmpl
Для сборки проекта используется go версии 1.14. По описанию сервиса, main.proto, автогенерится код поддержки NATS-RPC, OpenAPI, SOAP документация (в каталоги pkg/*gen и pkg/pb). Содержимое каталога static
командой make gen-prod
переностится в пакет pkg/staticgen
.
Команда сборки сервиса: go build .
Сервис поддерживает следующие аргументы командной строки:
$ ./rpc-sample-app -h
Usage:
Для облегчения повторного запуска можно использовать команды make
:
make conf
- создать файл конфигурации .envmake run
- локальная сборка и запуск сервиса с конфигурацией из .env
Полный список команд:
$ make help
...
При наличии локально установленных 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
- ping.Timeservice
- актуализировать примеры в static/html и тесты в Makefile
- деплой docker/dcape
- nrpc: руками сделать работающую версию
- актуализировать README
- pkg/app.Run - что еще вынести в rpckit?
- пример вызова метода из шаблонов
- gRPC: возврат ошибок
- nrpc: трейсинг
- nrpc: protoc-gen (fork)
- pgmig: пример работы с БД
- pgmig: protoc-gen
- пример file upload (sfs)
- make lint
- make cov (часть 1 - корректная работа)
- make cov (часть 2 - тесты с docker)
- make cov (часть 3 - coverage >80%)
- https://codebeat.co/
- доработать документацию
The MIT License (MIT), see LICENSE.
Copyright (c) 2020 Tender.Pro [email protected] Copyright (c) 2019 Aleksei Kovrizhkin [email protected]