Low-code API: Как ваш разработчик может разорить вас одной строчкой кода (почему корзина — это минное поле)
Привет, друзья!
Вы же любите no-code/low-code, правда? Кликаете мышкой, перетаскиваете блоки, пьёте капучино — и вуаля, ваше приложение готово! Но стоп. А что, если ваш "волшебный" разработчик на low-code случайно (или специально?) сделал так, что любой школьник может купить у вас iPhone за 10 рублей? Давайте разберёмся, как это возможно, и почему выбор разработчика — это как выбор зубного врача: если ошибётесь, будет больно.
История одной корзины, или почему ваш магазин — не благотворительный фонд
Представьте: у вас есть интернет-магазин. Товары, корзина, заказы — всё как у людей. Всё работает на low-code платформе, чтобы сэкономить бюджет. Но вдруг вы замечаете, что дорогие товары улетают со склада, а деньги не приходят. В чём подвох?
Всё дело в том, как передаются данные о заказе.
❌ Пример "гениального" кода (так делать нельзя!):
Ваш разработчик настроил API так, что клиент сам указывает цену товара. Выглядит это примерно так:
Метод POST /orders
Или например, в вашем приложении при тапе на кнопку "Оформить заказ", вы запускаете цикл и записыавете каждую строку заказа в Supabase (no-code/low-code backend на базе PostgreSQL), указывая product_id, quantity, price.
Как это исправить? Секреты правильных таблиц и API
🔑 Применая структура данных:
1. Таблица products:
- id (уникальный код товара)
- name
- price (хранится ТОЛЬКО здесь!)
2. Таблица orders:
- id (UUID)
- total (сумма заказа)
3. Таблица order_items:
- order_id (ссылка на заказ)
- product_id (ссылка на товар)
- quantity
- price (цена на момент заказа, берётся из products)
✅ Пример умного API:
Клиент отправляет только ID товара и количество. Цену знает только сервер!
Пример API в Supabase
Давайте рассмотрим на примере Supabase, который кстати можно установить на свой сервер. Для простоты будем использовать обычные функции в базе данных.
1. Создадим SQL-функцию bulk_insert_order_items.
Эта функция будет принимать на входе id заказа и список позиций заказа (только id товара и количество. Без указания цен!).
А внутри она будет брать из базы цены на товары и считать стоимость по каждой позиции, а также стоимость всего заказа.
2. Проверим работу функции непосредственно через SQL:
3. Вместо обычной sql-функции вы можете использовать Edge Functions, если требуется более сложная логика или интеграция с внешними сервисами. Преимущество Edge Functions в том, что они позволяют контролировать каждый шаг обработки, добавлять кастомные проверки и легко масштабировать решение, что может быть удобнее, если нужна дополнительная гибкость по сравнению с SQL-функциями.
4. Supabase автоматически генерирует API для вызова этой функции. Указываем номер заказа и передаем список товаров и количество, без цен!
Совет заказчикам: Как не нанять "разрушителя бизнесов"
Спросите: «Где считается цена — на сервере или в телефоне клиента?». Если ответ «В интерфейсе», бегите быстрее света.
Проверьте API: Если в запросе есть price, discount или total — это красная лампочка.
Требуйте логов: Все операции с деньгами должны логироваться на сервере.
Узнайте ИТ-бэкграунд вашего специалиста: имеет ли ваш no-code / low-code- разработчик опыт работы разработчиком или системным аналитиком.
Итог: Low-code — это круто, но...
...если ваш разработчик пришел в low-code без базовых принципов разработки ПО, будьте готовы к небезопасным и не оптимизированным приложениям.
P.S. Если после прочтения статьи вы подумали: «А мой API тоже дырявый?» — давайте проверим! Пишите мне в Telegram: @kirilkindn. Устроим вашему приложению «тест-драйв» — бесплатно, с кофе и полезными фидбеками 😉.