API
API
API (Application Programming Interface) — это контракт, по которому одна программа умеет дёргать другую: какие команды можно слать, в каком формате, что вернётся в ответ. Внутрь второй программы при этом заглядывать не нужно.
История
Сам термин появился задолго до интернета. По общему мнению, впервые «application program interface» в нынешнем смысле описал британский разработчик Иан Гулд в статье 1968 года про модульную организацию программ — речь шла о наборе процедур, которые одна часть системы предоставляет другим частям. Тогда никаких сетей и облаков не было: API жили внутри одной машины, между функцией A и функцией B.
В 1970–80-е появились первые операционные системы, у которых был чёткий публичный API: программе разрешалось обращаться к ядру через фиксированный набор системных вызовов (read, write, open, close — это всё API ядра Unix). Параллельно росли библиотеки на C: подключаешь stdio.h, получаешь набор функций — это тоже API.
В 1991 году в Cornell придумали CORBA, в 1998 году в Microsoft — DCOM, чуть раньше Sun сделал RPC. Это всё были попытки научить программы на разных компьютерах вызывать функции друг друга через сеть, как будто они в одном процессе. Сложно, тяжело, медленно — но это был первый сетевой API.
Перелом — 2000 год. Рой Филдинг защитил диссертацию «Architectural Styles and the Design of Network-based Software Architectures», где описал стиль REST. Идея простая до неприличия: используем обычный HTTP (GET, POST, PUT, DELETE) и адресуем «сущности» (users, orders, products) как обычные веб-страницы. Это снесло CORBA с рынка за несколько лет.
С 2000-х API стали публичным товаром. eBay открыл API в 2000-м, Salesforce — в 2000-м, Flickr — в 2004-м, Twitter — в 2006-м. В 2006-м Джефф Безос в Amazon издал внутренний приказ (тот самый «Bezos API Mandate»): все команды обязаны общаться между собой только через API, иначе увольнение. Через десять лет это превратилось в AWS — крупнейшую облачную платформу мира.
В 2015 году Facebook опубликовал GraphQL — альтернативу REST, где клиент сам говорит, какие поля ему нужны. В 2016-м Google открыл gRPC — современный потомок RPC, быстрый и бинарный. С тех пор «API» — это огромное семейство стилей, а не один протокол.
Что это такое
API — это договор между двумя сторонами:
- поставщик обещает: «если ты пошлёшь мне запрос в таком-то виде, я отвечу в таком-то виде»;
- клиент соглашается: «ок, буду слать запросы по правилам и обрабатывать ответ как ты сказал».
Главная ценность — разделение знаний. Клиент не должен понимать, как именно работает поставщик внутри: на чём написан, на каком сервере крутится, как хранит данные. Он работает только с внешней «формочкой» — список методов, формат запроса, формат ответа.
API бывают сильно разные по уровню абстракции:
- API библиотеки — функции, которые ты вызываешь из своего кода.
requests.get("https://...")в Python — это API библиотеки requests. - API операционной системы — системные вызовы, через которые программа просит ядро открыть файл, отправить пакет, выделить память.
- API железа — то, как драйвер общается с устройством. UEFI, ACPI — это тоже API.
- API веб-сервиса — самое модное сегодня значение. HTTP-эндпоинты, которые отдают JSON. Когда современный разработчик говорит «API», по умолчанию имеет в виду именно это.
- API внутри одного приложения — например, в крупном бэкенде команда платежей предоставляет другой команде «внутренний API» вызвать списание. Внешне это может выглядеть как обычные функции, а внутри — gRPC.
Чем API отличается от протокола: протокол — это правила транспорта (HTTP, TCP, MQTT). API — это правила смысла поверх протокола. HTTP — это «как именно перенести байтики», API — это «что эти байтики означают и какие запросы поддерживаются».
Чем API отличается от SDK (Software Development Kit): SDK — это упакованная для конкретного языка библиотека, которая под капотом дёргает API. У Telegram есть HTTP API, а SDK для Python (например, python-telegram-bot) — это удобная обёртка над ним.
Аналогии из жизни
Кафе и меню. Меню — это API кафе. Ты не идёшь на кухню резать огурцы, ты говоришь официанту: «греческий салат, средняя прожарка стейка, без хлеба». Кухня внутри устроена как угодно — газовая плита или индукционная, повар-турок или итальянец. Тебе важно только, что заказ из меню гарантированно принесут.
Где ломается: в кафе официант умеет импровизировать («без огурцов, добавьте сыр» — ок). В API такая «импровизация» обычно не работает: если поле не описано в контракте, его не передать. И ещё: в кафе ты ждёшь, что блюдо принесут «потом». В API чаще всего ответ нужен «прямо сейчас», синхронно.
Розетка и вилка. Розетка — это API питания. Поставщик электричества обещает: «220 вольт, 50 Гц, два штырька, такой-то размер». Ты не лезешь в стену смотреть, как там тянутся кабели от подстанции. Любой прибор с правильной вилкой работает.
Где ломается: у API больше степеней свободы. В Европе вилка одна, в США другая, в Британии третья — это уже три разных API. То же с веб-API: REST, GraphQL, gRPC — формально все «питание», но переходник нужен. Плюс розетка — обмен в одну сторону, ток идёт в прибор. API — это всегда диалог.
Заказ в МФЦ. Подходишь к окну, говоришь: «хочу справку такую-то», подаёшь паспорт. Сотрудник вбивает что-то в систему, через два дня приходит SMS «справка готова». Ты не знаешь, в какие 14 баз он лазил и кому звонил.
Где ломается: МФЦ может потерять документы, и у тебя нет способа это отследить кроме звонка. У хорошего API всегда есть статусы и идемпотентные повторы: послал запрос, получил «принято» с уникальным id, можешь спросить позже «id такой-то, как там?».
Как это работает
Возьмём самый распространённый случай — REST API поверх HTTP. Кафе делает форму бронирования столиков, у них есть бэкенд, у тебя — мобильное приложение.
Шаг 1. Контракт. Где-то описано (в идеале — в OpenAPI/Swagger спецификации), какие есть методы:
POST /api/v1/reservations — создать бронь
GET /api/v1/reservations/42 — посмотреть бронь
DELETE /api/v1/reservations/42 — отменить
И какие поля принимаются и возвращаются: дата, время, число гостей, имя, телефон.
Шаг 2. Аутентификация. Поставщик хочет знать, кто стучится. Чаще всего — токен в заголовке:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Это JWT, API-key, OAuth-токен — варианты есть, смысл один: пришедший идентифицирован.
Шаг 3. Запрос. Клиент собирает HTTP-запрос:
POST /api/v1/reservations HTTP/1.1
Host: api.cafe.example
Authorization: Bearer eyJ...
Content-Type: application/json
{
"date": "2026-06-01",
"time": "19:30",
"guests": 2,
"name": "Паша",
"phone": "+7-999-..."
}
Шаг 4. Обработка на сервере. Бэкенд проверяет токен, валидирует поля (формат даты, есть ли свободные столики), записывает в базу, возвращает ответ:
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"status": "confirmed",
"table": 7,
"expires_at": "2026-06-01T20:30:00+03:00"
}
Шаг 5. Обработка ответа. Клиент смотрит на HTTP-код:
- 2xx — успех (200 OK, 201 Created);
- 4xx — ты сделал что-то не так (400 Bad Request, 401 Unauthorized, 404 Not Found, 429 Too Many Requests);
- 5xx — сервер сломался (500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable).
Шаг 6. Идемпотентность. Если запрос потерялся в дороге, клиент его повторяет. Чтобы не создалась вторая бронь, в запрос кладут «идемпотентный ключ» (уникальный id). Сервер запоминает: «по этому ключу я уже отвечал — вот тебе тот же ответ снова». Идемпотентность — это, кстати, отдельная большая тема, мы её разбирали в другой статье.
Шаг 7. Версионирование. Через год кафе захочет добавить новое поле, скажем dietary_preferences. Они не могут просто сломать старых клиентов — поэтому делают новую версию: /api/v2/reservations. Старый эндпоинт продолжает работать, пока всех клиентов не переведут.
Под капотом у HTTP — TCP, у TCP — IP, у IP — Ethernet или Wi-Fi. Это всё «нижние этажи». API живёт где-то ещё на четыре этажа выше: контракт о смысле сообщений, а не о их транспортировке.
Главное про API
API — это не «технология» и не «формат». Это обещание одной системы другой. Технологии (HTTP, JSON, JWT) — лишь инструмент, чтобы это обещание было исполнимо.
Где встречается в обычной жизни
Когда ты залогинился в новый сервис через «Войти через Google». Сервис дёрнул Google OAuth API: «привет, этот пользователь правда тот, за кого себя выдаёт?». Google спросил тебя «можно?», ты согласился, Google вернул сервису токен и базовый профиль.
Когда такси показывает «5 минут до подачи». Приложение водителя пишет координаты в API сервиса, приложение пассажира эти координаты у API запрашивает. API считает расстояние и время.
Когда ты переводишь деньги по СБП с телефона на телефон. Банк-отправитель дёргает API НСПК (Национальной системы платёжных карт), та — API банка-получателя. Три API, чтобы пять секунд погудеть.
Когда в Apple Pay ты прикладываешь часы к терминалу. Терминал по NFC говорит часам «подпиши такой-то платёж», часы дёргают локальный API безопасного элемента, тот — API банка через интернет, банк отвечает «ок», часы возвращают подпись.
Когда ты делишься постом из Instagram в Telegram. Instagram дёргает «Share API» операционной системы. Та опрашивает все приложения, кто умеет принимать ссылку. Telegram отвечает «я умею». ОС показывает иконку. Это даже не сетевой API, а API внутри самого телефона.
Где встречается в IT и бизнесе
Интеграция продукта с чужой инфраструктурой. Например, бот, который пишет лиды в CRM. Лиды копятся у тебя, CRM — у клиента, между ними API. Тебе не нужно лезть в её базу — ты дёргаешь её endpoint «создай контакт».
Платёжная интеграция. Stripe, ЮKassa, Робокасса — у всех есть HTTP API. Ты не пишешь своё кардовое процессирование, ты делаешь POST на /payments. Они в ответ дают ссылку на оплату или статус.
Webhook-callback от внешней системы. Это обратный API: не ты дёргаешь чужой сервис, а он дёргает тебя. Колл-центр обработал звонок — стучится твоему серверу: «по такому-то лиду статус такой-то». Webhook — это просто API, который ты обязался держать поднятым.
API как продукт. Twilio продаёт SMS и звонки — не как сервис «зайди и нажми», а как API. OpenAI продаёт доступ к моделям. Cloudflare — защиту. У SendGrid основная ценность не интерфейс, а API. Бизнес-модель «API как товар» взлетела в 2010-х и сейчас даёт миллиардные обороты.
Внутренние API больших компаний. В Amazon, Google, Яндексе разные команды не лазят в чужие базы, они дёргают API соседней команды. Это даёт независимость: можно переписать сервис с нуля на другом языке, и никто не заметит, пока контракт не меняется.
Кто пользуется
Stripe — обрабатывает API-запросы в количествах, измеряемых сотнями миллиардов в год. Их API стал отраслевым эталоном: красивая документация, продуманные методы, идемпотентные ключи. Многие команды копируют их подход «один в один».
Twilio — за 2024 год через их API прошло свыше 600 миллиардов SMS и голосовых вызовов (по их публичным отчётам). Это компания, которая не имеет ни одного интерфейса для конечных пользователей — только API.
Slack, Discord, Telegram — все три предоставляют публичные API для ботов. Боты Telegram, по разным оценкам, обслуживают сотни миллионов сообщений в сутки. У Slack API более 2 миллионов сторонних интеграций.
Google Maps Platform — обрабатывает миллиарды запросов к Geocoding, Directions и Places API ежесуточно. Без них половина приложений «найди мне X рядом» просто не существовала бы.
Внутри одной компании. В Netflix внутренние сервисы обмениваются сотнями миллионов запросов в секунду. У них даже есть свой API gateway Zuul, который только и делает, что разводит трафик между ними.
Альтернативы и конкуренты
API — это не «продукт», а класс решений. «Альтернативы» здесь — разные стили API:
REST. Плюсы: простой, понятный, любая команда поднимает за день, есть инструменты на любом языке. Минусы: для сложных выборок (нужно 7 полей из 10) приходится делать много мелких запросов или городить параметры.
GraphQL. Плюсы: клиент сам решает, какие поля ему нужны, один запрос покрывает многое. Минусы: сложнее в кешировании, сложнее в защите (можно случайно сделать «жирный» запрос, который убьёт сервер).
gRPC. Плюсы: быстрый (бинарный protobuf), типизированный, отлично для микросервисов. Минусы: плохо работает напрямую с браузером (нужен gRPC-Web), сложнее отлаживать, чем JSON.
Прямой доступ к базе (вместо API). Плюсы: меньше прослоек, быстрее. Минусы: нельзя поменять схему, не уведомив всех; нет контроля доступа на уровне «можно/нельзя»; ломается принцип «инкапсуляция».
Файловый обмен (CSV/XML по FTP). Так до сих пор работают многие банковские интеграции и часть госуслуг. Плюсы: легко аудировать, можно дёшево разово настроить. Минусы: задержка (выгрузка раз в сутки), нет интерактива, тяжело отслеживать ошибки.
Когда НЕ стоит использовать
Когда задержки критичны. API-вызов по сети — это всегда минимум десятки миллисекунд (если оба сервера в одном дата-центре) или сотни (если через интернет). Если ты пишешь высокочастотный трейдинг или игровой движок — там общаются через разделяемую память или внутрипроцессные вызовы.
Когда обмен — массивный батч. Если нужно раз в сутки передать миллион строк, не имеет смысла делать миллион HTTP-запросов. Здесь честнее CSV-выгрузка по S3 или прямой ETL. Один большой файл всегда дешевле миллиона маленьких запросов.
Когда «контракт» меняется каждую неделю. API хорош тем, что обещает стабильность. Если у тебя продукт в фазе ранней разработки, и ты каждый день переделываешь модели данных, опубликованный API превратится в постоянный источник несостыковок. Лучше держать сервисы в одном репозитории и общаться напрямую, пока всё не устаканится.
Грабли публичного API
Открыть API — значит подписаться на обратную совместимость. Раз ты пообещал, что поле называется customer_id и приходит как строка, ты не можешь это поменять без боли. Все опубликованные API живут версиями (/v1, /v2), и каждая версия — это груз, который ты будешь нести годами.
Связанные понятия
- REST — самый распространённый стиль HTTP-API: ресурсы + методы HTTP.
- GraphQL — альтернатива REST, где клиент сам описывает, какие поля ему нужны.
- gRPC — бинарный, типизированный API поверх HTTP/2, любимец микросервисов.
- Webhook — «обратный API»: внешняя система стучится к тебе по HTTP при событиях.
- OpenAPI / Swagger — машинно-читаемое описание REST API. По нему генерят документацию и клиентские библиотеки.
- SDK — упакованная под конкретный язык библиотека, которая под капотом дёргает API.
- API Gateway — слой, который принимает все внешние запросы и распределяет их по внутренним сервисам.
- Rate limit — ограничение «не больше N запросов в секунду с одного клиента». Без него любой публичный API быстро ляжет.
Литература и источники
- Roy Fielding, «Architectural Styles and the Design of Network-based Software Architectures», 2000, en — диссертация, в которой описан REST. Искать в Google по точному названию, первая ссылка — Калифорнийский университет в Ирвайне.
- Книга «Designing Web APIs» (Brenda Jin, Saurabh Sahni, Amir Shevat), 2018, en — от инженеров Slack, Yahoo и Stripe. Объясняет «как сделать API, которым хочется пользоваться».
- Книга «REST API Design Rulebook» (Mark Massé), 2011, en — правила и анти-паттерны.
- Документация Stripe API: stripe.com/docs/api — образцовая публичная документация, по которой стоит учиться писать собственную.
- Wikipedia: ru.wikipedia.org/wiki/API — для общего ознакомления.
- Канал «Web APIs Mastery» на YouTube — для тех, кто хочет видеоформат.
Где встретилось у меня
Вчера я анализировал, как устроены антифрод-сигналы в проекте БрендБот и связанных сервисах. Большая часть исследования была именно про то, какие данные приходят в HTTP API (/api/visitors, /api/quiz-submitted, webhook_worker), какие API дёргает колл-центр, и как организовать стабильный обмен между ботом, квизом и КЦ. Понятие «API» там было фоном каждой реплики — но именно в этом и важно его понимать.
Краткое резюме
- API — это контракт между двумя программами: какие команды можно слать и что прилетит в ответ. Внутренности друг друга при этом не нужны.
- Самый распространённый сегодня формат — REST API поверх HTTP с JSON. Альтернативы: GraphQL (клиент сам выбирает поля), gRPC (быстрый бинарный для микросервисов).
- API — это обещание стабильности. Раз опубликовал — обязан поддерживать; ломать без новой версии нельзя.
- Хороший API — это аутентификация + идемпотентность + версии + чёткие коды ошибок + документация. Без этого вокруг него начнётся хаос.
- Для бизнеса API — не «штука для технарей», а способ продавать функциональность как товар (Stripe, Twilio, OpenAI) и интегрироваться без боли с партнёрами.