170 похожих чатов

Если я пишу RESTful API, и мне нужно делать следующие

запросы:
1. Всех пользователей
2. Всех пользователей с их типами
3. Всех пользователей с их типами и связями с группой
Как будет лучше?
/api/users
/api/users/with-types
/api/users/with-types-and-groups
или
/api/users
/api/users?types=true
/api/users?types=true&groups=true

22 ответов

7 просмотров

Ваш restful api пахнет как graphql

Напомню сам вопрос - ну не вижу я середину тут (((

Типы пользователей это их кореша и братухи?

Когда юзеров возвращаешь всех, возвращай только поля с той же таблицы (и максимум отношения типа 1-к-1) по роуту GET /api/users, когда получаешь одного пользователя возвращай все его отношения, включая типов и группы, по роуту GET /api/users/:id

Кстати прикол для любителей TypeORM, если в таблице юзеров 1000 юзеров и каждый юзер находится в 100 группах, вопрос: сколько строк вернёт JOIN юзеров и групп (который происходит при подгрузке отношения)? Поскольку я потерял веру в этот чат, сразу ответ напишу: 100к.

Feanorx
Кстати прикол для любителей TypeORM, если в таблиц...

Ну если агрегировать группы юзера на выходе в какой-нибудь array_agg(jsonb_agg(/* */)) То выйдет 1000 записей (как и должно) а не 100к

Anton K.
Ну если агрегировать группы юзера на выходе в како...

А заставлять целевую аудиторию того сообщения пользоваться SQL это кощунство.

Feanorx
TypeORM так не умеет.

А какая орм так умеет? Просто интересно Это не самая тривиальная задача для орм))

Anton K.
А какая орм так умеет? Просто интересно Это не ...

Табличка от отношения many-to-many все равно будет по итогу прочитана полностью. Но минимизировать количество дубликатов в передаваемых данных умеет MikroORM. Там есть две стратегии разрешения отношений: через JOIN, либо дёргая по ID. Вот тебе нужна вторая. Ещё это умеет Objection

Feanorx
Табличка от отношения many-to-many все равно будет...

микроорм вообще не понравилась самая неочевидная настройка/использование (изза этих fork) изза необходимости юзать легаси декораторы и допиливать тсконфиг еще пришлось чтобы только завести эту микрорм потом она всё равно достает поля которые я не прошу и прибивает им undefined ну и эта тема с fork на каждый чих вообще хз что такое ну и по производительности на последнем месте в сравнении с остальными ормами (@prisma/client sequelize typeorm kysely drizzle) (но возможно я не правильно готовил микроорм)

Anton K.
микроорм вообще не понравилась самая неочевидная ...

Все о чем ты говоришь пофиксили в последних версиях. По производительности не знаю. Сейчас посмотрю.

Feanorx
Все о чем ты говоришь пофиксили в последних версия...

тесты (ровно так же как и щупал микро орм) буквально 3 недели назад делал

Feanorx
А какие?

не просто смотрел как быстро достают данные без joinов await Promise.all() 50_000 queries in await Promise.all() ("SELECT email FROM users WHERE users.id = $1") with random users.id 10 separately times await one by one in for loop 50_000 queries in await one by one in for loop ("SELECT email FROM users WHERE users.id = $1") with random users.id 10 separately times

Anton K.
тесты (ровно так же как и щупал микро орм) букваль...

Зато инстансы получаешь сразу, не надо писать код по проведению результата к entity.

Feanorx
Зато инстансы получаешь сразу, не надо писать код ...

вот не надо давать орму лезть в бл пускай данные принесет а бл сама из них сделает ентити по своим правилам

Anton K.
не просто смотрел как быстро достают данные без ...

Ну это не честный тест. Ты базу перегрузишь таким огромным количеством запросов. Он там под капотом делает запросы типа "where id in" и отсылает на каждую таблицу по одному запросу.

Anton K.
вот не надо давать орму лезть в бл пускай данные ...

"не надо" неприменимое выражение, имхо в кейсе сокращения углов по максимуму - надо в кейсе продового приложения с нормальными временными и денежными инвестициям - наверно не надо

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта