API, позволяющее сохранять конфигурацию в postgres, отслеживать версионирование параметров конфигурации, запрашивать требуюмую конфигурацю для ранее внесённого в базу сервиса
- язык программирования Python
- формат схемы конфига json
- сервис должен обеспечивает персистентность данных
- сервис поддерживает все CRUD операции по работе с конфигом
- поддерживается версионирование конфига при его изменении
- удалять конфиг допускается только если он не используется никаким приложением
- в качестве протокола взаимодействия сервиса с клиентами использовал gRPC
- написал Dockerfile и docker-compose.yml
- покрыл проект unit-тестами
- сделал тестовый пример использования написанного сервиса конфигураций
Перед запуском убедитесь, что в системе установлен docker
и docker-compose
коомандами:
sudo docker --version
sudo docker-compose --version
Да лее проверьте, запущен ли демон docker
sudo docker ps
Тогда можно поднимать сервис
git clone https://github.com/gdagil/distributed-config.git
cd distributed-config
sudo bash ./start.sh
После запуска всех контейнеров можно выполнить тестирование (полностью покрывает все запросы, описанные ниже)
python -m venv venv
Для Linux
source venv/bin/activate
Для Windows
source venv/Scripts/activate
Далее устанавливаем пакеты и производим тестирование
pip install -r tests/requirements.txt
pytest
curl -d "@data.json" -H "Content-Type: application/json" -X POST http://localhost:8080/config
{
"service": "managed-k8s",
"data": [
{"key1": "value1"},
{"key2": "value2"}
]
}
status_code: 201
{
"success": true,
"detail": "Successfully created"
}
curl http://localhost:8080/config?service=managed-k8s
{
"key1": "value1",
"key2": "value2"
}
curl -d "@data.json" -H "Content-Type: application/json" -X PUT http://localhost:8080/config
{
"service": "managed-k8s",
"data": [
{
"key1": "learn"
},
{
"key2": "golang"
}
]
}
status_code: 200
{
"success": true,
"detail": "Successfully created"
}
curl http://localhost:8080/version/history?service=managed-k8s
status_code: 200
{
"key2": {
"value": "golang",
"version": 2,
"prev_version": {
"value": "value2",
"version": 1,
"prev_version": null
}
},
"key1": {
"value": "learn",
"version": 2,
"prev_version": {
"value": "value1",
"version": 1,
"prev_version": null
}
}
}
При изменении только одного параметра в конфигурации
{
"key2": {
"value": "golang",
"version": 2,
"prev_version": {
"value": "value2",
"version": 1,
"prev_version": null
}
},
"key1": {
"value": "now",
"version": 3,
"prev_version": {
"value": "learn",
"version": 2,
"prev_version": {
"value": "value1",
"version": 1,
"prev_version": null
}
}
}
}
curl http://localhost:8080/version?service=managed-k8s&version=2
status_code: 200
{
"key2": "golang",
"key1": "learn"
}