was successfully added to your cart.

Корзина

Превращаем обычный backend в Firebase-like машину смерти (или нет)

Рубрика: «Очумелые рукожопики»

И сегодня я расскажу о мегакостыле, который может прилично сэкономить вам времени:

Представим, что вам с frontend надо делать запрос к backend и при этом уточнять кучу фильтров, сортировок и полей, которые вы хотите получить.

А проект надо запустить уже завтра. И вы вздыхаете:

«Вот бы у нас была возможность как в Firebase или Hasura прям с frontend запрашивать нужные данные с любыми фильтрами и сортировками… Но у нас обычный API и SQL база данных, мы так не можем…»

И тут вы неправы! Можете! Причем без всякого стороннего ПО!

На любом языке программирования есть библиотеки под названием json to sql. Принцип работы: берется json объект (например, похожий на запрос в MongoDB) и конвертируется в SQL.

Тоесть, вот такой объект:

const json = {
   id: {
      _eq: 1 // id equal 1
   },
   birth_date: {
      _isnull: false // and birth_date is not null (true for 'is null')
   },
   _or: {
      name: {
         _lk: "ana%" // or name like ana
      },
      created_at: {
         _gte: "2019-01-01 00:00:00" // and created_at is greater or equal to 2019-01-01 00:00:00
      },
      _or: {
         name: {
            _lk: "luis%" // or name like luis
         },
         created_at: {
            _gte: "2019-02-01 00:00:00" // and created_at is greater or equal to 2019-02-01 00:00:00
         }
      }
   }
}

Превращается вот в такой SQL:

select id, name 
from users 
where (id = 1 or (name like 'ana%' and created_at >= '2019-01-01 00:00:00' or (name like 'luis%' and created_at >= '2019-02-01 00:00:00')))

Догадались? Правильно! Теперь мы с фронтенда можем просто отправлять подобного рода json объекты на backend, которые автоматически превращаются в SQL и делается запрос в БД.

Пара примеров для Node.js: первый, второй, третий, четвертый, и еще куча по запросу «nodejs json to sql».

Безопасно ли это? Абсолютно нет!

Стоит ли так делать в серьезных проектах? Ни в коем случае!

Ебучий ли это костыль, который максимально быстро и эффективно решит кучу проблем, когда вы разрабатываете MVP / Стартап, поэтому его стоит использовать? Да, на 100%.

Ко всему прочему, вы можете проверять присланный json и удалять оттуда запрещенные поля / типы фильтрации + добавлять фильтрация запрещенного контента после получения его из БД. Тем самым, хоть немного обезопасив данный способ.

Костыляйте на здоровье.

P.S.

А если вдруг так получилось, что у вас уже есть PostgreSQL и GQL, или вы не против их добавить в проект, то просто воспользуйтесь Hasura.

Есть еще PostgREST, но я его не пробовал и система Access Managment основана на доступах самой БД, что на порядок сложнее, чем в Hasura.

P.P.S.

Если у вас есть примеры других способов быстро раздать данные фронту, пишите в мне ЛС или коменты. Все на этом канале должны стать ниндзя быстрого создания продуктов, так что сделайте вклад ⛩

Гораздо больше контента и развлечений в Telegram-канале