Миграция интеграции на API v3¶
Устаревший API Watcher (/vsaas/api/v1, /vsaas/api/v2) и глобальный ключ домена X-Vsaas-Api-Key удалены. Интеграции, использующие эти запросы, перестанут работать после обновления Watcher. Эта статья описывает, как перевести интеграцию на API v3: какой из двух API использовать, как авторизоваться и чем отличается поведение v3 от v2.
Полные справочники API v3:
Если ваша интеграция — это биллинг оператора, воспользуйтесь отдельной статьей Интеграция в существующую систему биллинга: в ней те же принципы разобраны на типовых сценариях биллинга.
Client API и Admin API¶
В v3 два набора запросов с разными базовыми путями:
- Client API —
/watcher/client-api/v3/.... Основной API для интеграций: организации, пользователи, папки, камеры, права, мозаики, эпизоды аналитики. Доступен любому пользователю, запросы ограничены его правами. - Admin API —
/watcher/admin-api/v3/.... Только для пользователей с уровнем доступа администратора Watcher. Используется для операций уровня инсталляции: создание пресетов, управление стримерами и доменами.
Большинству интеграций достаточно Client API. Admin API понадобится, если интеграция создает пресеты или работает с несколькими доменами.
Авторизация¶
Глобального ключа домена в v3 нет: каждый запрос выполняется от имени пользователя и ограничен его правами. Создайте для интеграции отдельную сервисную учетную запись с необходимыми правами и не используйте личные учетные записи сотрудников.
Способы авторизации (подробнее — в статье Авторизация API-запроса):
- JWT-токен:
POST /watcher/client-api/v3/loginс Basic-авторизацией возвращаетaccess_token(действует один час) иrefresh_token. Новыйaccess_tokenвыдается повторным запросом/loginс заголовкомAuthorization: Bearer <refresh_token>. - Персональный API-ключ: выпускается запросом
POST /watcher/client-api/v3/users/{user_id}/apikey, не имеет срока действия и не требует обновления — рекомендуемый способ для серверных интеграций.
Токен или ключ передается в заголовке Authorization: Bearer <значение> каждого запроса.
Note
Не выполняйте /login перед каждым запросом: при частых обращениях сервер вернет ошибку 429 Too Many Requests. Используйте API-ключ либо повторно используйте access_token до истечения его срока действия.
Для Admin API запрос POST /watcher/admin-api/v3/login доступен только пользователям с уровнем доступа администратора Watcher; запрос от администратора домена будет отклонен.
Что изменилось в поведении¶
Миграция не сводится к замене путей запросов. Проверьте в коде интеграции следующие изменения:
- Ресурс
camerasпереименован вstreams. Отдельного запроса создания камеры нет: камера создается и обновляется одним запросомPUT /watcher/client-api/v3/streams/{name}. Имя камере присваивает Watcher: при создании значение{name}из URL не используется, имя генерируется на основеtitleи возвращается в полеnameответа — сохраните его, все дальнейшие операции выполняются по нему. - Массовый импорт не возвращает имена. Ответ
POST /streams/importсодержит только счетчики созданных и обновленных камер. Используйте импорт для массового обновления; камеры, которыми интеграция будет управлять, создавайте по одной. - Поле
nameпользователя — это логин. Почта для уведомлений передается в полеemail. - Блокировка — полем
disabled. Поляenabledв v3 нет. Приdisabled: trueи при смене пароля все сессии пользователя завершаются. - Смена пароля — через обновление пользователя.
PUT /users/{user_id}с полемpassword; отдельного запроса нет. - Права не наследуются между уровнями. Права администратора не дают автоматически прав в организации: например,
POST /usersсorganization_idтребует владения организацией или явного права управления пользователями в ней, иначе вернется403. Административные операции с камерами и пользователями выполняйте через Admin API. Создатель организации становится ее владельцем; владельца можно назначить явно полемowner.idпри создании. - Доступ к видео выдается на папки. Права просмотра (
can_view,can_view_dvr,can_use_ptz) назначаются запросомPUT /organizations/{id}/folders/{folder_id}/users/{user_id}и действуют рекурсивно на вложенные папки. Членство в организации само по себе доступа к видео не дает. - Право редактирования камер включает просмотр видео. Пользователь с
can_edit_streamsавтоматически получаетcan_view_streams; в ответах API этот флаг возвращается со значениемtrueнезависимо от отправленного значения. - Курсорная пагинация. Списки возвращают поля
estimated_count,next,prev; постраничногоoffsetнет. Передавайте значениеnextв параметреcursorследующего запроса. - Статус камеры — в полях
stats.alive(поток идет;falseпри задержке больше 12 секунд) иstats.status(running/waiting/error). Полейonline/offlineнет. - Пользователь
readonlyполучает403на любой изменяющий запрос (POST/PUT/DELETE/PATCH) независимо от остальных прав.
Соответствие запросов v2 и v3¶
Основные запросы (полный перечень — в справочниках API):
| Запрос в v2 | Запрос в v3 |
|---|---|
X-Vsaas-Api-Key: <ключ домена> |
Authorization: Bearer <токен или API-ключ> |
POST /vsaas/api/v2/auth/login |
POST /watcher/client-api/v3/login |
GET /vsaas/api/v2/profile |
GET /watcher/client-api/v3/profile |
POST /vsaas/api/v2/users/{id}/apikey |
POST /watcher/client-api/v3/users/{user_id}/apikey |
GET /vsaas/api/v2/cameras |
GET /watcher/client-api/v3/streams |
POST /vsaas/api/v2/cameras |
PUT /watcher/client-api/v3/streams/{name} — имя присваивает Watcher, см. выше |
PUT /vsaas/api/v2/cameras/{name} |
PUT /watcher/client-api/v3/streams/{name} |
DELETE /vsaas/api/v2/cameras/{name} |
DELETE /watcher/client-api/v3/streams/{name} |
POST /vsaas/api/v2/cameras/import |
POST /watcher/client-api/v3/streams/import |
GET/POST /vsaas/api/v2/users, PUT/DELETE /users/{id} |
те же операции под /watcher/client-api/v3/users |
GET/POST /vsaas/api/v2/organizations, PUT/DELETE /organizations/{id} |
те же операции под /watcher/client-api/v3/organizations |
.../organizations/{id}/users/{user_id} |
тот же путь под /watcher/client-api/v3/... (PUT добавляет пользователя в организацию, если он еще не состоит в ней) |
.../organizations/{id}/folders/... |
те же пути под /watcher/client-api/v3/... |
GET/POST /vsaas/api/v2/presets |
GET /watcher/client-api/v3/presets; создание — POST /watcher/admin-api/v3/presets |
POST /vsaas/api/v2/agent-activation-tokens |
POST /watcher/client-api/v3/agent_activation_token |
GET /vsaas/api/v2/mosaics |
GET /watcher/client-api/v3/mosaics |
GET /vsaas/api/v2/events |
GET /watcher/client-api/v3/episodes — модель событий изменена, см. справочник API |
Порядок миграции¶
- Создайте сервисную учетную запись и выпустите для нее API-ключ.
- Замените авторизацию: удалите
X-Vsaas-Api-Key, передавайтеAuthorization: Bearer <ключ>. - Замените пути запросов по таблице выше и адаптируйте код к изменениям поведения: генерация имен камер, курсорная пагинация,
disabledвместоenabled. - Проверьте права сервисной учетной записи на каждой операции: ошибка
403в v3 чаще всего означает отсутствие прав в конкретной организации, а не неверный токен. - Проверьте работу интеграции на тестовой инсталляции до обновления рабочей.