SonarQube API — это REST-интерфейс для автоматизации работы со статическим анализатором кода. Через него можно запускать анализы, дергать метрики качества, управлять проектами и правами доступа. Звучит полезно, и по-хорошему так и есть — но дьявол, как обычно, в деталях.
На одном проекте мы пытались встроить SonarQube в пайплайн так, чтобы разработчики получали фидбек прямо в MR. Спойлер: получилось, но крови мы попили изрядно. Расскажу, что к чему.
Что вообще умеет этот API
SonarQube API делится на несколько категорий. Основные:
Analysis — запуск и управление анализами. api/ce/submit ставит задачу в очередь, api/ce/activity показывает статус. Простой пример на bash:
curl -X POST "http://your-sonar:9000/api/ce/submit" \
-u $SONAR_TOKEN: \
-d "projectKey=my-project" \
-d "branch=feature/new-auth"
Measures — получение метрик. Количество багов, code smells, coverage, дубликаты. Тут всё прямолинейно:
curl "http://your-sonar:9000/api/measures/component" \
-u $SONAR_TOKEN: \
-d "component=my-project" \
-d "metricKeys=bugs,vulnerabilities,code_smells,coverage"
Projects — CRUD для проектов. Можно создавать, удалять, обновлять настройки. Issues — поиск и управление проблемами. Фильтрация по severity, типу, файлу, автору.
Quality Gates — управление воротами качества. Можно создать свой гейт, привязать к проекту, проверить проходит ли анализ.
Вроде бы полный набор. Но.
Где начинаются проблемы
Документация. Официальная есть на docs.sonarsource.com, но она... как бы это сказать? Она есть. Примеры часто устаревшие, параметры не все описаны, behaviour приходится выяснять экспериментально.
Вот реальный кейс. Нам нужно было получить список всех issues с определённым тегом. В доках написано — используй параметр tags. Окей:
curl "http://your-sonar:9000/api/issues/search?tags=security" \
-u $SONAR_TOKEN:
Возвращает пустой массив. Хотя issues с этим тегом точно есть. Два часа отладки позже выясняется — теги нужно передавать массивом, и формат зависит от версии SonarQube. В одной работеет tags=security, в другой tags[]=security, в третьей вообще через запятую.
Короче, API нестабильное между версиями. Миграция с 8.x на 9.x может сломать ваши скрипты.
Ещё момент — rate limiting. Из коробки его нет. Если у вас 50 проектов и вы хотите собирать метрики каждую ночь — SonarQube ляжет. Приходится лепить свои ограничители.
Таблица: плюсы и минусы SonarQube API
| Плюсы | Минусы |
|---|---|
| Покрывает весь функционал SonarQube | Документация отстаёт от реальности |
| REST — можно использовать из любого языка | Нестабильность между версиями |
| Token-based аутентификация | Нет встроенного rate limiting |
| Можно автоматизировать всё: от анализа до отчётов | Медленный на больших проектах |
| Webhook-и для уведомлений | Сложная фильтрация — много experimentation |
| Open source версия бесплатна | Enterprise фичи стоят дорого |
Для каких проектов подходит
SonarQube API имеет смысл, если:
- У вас уже развёрнут SonarQube и вы хотите его интегрировать глубже в процессы
- Нужны кастомные отчёты для менеджмента — дашборды, слайды, whatever
- Хотите автоматизировать Quality Gates под конкретные требования
- Команда больше 10 человек и нужен централизованный анализ
Когда SonarQube API — оверкилл:
- Стартап из 3 человек
- Простой проект без строгих требований к качеству
- Нет ресурсов на поддержку отдельного сервера
- Нужно что-то, что работает из коробки за 5 минут
Честно? Для маленьких команд SonarQube — это пушка по воробьям. Разворачивание, настройка, поддержка. А потом ещё и API нужно прикручивать.
Альтернативы
Если говорить о статическом анализе как таковом, вариантов несколько.
SonarCloud — SaaS версия от тех же разработчиков. Не нужно разворачивать, API такой же. Но дорого для небольших команд и данные уходят в облако.
CodeClimate — популярный в опенсорсе, но US-based. Для российских компаний сейчас это проблема.
ESLint / Pylint / прочие линтеры — можно запускать локально или в CI. Но нет единого интерфейса, нет истории, нет красивых дашбордов.
GitHub Code Scanning — если вы на GitHub. Удобно, но привязывает к платформе.
GitLab SAST — аналогично для GitLab.
Отдельная категория — AI-powered инструменты. Они не просто ищут паттерны, а понимают контекст. CodeRabbit на западе, у нас — Distiq.
Сравнение подходов к code review
| Подход | Скорость внедрения | Глубина анализа | Требует сервер | Интеграция с VCS |
|---|---|---|---|---|
| SonarQube API | Недели | Высокая | Да | Через CI/CD |
| Линтеры в CI | Часы | Средняя | Нет | Нативная |
| GitLab/GitHub SAST | Минуты | Средняя | Нет | Нативная |
| AI review (Distiq) | Минуты | Высокая | Нет | Webhook |
SonarQube даёт глубину, но требует инвестиций. AI-инструменты дают сопоставимое качество быстрее и без инфраструктуры.
Личный опыт
На том проекте, про который я говорил в начале, мы в итоге сделали гибрид. SonarQube крутится ночью и генерирует отчёты для тимлидов. А в MR мы подключили Distiq — он оставляет инлайн-комментарии прямо в коде.
Сработало хорошо. SonarQube для стратегического анализа, AI для тактического — прямо в момент код-ревью.
Distiq, кстати, показался мне удачным вариантом для российских команд. Российские серверы, данные не уходят, поддерживает GitLab и GitHub. Интеграция через webhook — буквально пара минут. Из коробки умеет то, что мы в SonarQube неделю настраивали: инлайн-комментарии, приоритизация, фильтрация по severity.
Итог
SonarQube API — мощный инструмент, если вы уже используете SonarQube и готовы инвестировать время в интеграции. Он даёт полный контроль, но требует глубокого понимания внутренностей.
Если вам нужно быстро закрыть потребность в автоматическом code review — посмотрите в сторону AI-решений. Для многих задач их достаточно, а времени на настройку уходит в разы меньше.
Выбор зависит от вашего контекста. Команда, требования, бюджет, требования к безопасности данных. Универсального ответа нет, но теперь у вас есть информация для принятия решения.
