- Анализ логов с целью выявления системных ошибок различного уровня
- Анализ истории версионного контроля в период от 10-дневной давности с целью установить вносились ли изменения, способные затронуть указаный функционал
- При наличии функциональных тестов - принудительный запуск
- Откатка к различным коммитам на dev-машине, с целью определить состояние, когда система работала стабильно
- Если найдена программная ошибка - то следует дальнейшая подготовка hotfix
- проверить время выполнения запускаемого скрипта. Возможно, что время обработки скрипта начало превышать 30-ти минутный интервал запуска скрипта и это дает сайд-эффекты при сборе статистики
- сравнение переменных (конфигурации) окружения с эталонными
- если в архитектуре задействованы репликация или шардирование БД, проверить состояние master-slave (write-read) баз данных
Если предполагается, что по каким-то из сущностей возможен временный пустой ответ, то можно кешировать такие запросы с определенным срезом параметров с периодом валидности в 1 час. Это означает, что для указанных запросов фактических вызовов к внешнему API производиться не будет. В начале каждого часа производить автоматический сброс кеша.
Альтернативой кешированию может являться проксирование на другой источник (заглушку), если пустой ответ не является удовлетворительным ответом системы.
Шаги по построению сервиса:
- Составить перечень сущностей (моделей) и возможных операций над ними
- Выбрать подходящую архитектуру построения API, например REST. Составить карту машрутов.
- Подготовить спецификацию OpenAPI для взаимодействия с фронтом.
- Сгенерировать на основе OpenAPI или подготовить вручную заглушки на необходимые методы
- Выдать на фронт файл спецификации с описанием доступным маршрутов
- Итерационно корректировать/дополнять спецификацию под версионным контролем
Для REST API и различных выборок с сортировкой и фильтрацией подойдет шаблон вида:
GET /groups?country=russia&startDate=01.01.1970&sort=spend&order=desc
или более дружелюбный ЧПУ SEO формат:
GET /groups/filter/country_russia/?sort=spend&order=desc
возможно некоторые запросы будет удобно передавить с заголовком application/json и телом в json формате.
Пример успешного ответа на запрос:
{
"succes": true,
"data": {
"groups": [
{
"id": 86,
"name": "Тестовая рекламная группа",
"spend": 100,
"clicks": 23,
"relatedCountryIds": [1]
}
],
"countries": [
{
"id": 1,
"name": "Россия",
"spend": 20,
"clicks": 133
}
]
}
}
Пример ответа с ошибками:
{
"succes": false,
"errors": [
"Что-то пошло не так"
]
}