Дальше везде используются placeholder-ы:
{domain}
,{Domain}
{subdomain}
,{Subdomain}
Например, для поддомена package
из домена logistic
значение placeholder-ов будет:
{domain}
,{Domain}
=logistic
,Logistic
{subdomain}
,{Subdomain}
=package
,Package
{domain}
/{subdomain}
=logistic
/package
{subdomains}
,{Subdomains}
=packages
,Packages
- Сделать rebase своего репозитория
{kw-domain}-{subdomain}-api
на omp-template-api - Добавить в proto следующие handler-ы (пример template):
Create{Subdomain}
Describe{Subdomain}
List{Subdomains}
Remove{Subdomain}
- Добавить теги валидации в поля сообщений (пример template)
- Сделать рефакторинг: заменить
template
на{subomain}
(см. рецепт) - Сгенерировать gRPC код клиента и сервера (make generate)
- Имплементировать код новых ручек в internal/api/api.go (пример template)
- Код ручек должен просто логгировать вызовы (с уровнем
debug
) - Возвращать пустой ответ или внутреннюю ошибку (
not implemented
) - При желание разделить по разным файлам имплементацию ручек
- Код ручек должен просто логгировать вызовы (с уровнем
- Протестировать через grpc_cli (или grpcurl) написанные ручки (пример template)
- Написать тесты по обработке не валидных запросов 💎
- Настроить маршрутизацию при запуске контейнеров: 💎 (можно сделать через dist директорию)
- с
0.0.0.0:8080/swagger
на контейнер swagger - c
0.0.0.0:8080/api
на контейнер сервиса на порт gateway-a
- с
- Сгенерировать Python код клиента и задеплоить его в PyPi 💎 (пример template)
Рецепт
Переезд проекта на рельсы шаблона
export domain_kw=omp
export subdomain=demo
git remote add template https://github.com/ozonmp/omp-template-api
git fetch template main
git rebase template/main
git checkout template/main -- Makefile go.mod go.sum
git rebase --continue
rm -rf pkg/omp-template-api
mkdir pkg/${domain_kw}-${subdomain}-api
mv api/ozonmp/omp_template_api/v1/omp_template_api.proto \
api/ozonmp/omp_template_api/v1/${domain_kw}_${subdomain}_api.proto
mv api/ozonmp/omp_template_api api/ozonmp/${domain_kw}_${subdomain}_api
mv pypkg/omp-template-api pypkg/${domain_kw}-${subdomain}-api
// grep (exclude 'api/google' dir)
// - template -> ${subdomain}
// - grep omp -> ${domain_kw}
make generate
go mod tidy
make build
# перенесли в шаблонном репозитории README.md в DOCS.md, чтобы было меньше коонфликтов при rebase
mv DOCS.md README.md
git add .
git commit -m"refactored"
Описание сообщений
// ...
message {Subdomain} {
uint64 id = 1;
string foo = 2;
}
message Create{Subdomain}V1Request {
string foo = 1;
}
message Create{Subdomain}V1Response {
uint64 {subdomain}_id = 1;
}
message Describe{Subdomain}V1Request {
uint64 {subdomain}_id = 1;
}
message List{Subdomains}V1Request {
}
message List{Subdomains}V1Response {
repeated {Subdomain} items = 1;
}
message Remove{Subdomain}V1Request {
uint64 {subdomain}_id = 1;
}
message Remove{Subdomain}V1Response {
bool found = 1;
}