我应该订购 GraphQL 结果服务器端还是客户端?

Posted

技术标签:

【中文标题】我应该订购 GraphQL 结果服务器端还是客户端?【英文标题】:Should I order GraphQL results server side or client side? 【发布时间】:2019-11-20 22:00:19 【问题描述】:

我们在我们的一个内部项目中使用了 graphql-ruby:为 React Native Web 前端提供服务的 Rails API 后端。我很好奇在处理返回结果的排序方面什么被认为是最佳实践。

我看到的一个选项是我们同时提供order_directionfield_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

当然,另一种选择是按照预定义的方向(ASCDESC)提供所有结果,并让客户端自己重新排序。然而,这似乎非常低效。由于真正缺乏关于如何解决这个问题的信息,我很好奇什么被认为是最佳实践。

任何帮助表示赞赏!

【问题讨论】:

在数据库级别排序总是更快。 【参考方案1】:

作为最佳实践,排序结果应尽可能位于服务器(数据库)的下方。

但是,据我了解,您在服务器端(GraphQL API)或前端(React Native 应用程序)的排序结果之间存在疑问,所以:

我建议为客户端应用程序提供一个选项,以按特定顺序获取结果并处理服务器 API 上的排序,这样客户端应用程序应该只显示结果而不需要花费时间处理它们。

【讨论】:

感谢您的建议,马可!我认为你是对的,这是最有意义且效率最高的。 当然@ianbayne,如果它有帮助,不要忘记接受答案。 谢谢,@Marco,我对 *** 还不是很熟悉。 别担心,我们随时为您提供帮助 :) 这里有一份指南,可以为您的未来提供帮助 ***.com/help/someone-answers

以上是关于我应该订购 GraphQL 结果服务器端还是客户端?的主要内容,如果未能解决你的问题,请参考以下文章

用 GraphQL 快速搭建服务端 API

如何在 Apollo 中关闭 GraphQL 订阅的套接字连接

Appsync 客户端对 GraphQL 突变的 Angular 订阅

GraphQL 服务器端流式实现

我应该使用快速、客户端反应路由器还是服务器端反应路由器?

寻找服务器端 GraphQL 订阅监听器的代码