Переход на адрес API
Прежние интеграции вызывают API на основном адресе Sursa — том, который люди открывают в браузере, например
https://app.sursa.com/v1/…. Теперь у API есть и собственный адрес: https://api.sursa.com в облаке или
https://api.<your domain> в вашей установке. Он создан для интеграций: масштабируется за балансировщиком нагрузки
и не обслуживает ничего, кроме API.
Переходить не обязательно. Основной адрес продолжает обслуживать /v1 для существующих интеграций — бессрочно
и без перенаправления. Переходите, когда вам удобно, чтобы получить преимущества адреса API, и используйте его для
всех новых интеграций.
Что остаётся прежним
- Пути, параметры, поля, коды ошибок и события:
GET /v1/cards— один и тот же запрос на обоих адресах. - Ключи API. Одни и те же ключи
kb_иkbsrc_работают на обоих адресах с той же ролью, областями и профилем доступа. - Ключи идемпотентности, лимиты частоты и квоты. Запросы на оба адреса засчитываются в одни и те же квоты организации.
- Вебхуки. Доставки, подписи и секреты не зависят от адреса, который вы вызываете.
- Ссылки в ответах.
doc_urlошибки ведёт на этот портал, а заголовокLinkстраницы списка — на адрес API, какой бы адрес вы ни вызывали.
Чем отличается адрес API
| На основном адресе | На адресе API |
|---|---|
| Все операции веб-приложения, включая внутренние | Только операции из публичного справочника API. Любой другой путь отвечает 404 с кодом api.not_found. |
Ключ в X-API-Key или Authorization либо cookie сессии браузера | Ключ или токен доступа OAuth, желательно в Authorization: Bearer. Cookie не учитываются. |
GET /auth/me | GET /v1/me. Пути внутри /auth/ не обслуживаются. |
| Режим «Смотреть как» через cookie | Заголовок X-View-As для ключей с ролью admin. |
| Один сервер или фиксированный набор серверов | Несколько серверов за балансировщиком нагрузки. |
Последняя строка важна только в одном случае — для потокового ответа POST /v1/chat. Оборвавшийся поток
продолжается с Last-Event-ID только на том сервере, который пишет ответ. Если ваша интеграция возобновляет потоки,
давайте каждому вопросу request_id: тогда повтор на другом сервере получит сохранённый ответ, а не второй. См.
Как возобновить оборвавшийся поток.
Перед переходом
Убедитесь, что все вызовы публичные. Составьте список путей, которые вызывает ваша интеграция, и найдите каждый в справочнике API или сравните их со спецификацией нового адреса:
curl -s https://api.sursa.com/openapi.json \
| jq -r '.paths | to_entries[] | .key as $p | .value | keys[] | ascii_upcase + " " + $p' \
| sort > public-operations.txtПуть, которого нет в публичном справочнике, относится к веб-приложению. На основном адресе он по-прежнему работает, но на адресе API не обслуживается, и его форма не входит в публичные обязательства. Замените его публичной операцией или оставьте эту часть интеграции на основном адресе и расскажите своему контактному человеку в Sursa, что вам нужно.
Проверьте, как вы проходите аутентификацию. Если интеграция входит с паролем пользователя и cookie сессии,
сначала переведите её на ключ API. Если она передаёт X-API-Key, переход на
Authorization: Bearer рекомендуется, но не обязателен.
Проверьте сеть. Разрешите в межсетевом экране и прокси исходящий HTTPS на новое имя хоста.
Пошаговый переход
-
Сделайте базовый URL настройкой своей интеграции, если он ещё ею не является.
-
Попробуйте новый адрес с запросом на чтение:
curl https://api.example.com/v1/me -H "Authorization: Bearer $SURSA_API_KEY" -
Прогоните набор тестов своей интеграции на новом адресе с тестовым ключом и тестовой коллекцией.
-
Переключите часть трафика, например один обработчик или одно окружение, и следите в журналах за
404 api.not_found,401и5xx. Каждый ответ несётX-Request-Id; сохраняйте его в своих журналах. -
Переключите остальное. Какое-то время держите старый базовый URL в конфигурации, чтобы можно было за секунды переключиться обратно.
Что проверить после перехода
GET /v1/healthна новом адресе возвращает ту жеversion, что и на старом.- В ответах есть заголовки
RateLimit. Если ваша интеграция замедляет себя поX-RateLimit-*, она может продолжать так делать: отправляются оба набора. См. Лимиты частоты и квоты. - Если ваша интеграция работает в браузере, ей больше не нужен собственный прокси для CORS: адрес API разрешает запросы с любого источника, без cookie.