hostprofi.ru
Подобрать хостинг
Термин·буква К

Колбэк

краткое определение

Колбэк (callback, обратный вызов) — функция, передаваемая другой функции или процессу как аргумент и вызываемая в заданный момент: после завершения операции, при наступлении события или как реакция на ошибку.

Колбэк (callback, функция обратного вызова) — паттерн программирования, при котором функция A получает функцию B в качестве аргумента и вызывает B в определённый момент: после завершения асинхронной операции, при наступлении события, при возникновении ошибки. Это один из фундаментальных паттернов асинхронного программирования: позволяет продолжить выполнение кода без блокирования на ожидание медленной операции.

Как работает

В синхронном программировании функции вызываются последовательно: каждая ждёт завершения предыдущей. В асинхронном — операция (I/O, сетевой запрос, таймер) инициируется, и выполнение продолжается без ожидания результата. Когда операция завершается, вызывается колбэк с результатом.

Классический пример JavaScript: fs.readFile('file.txt', (err, data) => { /* колбэк */ }). Node.js продолжает выполнять другой код, пока операция чтения файла не завершится. Паттерн «error-first callback» в Node.js: первый аргумент колбэка — ошибка (null если успешно), второй — результат.

«Callback hell» (или «pyramid of doom») — антипаттерн, возникающий при вложенных колбэках: каждый следующий шаг вложен в предыдущий, образуя лестницу отступов. Решения: Promise (ES6, 2015), async/await (ES2017) — синтаксический сахар над Promise, превращающий асинхронный код в линейный.

В серверном контексте колбэки используются в обработчиках событий: server.on('request', callback) в Node.js HTTP Server. PHP не имеет нативной асинхронности в стандартном исполнении — каждый HTTP-запрос обрабатывается синхронно. Для PHP-колбэков используют анонимные функции (замыкания) как аргументы: array_map(function($item) { ... }, $array).

HTTP-колбэк (Webhook)

В контексте API и интеграций колбэк часто означает Webhook — HTTP-запрос от одного сервиса к другому при наступлении события. Пример: платёжная система отправляет POST-запрос на URL вашего сервера при успешной оплате. Сервер «колбэк» принимает запрос и обновляет статус заказа. Это событийная модель (event-driven): вместо периодических опросов API (polling) — сервис сам уведомляет при изменении.

Webhook отличается от REST API: REST API — клиент инициирует запрос к серверу. Webhook — сервер инициирует запрос к клиенту при событии. Webhooks широко используются: GitHub (push event), платёжные системы (Stripe, ЮKassa), CRM, телеграм-боты.

История

Концепция callback появилась вместе с событийно-ориентированным программированием в операционных системах 1960–1970-х годов. В Unix сигналы (SIGINT, SIGTERM) — ранняя форма колбэков: ядро вызывает зарегистрированный обработчик при событии. В JavaScript колбэки стали центральным паттерном с 1995 года. Термин «Webhook» ввёл Джефф Линдси в 2007 году. Promise/async-await (2012–2017) снизили необходимость явных колбэков в асинхронном коде.

На что обращать внимание

Для Webhook-колбэков проверяйте подпись запроса (HMAC) — убедитесь, что запрос пришёл от ожидаемого источника, а не от злоумышленника. Серверный колбэк должен отвечать быстро (HTTP 200 за 5–30 секунд) — иначе отправляющий сервис может посчитать доставку неудачной и повторить запрос. Для тяжёлой обработки — принять колбэк мгновенно (HTTP 200), поставить задачу в очередь и обработать асинхронно. Для приёма Webhook на VPS убедитесь, что файрвол открыт для входящих HTTPS-запросов на порт 443.

Callback в программировании

Callback (обратный вызов) — функция, передаваемая как аргумент другой функции для вызова после завершения операции. Используется для асинхронного программирования: HTTP-запрос → callback при получении ответа. Node.js построен на event-loop + callbacks/Promises/async-await.

Webhook как HTTP Callback

Webhook — механизм уведомления через HTTP POST. Сервис отправляет данные на ваш URL при событии: новый заказ, изменение статуса, входящее сообщение. Примеры: GitHub Webhooks (push, PR), Stripe (payment), Telegram Bot API (сообщения). Ваш сервер должен отвечать 200 OK в течение 5–30 секунд.

Надёжная обработка Webhook

Принять Webhook → вернуть 200 OK немедленно → обработать асинхронно через очередь (Redis/RabbitMQ). Идемпотентность: повторная доставка одного события не должна дублировать действие. Верификация подписи: Stripe, GitHub добавляют HMAC-подпись в заголовки — проверяйте перед обработкой.

Callback и Webhook широко используются при интеграции: биллинг получает webhook при оплате, CI/CD запускается по webhook из Git. Redis или RabbitMQ как очередь для надёжной обработки. Nginx принимает webhook-запросы. HTTPS обязателен — webhook содержит чувствительные данные.

Другие термины