Должен ли я заказывать результаты GraphQL на стороне сервера или на стороне клиента?

Мы используем graphql-ruby в одном из наших внутренних проектов: серверная часть API Rails, обслуживающая веб-интерфейс React Native. Мне любопытно, что считается лучшей практикой в ​​отношении обработки упорядочения возвращаемых результатов.

Один из вариантов, который я вижу, заключается в том, что мы предоставляем как аргументы order_direction, так и field_to_order_by, и клиент должен явно указывать каждый из них для запроса (конечно, также предоставляя значения по умолчанию).

Один из способов справиться с этим будет

if (sort_column = args[:sort_by])
  if (direction = args[:direction])
    users = users.order(sort_column.to_sym => direction.to_sym)
  else
    users = users.order(sort_column.to_sym) # default sort order
  end
end

Другим вариантом, конечно, было бы предоставление всех результатов в заранее определенном направлении (ASC или DESC) и изменение порядка самим клиентом. Однако это кажется очень неэффективным. Поскольку существует реальная нехватка информации о том, как подойти к этому, мне любопытно, что считается лучшей практикой.

Любая помощь приветствуется!


person ianbayne    schedule 11.07.2019    source источник
comment
Заказ на уровне базы данных всегда будет быстрее.   -  person Eyeslandic    schedule 11.07.2019


Ответы (1)


В соответствии с передовой практикой упорядочивание результатов должно производиться как можно ниже по серверу (базе данных).

Но, насколько я понимаю, вы задаетесь вопросом, упорядочивать ли результаты на стороне сервера (GraphQL API) или на стороне интерфейса (приложение React Native), поэтому:

Я бы рекомендовал предоставить клиентскому приложению возможность получать результаты в определенном порядке и обрабатывать сортировку в API-интерфейсе сервера, таким образом, клиентское приложение должно отображать только результаты без необходимости тратить время на их обработку.

Надеюсь, поможет.

person Marco Daniel    schedule 11.07.2019
comment
Спасибо за предложение, Марко! Я думаю, вы правы, что это наиболее разумно и с высочайшим уровнем эффективности. - person ianbayne; 16.07.2019
comment
Конечно, @ianbayne, не забудьте принять ответ, если он будет полезен. - person Marco Daniel; 16.07.2019
comment
Спасибо, @Marco, я еще не очень хорошо знаком со Stackoverflow. - person ianbayne; 17.07.2019
comment
Не беспокойтесь, мы здесь, чтобы помочь :) вот руководство, которое может помочь вам в будущем stackoverflow.com/help/someone- ответы - person Marco Daniel; 17.07.2019