В истории Силиконовой долины сейчас происходит своеобразный момент. Те же технологические компании, которые построили свои империи на обещании открытых стандартов и взаимосвязанных систем, теперь используют ограничения API как цифровые рвы вокруг своих замков. И ирония? Они называют это безопасностью.
Представьте себе картину. Представьте, что вы пытаетесь создать эмулятор Linux, работающий на iOS от Apple, — что-то полезное, что-то, чего действительно хотят пользователи. Apple уже создала необходимый инструментарий. API существует. Технология работает. Но перед ней натянута бархатная верёвка, и вышибала говорит: «Извините, вы не разработчик браузера». Тем временем разработчики браузеров получают ключи от королевства из-за давления регуляторов со стороны Закона о цифровых рынках (DMA). Это похоже на то, как кто-то закрывает библиотеку ровно в 17:00, хотя вы видите, что библиотекарь работает в 17:15.
Это своеобразный танец, который мы наблюдаем в конце 2025 года: великое закрытие API.
Сцена готова: почему это важно прямо сейчас
Фундаментальное напряжение не ново, но ставки становятся смешными. Мы находимся в моменте, когда с огромной силой сталкиваются три силы: регуляторное давление, требующее взаимодействия, законные опасения по поводу безопасности, которые не дают экспертам по безопасности спать по ночам, и корпоративные интересы в сохранении контроля над своими платформами.
Закон ЕС о цифровых рынках не придумал это напряжение — он просто сделал его невозможным игнорировать. Когда регуляторы начали требовать от Apple разрешения на использование сторонних браузеров на iOS, они открыли ящик Пандоры технических сложностей. И ответ Apple? Блестящий с юридической точки зрения, ужасающий с точки зрения взаимодействия: создать API, который технически позволяет взаимодействие, но ограничивает его таким образом, чтобы служить более широким интересам компании.
Проблема выходит далеко за рамки Apple. Посмотрите на агентов ИИ прямо сейчас — мы наблюдаем, как точно такой же шаблон проявляется в режиме реального времени. Организации, развертывающие системы ИИ, сталкиваются с вавилонской башней несовместимых протоколов, проприетарных форматов данных и API, специфичных для поставщиков. Каждая платформа ИИ, похоже, поставляется со своим собственным «языком», создавая хрупкие цепочки интеграции, которые рушатся при малейшем обновлении.
Разрушение парадокса взаимодействия
Вот где всё становится действительно сложно (и где, я думаю, большинство комментариев упрощается): компании, ограничивающие API, не совсем неправы в отношении последствий для безопасности. Просто не совсем правы.
Компиляция Just-In-Time (JIT) — ключевая технология в современных браузерах. Это также чрезвычайно мощная — возможно, слишком мощная. Когда вы широко разрешаете доступ к JIT, вы даёте разработчикам возможность писать и выполнять код непосредственно в памяти. Исследователи безопасности Apple знают, что это создаёт векторы атак. Поэтому они отключают JIT в «режиме блокировки», самой экстремальной позиции безопасности, рекомендуемой специально для групп высокого риска, таких как журналисты и активисты.
Опыт разработчиков здесь действительно разочаровывает: «Мне просто нужен такой же доступ, который вы уже предоставили разработчикам браузеров». Регуляторный аргумент обоснован: если требуется взаимодействие, оно должно предлагаться на равных условиях. Но аргумент безопасности противоречит: открытие этих возможностей для произвольных разработчиков экспоненциально увеличивает поверхность атаки.
Это не просто повествование о добре и зле. Это больше похоже на наблюдение за двумя людьми, спорящими о том, стоит ли оставлять входную дверь незапертой. Один человек говорит, что неудобно каждый раз копаться в ключах. Другой указывает на рост статистики краж со взломом. Оба наблюдают реальные явления.
Где мы находимся в 2025 году: расчёт по безопасности API
Данные становятся всё труднее игнорировать. В первом квартале 2025 года 99% организаций сообщили о хотя бы одном инциденте, связанном с безопасностью API, за предыдущие 12 месяцев. Это не опечатка. Это почти универсальная уязвимость.
Что ещё хуже? Только у 10% опрошенных организаций есть какая-либо стратегия управления положением API. По сути, мы играем в рулетку с кибербезопасностью в корпоративном масштабе.
Векторы атак удручающе просты:
- Ошибки обнаружения: забытые API, всё ещё принимающие запросы в средах разработки.
- Разрывы авторизации: неработающая авторизация на уровне объекта (BOLA) остаётся самым простым путём эксплуатации.
- Непоследовательный контроль доступа: разные команды управляют разными конечными точками с совершенно разными стандартами безопасности.
И вот где это пересекается с повествованием о блокировке: компании ограничивают API отчасти потому, что видели, что происходит, когда разработчики бездумно раскрывают их в масштабе.
Рассмотрим реальный инцидент, произошедший в марте 2025 года: в широко используемом инструменте с открытым исходным кодом был неаутентифицированный endpoint API, который оставался без наблюдения почти год. В течение одной недели после того, как стало известно об эксплойте, с одного IP-адреса было совершено более 10 000 попыток атаки. Это не проблема «театра безопасности». Это свидетельство настоящей опасности.
Диаграмма, которую никто не хочет видеть
Позвольте мне визуализировать, как эта экосистема распадается:
Эта диаграмма должна вас угнетать, потому что она довольно точная. Каждый ответ на регуляторное давление создаёт трение, которое разработчики обходят. Каждое ужесточение безопасности увеличивает привязанность к поставщику. Каждое ограничение ещё больше фрагментирует стандарты.
Кризис взаимодействия ИИ: поучительная история
Позвольте мне перейти к тому, где это проявляется в режиме реального времени: искусственный интеллект. Одновременно появляются несколько протоколов: протокол Agent-to-Agent (A2A) от Google для связи между несколькими агентами, протокол Model Context Protocol (MCP) от Anthropic для интеграции инструментов и различные другие конкурирующие стандарты. Это действительно инновационная работа. Но это также опасно.
Риск не в том, что победит один протокол. Риск в том, что несколько протоколов выживут, каждый из которых будет иметь достаточную поддержку, чтобы предотвратить универсальное принятие. Мы можем оказаться в ситуации, когда AI-экосистемы будут разделены геополитически — один набор стандартов для компаний, сотрудничающих с американскими технологическими гигантами, другой для компаний в ЕС, ещё один в Азии.
Вот где я особенно выражаю своё мнение: именно это произошло со стандартами веб-технологий в конце 1990-х годов. У нас были конкурирующие движки браузеров с несовместимыми реализациями. Компании потратили миллиарды долларов и человеческие таланты на создание отдельных путей кода для отдельных движков. Потребовалось почти двадцать лет, чтобы довести взаимодействие браузеров до нынешнего уровня. Мы собираемся повторить весь этот дорогостоящий эксперимент, но с системами ИИ, которые экспоненциально сложнее.
Практические implications: что это значит для вашей архитектуры
Если вы создаёте приложения в 2025 году, вы работаете в этой раздробленной среде, нравится вам это или нет. Позвольте мне дать вам конкретные рекомендации.
Стратегия первая: уровень абстракции
Создайте в своём коде уровни абстракции API. Вместо того чтобы напрямую вызывать специфические API поставщиков по всей кодовой базе, создайте адаптационные интерфейсы, которые позволяют заменять реализации.
from abc import ABC, abstractmethod
from typing import Any, Dict
class AIAgentInterface(ABC):
"""Абстрактный интерфейс для взаимодействия с ИИ-агентами"""
@abstractmethod
def execute_task(self, task: str, context: Dict[str, Any]) -> Dict[str, Any]:
"""Выполняет задачу с заданным контекстом"""
pass
@abstractmethod
def get_supported_tools(self) -> list:
"""Возвращает список поддерживаемых инструментов"""
pass
class GoogleAgentAdapter(AIAgentInterface):
"""Адаптер для протокола A2A от Google"""
def execute_task(self, task: str, context: Dict[str, Any]) -> Dict[str, Any]:
# Реализация с использованием A2A протокола
# Перевод вашего внутреннего формата в формат сообщений A2A
a2a_message = self._translate_to_a2a(task, context)
response = self._send_a2a_request(a2a_message)
return self._translate_from_a2a(response)
def get_supported_tools(self) -> list:
# Запрос доступных инструментов у A2A протокола
return self._
