Prisma Queries с условиями
В настоящее время я создаю новый проект с Prisma и думаю о том, как создавать свои SQL-запросы, когда у меня разные зависимости.
Предположим, я хочу добавить в запрос условие include или where при определенном условии. Стоит ли мне теперь использовать для этого новый метод? Как второй API Get Path/api/users/with-include
соответственно /api/users/condition1
Или мне следует расширить существующий метод с помощью запроса if, как предлагается здесь?
И используйте параметр запроса /api/users?with-include=true
соответственно /api/users?condition1=true
Какая здесь лучшая практика?
1 ответ
Поскольку у вас может быть много условий, означает ли это, что вы создадите много конечных точек для разных условий? Сначала у вас может возникнуть соблазн, но это становится негибким.
Для данной конечной точки вы можете запрашивать данные на основе таких фильтров, как where, include, limit, order и т. Д. В параметрах запроса для GET (или body, если используется POST).
ОТДЫХ
/api/users?filter[where][gender]=male&filter[take]=10
Или строковый формат JSON:
/api/users?filter={"where":{"gender":"male"},"take":10}
В приведенном выше примере вы можете создавать гибкие запросы, и вы можете напрямую использовать этот объект запроса в своем запросе Prisma, если вы создали его таким образом (в приведенном выше примере).
Но я бы не советовал использовать его напрямую, поскольку любой может манипулировать значениями параметров запроса. Скажем, кто-то изменил значение
const filter = getQueryObjectFromURL();
if( filter.where.take > 100 ) {
filter.where.take = 100;
}
Наконец, вы можете использовать
await prisma.users.findMany(filter);
Но если условий меньше и вам не нужен этот уровень фильтра, вы можете сделать собственный запрос на основе условия.
api/users?gender=male
const { gender } = getQueryObjectFromURL();
const filter = {
where: {}
};
if(gender){
filter.where.gender = gender; // You might want to check for values before doing this because gender=skdjshdf can be passed
}
Вы можете передать любое количество параметров запроса, но вы проверяете только наличие тех, которые требуются для вашего случая. Если он там и действителен, добавьте его в свой фильтр или проигнорируйте.
Если есть много условий (