Рубрика: «Очумелые рукожопики»
И сегодня я расскажу о мегакостыле, который может прилично сэкономить вам времени:
Представим, что вам с 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.
Если у вас есть примеры других способов быстро раздать данные фронту, пишите в мне ЛС или коменты. Все на этом канале должны стать ниндзя быстрого создания продуктов, так что сделайте вклад ⛩