Dmitriy Kononov
Обсудим задачуСвязаться

Новости и разборы

Где выполнять логику API: база, middleware или приложение

JavaScript в MySQL, middleware Supabase, Hyperdrive и нагрузочные проверки Postman дают практические критерии размещения правил и измерения результата.

Перенос функции ближе к данным может сократить лишнюю работу, но одновременно меняет границу ответственности. Если проверка реквизита превращается в решение об обслуживании клиента, техническая оптимизация незаметно начинает управлять бизнесом. Октябрьские публикации помогают увидеть эту границу точнее.

Размещать правило стоит по тому, какие данные и полномочия ему нужны, как его проверять и как откатывать. Синтаксис языка и удобство конкретного инструмента идут после этих вопросов.

Четыре новости о разных слоях запроса

Percona 15 октября объяснила применение JavaScript-функций внутри MySQL. У описанного движка нет сетевого и файлового доступа или API Node.js. Supabase в публикации от 15 октября описала упорядоченную композицию middleware для Fetch-обработчиков.

Разбор Hyperdrive от Cloudflare 14 октября показывает, что посредник должен корректно обращаться с состоянием соединений и ответами кэша. Postman 9 октября описала облачный запуск нагрузочных проверок коллекций. Источники не доказывают ускорение произвольного API; они дают основания проверять разные места выполнения работы.

Наш вывод из сопоставления: база подходит для ограниченного преобразования значений, входной слой проверяет условия допуска, приложение принимает предметное решение. Кэш может повторно использовать ответ только при сохранении его смысла и границ доступа. Конкретная реализация требует проверки собственного стека.

Разделить вычисление и полномочие

Функция может привести телефон к каноническому формату и вернуть список ошибок. Решение связаться с человеком, отклонить заявку или оставить её для ручной проверки зависит от состояния процесса, роли сотрудника и договорённостей компании. Эти зависимости труднее поддерживать внутри маленькой функции преобразования.

У middleware другая задача. Он может остановить запрос до обработчика, если идентичность не подтверждена. Но наличие валидного токена ещё не разрешает согласовать конкретную заявку. Предметная проверка должна учитывать принадлежность записи, текущий статус и допустимый переход.

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

Условный сценарий: импорт контактов

Предположим, компания загружает контакты партнёров из нескольких источников. Одна запись содержит номер с пробелами, другая совпадает с существующим клиентом, третья относится к другой организации. Это условный сценарий, не результат конкретного внедрения.

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

Для повторного импорта сохраняется идентичность строки источника и версия её содержимого. Если после изменения правила нормализации результат отличается, оператор должен видеть причину, а не новую не связанную запись. Старые исходные данные полезны для объяснения, но доступ к ним ограничивают так же, как к остальной клиентской информации.

Кэшировать общий справочник форматов и ответ с персональными контактами означает принимать разные решения. Для второго нужно учитывать контекст доступа, обновления и допустимую устарелость. Сам факт, что ответ ускоряет экран, не доказывает правильность политики кэширования.

Измерение должно ловить перенос нагрузки

После перемещения вычисления в базу приложение может тратить меньше времени, а база больше. Для корректного сравнения нужно смотреть весь путь запроса, конкуренцию за соединения, длительность транзакций и долю ошибок. Иначе оптимизация одного компонента просто перенесёт очередь к другому.

Набор данных должен включать допустимые строки, конфликты и отказы. Проверка только чистого импорта не показывает стоимость обработки проблемных записей. Облачный генератор нагрузки помогает отделить ограничения ноутбука от нагрузки на API, но не делает сценарий автоматически представительным.

Полезный критерий выпуска: одинаковые права и исходные данные дают одинаковое предметное решение до и после изменения. Производительность оценивают следом. Если решение изменилось намеренно, это отдельное изменение продукта с собственной приёмкой.

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