【发布时间】:2017-04-03 01:24:44
【问题描述】:
所有关于 GraphQL 的文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢。
【问题讨论】:
标签: rest restful-authentication graphql
所有关于 GraphQL 的文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢。
【问题讨论】:
标签: rest restful-authentication graphql
缺点:
但是,这些不仅仅是这些:
【讨论】:
graphql-spring-boot-starter 和 graphql-java-tools 即可开始使用。在 .graphqls 资源中创建您的架构并创建解析器类,您就完成了。启动并运行一个有效的测试示例大约需要 10 分钟。
我在 graphQL 中看到的最大问题是,如果您使用的是关系数据库,那就是 joins。
您可以允许/禁止一些字段的事实使连接变得不平凡(不简单)。这会导致额外的查询。
此外,graphql 中的嵌套查询会导致循环查询,并可能使服务器崩溃。必须格外小心。
限速呼叫变得困难,因为现在用户可以在一个呼叫中触发多个查询。
提示:使用 facebook 的数据加载器来减少 javascript/node 的查询次数
【讨论】:
cost给请求。如果您使用预定义的查询,客户端只发送 ID,这也不是问题。
我找到了一些重要的concerns for anyone considering using GraphQL,到目前为止,主要的几点是:
查询不定深度:GraphQL 不能查询不定深度,所以如果你有一棵树,想在不知道深度的情况下返回一个分支,你就得做一些分页。 p>
特定的响应结构:在 GraphQL 中,响应与查询的形状相匹配,因此如果您需要以非常特定的结构响应,则必须添加一个转换层来重塑响应.
网络级别的缓存:由于 GraphQL 通常通过 HTTP(单个端点中的 POST)使用,因此网络级别的缓存变得困难。解决它的一种方法是使用持久查询。
处理文件上传:GraphQL 规范中没有关于文件上传的内容,突变不接受参数中的文件。为了解决这个问题,您可以使用其他类型的 API(如 REST)上传文件,并将上传文件的 URL 传递给 GraphQL 突变,或者在执行上下文中注入文件,这样您就可以在解析器函数中拥有文件。
不可预测的执行:GraphQL 的本质是您可以组合任何您想要的字段进行查询,但是这种灵活性并不是免费的。有一些值得了解的问题,例如性能和 N+1 查询。
超级简单的 API:如果您的服务公开了非常简单的 API,GraphQL 只会增加额外的复杂性,因此简单的 REST API 会更好。
【讨论】:
每年都在变得越来越好,就目前而言,GraphQL 的community 正在增长,因此,对于之前其他答案中强调的许多问题,有更多的解决方案。 但要承认是什么仍然阻止公司将所有资源投入到 GraphQL,我想列出一些问题和解决方案,然后是未解决的问题。
但还有更多的情况可以算作缺点:
总而言之,GraphQL 只是针对特定目标的工具,它肯定不是解决所有问题的灵丹妙药,当然也不能替代 REST。
【讨论】:
拥有一个端点并公开所有数据真的很棒。我发现 GraphQL 需要考虑以下几点:
另外,应该在实施后考虑优点:
实施后使用参数和自定义排序轻松添加条件
使用大量自定义过滤器并摆脱所有需要创建的操作,例如用户可以将 id、name 等作为参数并执行过滤。此外,过滤器也可以应用于用户中的组。
【讨论】:
我认为目前 graphql 必须是后端架构的一部分,对于文件上传,您仍然需要使用常规 api
【讨论】: