Главная/Блог/Публичный API для веб-сервиса: ключи, документация и лимиты запросов — как открыть интеграции партнёрам без риска

Публичный API для веб-сервиса: ключи, документация и лимиты запросов — как открыть интеграции партнёрам без риска

Публичный API для веб-сервиса: ключи, документация и лимиты запросов — как открыть интеграции партнёрам без риска

Публичный API превращает продукт из закрытого сервиса в платформу: партнёры подключают свои системы, разработчики строят интеграции, а вы растёте за счёт чужих усилий. Но открытый интерфейс без продуманной схемы доступа — это дыра в безопасности и нагрузка на инфраструктуру, за которую платите вы. Три кита безопасной интеграции — API-ключи, документация и лимиты запросов. Разберём, как настроить каждый из них так, чтобы партнёрам было удобно, а вашему бизнесу — безопасно.

Зачем бизнесу открывать публичный API

Когда у сервиса появляется публичный API, вокруг него формируется экосистема: агентства пишут коннекторы к 1С, партнёры синхронизируют данные с CRM, клиенты автоматизируют рутину скриптами. Это прямой аргумент в продажах — корпоративные клиенты на этапе выбора продукта первым делом спрашивают, есть ли API и что через него можно сделать. Наличие открытого API сокращает цикл сделки и снижает отток: клиент, у которого интегрированы пять внешних систем, уйти к конкуренту уже не сможет без потери автоматизации. Наконец, API — отдельный источник выручки: доступ к нему можно продавать тарифами, как это делают платёжные сервисы и маркетплейсы.

API-ключи: выдача, хранение и отзыв

Ключ — это одновременно паспорт и пропуск клиента в вашей системе. Основные правила работы с ними:

  • Самообслуживание через личный кабинет. Ключ должен выдаваться автоматически после регистрации — ручная выдача через почту не масштабируется.
  • Секрет показывается один раз. В базе хранится только хэш ключа; повторно посмотреть его нельзя — только перевыпустить.
  • Раздельные ключи для теста и боя. Тестовый контур с фиктивными данными убережёт боевые операции от случайных списаний и удалений.
  • Минимальные права (scopes). Ключ для чтения статистики не должен уметь удалять заказы.
  • IP-ограничения. Для server-to-server интеграций привязка ключа к белому списку адресов почти полностью исключает его кражу.

Перевыпуск ключа должен занимать у клиента пару минут и не ломать активные интеграции: старый ключ продолжает работать, например, 24 часа после выпуска нового.

Статические ключи или OAuth 2.0

Статический API-ключ подходит, когда интеграция работает от имени всей компании: сервер клиента общается с вашим сервером. Он прост в реализации, но не различает, чьи именно данные запрашиваются. Как только сторонние разработчики получают доступ к данным ваших пользователей — например, приложение партнёра читает заказы конкретного магазина, — нужен OAuth 2.0: пользователь сам выдаёт разрешение, а партнёр получает временный access-токен с ограниченным сроком жизни и refresh-токеном для продления. Так вы получаете аудит «кто, чьи данные и когда смотрел» и можете отозвать доступ точечно, не трогая остальных. Рабочая схема для большинства сервисов: статические ключи для server-to-server, OAuth — для публичных приложений и маркетплейса интеграций.

Лимиты запросов: защита инфраструктуры и честное распределение

Rate limiting решает две задачи: защищает вашу инфраструктуру от лавины запросов и не даёт одному активному клиенту деградировать сервис для остальных. Разумный стартовый лимит — 50–100 запросов в минуту на ключ с возможностью кратковременных всплесков (burst) до 2–3 номиналов: скрипты редко бьют ровным потоком. При превышении API должен отвечать кодом 429 Too Many Requests и заголовком Retry-After, а не обрывать соединение молча. Обязательно отдавайте служебные заголовки X-RateLimit-Limit и X-RateLimit-Remaining — тогда разработчики партнёров построят очередь запросов сами, без обращений в поддержку. Для тяжёлых сценариев вроде выгрузки всех заказов за год лучше предусмотреть отдельные пакетные эндпоинты, а не заставлять партнёра делать 10 000 мелких запросов.

Документация, по которой интеграция действительно работает

Хорошая документация экономит десятки часов вашей поддержки. Минимальный состав:

  1. Quick start. Первый успешный запрос за 5 минут: скопировал ключ, вставил cURL, получил ответ.
  2. Справочник эндпоинтов. Для каждого — параметры, типы, обязательность и все коды ответов с расшифровкой.
  3. Примеры кода. Минимум cURL, PHP и Python — на них приходит большинство интеграций в РФ.
  4. Тестовая песочница. Возможность «пощупать» API в браузере без написания кода.
  5. Описания ошибок. Что означает «конфликт версий заказа» и что с этим делать.
  6. Changelog. Лента изменений с датами и уведомлениями на почту.

Отдельно заложите ресурсы на поддержку документации: API с устаревшими доками превращается в легаси, которое все боятся трогать.

Версионирование и обратная совместимость

Версию выносите в URL — /v1/orders, /v2/orders — и никогда не меняйте поведение внутри версии молча. Добавление новых полей в ответах допустимо, удаление или переименование старых — нет: у партнёров работают интеграции, которые вы не контролируете. Если критичное изменение неизбежно, выпускайте новую версию и держите старую работоспособной минимум 6–12 месяцев, рассылая уведомления и статистику — кто из клиентов ещё не перешёл. Возможность «заморозить» версию на год — сильный аргумент доверия для корпоративных клиентов.

Вебхуки вместо опроса

Если партнёру нужно узнавать о новых заказах, заставлять его дёргать эндпоинт раз в минуту — расточительство для обеих сторон. Вебхуки инвертируют логику: ваш сервер сам отправляет событие на URL партнёра, когда что-то произошло. Обязательные атрибуты — HMAC-подпись запроса (чтобы партнёр проверял подлинность), повторные доставки при недоступности приёмника и идемпотентность: событие может прийти дважды, и обработчик не должен создать два заказа. Полезно также дать партнёру журнал доставки вебхуков в личном кабинете — половина вопросов в поддержку снимается сама.

Ошибки, которые дорого обходятся

Типичные проблемы, которые мы регулярно находим при аудите чужих API:

  • Один общий ключ на всех партнёров. При утечке невозможно понять источник и отозвать доступ точечно.
  • Лимиты «на доверии». Просьба к разработчику партнёра «не шлите больше 100 запросов» — не защита; лимит должен enforced на вашей стороне.
  • Отсутствие логов запросов. Без них инцидент «кто-то выгрузил базу клиентов» не расследуется.
  • Секреты в параметрах URL. Ключи попадают в access-логи, прокси и историю браузера — передавайте их в заголовках.
  • Нет мониторинга аномалий. Резкий рост запросов с одного ключа — часто первый признак утечки или бага у партнёра.

С чего начать

Публичный API — это продукт внутри продукта, и относиться к нему стоит так же: с продуманным онбордингом, метриками и поддержкой. Начните с малого — 5–10 ключевых эндпоинтов, простые ключи с scopes, честные лимиты и документация с Quick start. Этого достаточно, чтобы первые партнёры подключились и начала расти экосистема. Когда интеграций станет больше десятка, добавьте OAuth 2.0, маркетплейс приложений и платные тарифы доступа. Если хотите открыть API своего сервиса без боли для команды — напишите нам: поможем спроектировать архитектуру и запустить первую версию за 4–6 недель.

Нужна разработка?

Оставьте заявку — обсудим ваш проект и предложим решение