所有关于GraphQL的文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢。
答案 0 :(得分:67)
缺点:
但是,这些不仅仅是因为这些:
答案 1 :(得分:40)
我找到了一些重要的concerns for anyone considering using GraphQL,到目前为止,要点是:
无限深度查询:GraphQL无法以无限深度进行查询,因此如果您有一棵树并希望在不知道深度的情况下返回分支,则必须进行一些分页。
特定响应结构:在GraphQL中,响应与查询的形状相匹配,因此如果您需要在非常特定的结构中进行响应,则必须添加转换层以重塑形状回应。
网络级缓存:由于通常使用GraphQL(通过单个端点进行POST),因此网络级缓存变得很难。解决它的方法是使用持久查询。
处理文件上传:GraphQL规范中没有关于文件上传的内容,并且突变不接受参数中的文件。要解决此问题,您可以使用其他类型的API(如REST)上传文件,并将上传文件的URL传递给GraphQL变异,或者将文件注入执行上下文,这样您就可以将文件放在解析器函数中。
不可预测的执行:GraphQL的本质是您可以查询组合所需的任何字段,但这种灵活性不是免费的。有一些值得关注的问题,比如Performance和N + 1 Queries。
超级简单的API :如果您的服务公开了一个非常简单的API,GraphQL只会增加额外的复杂性,因此简单的REST API可以更好。
答案 2 :(得分:27)
我在graphQL中遇到的最大问题是,如果您使用关系数据库,则使用连接。
您可以允许/禁止一些字段,这使得连接变得非常简单(不简单)。这导致额外的查询。
此外,graphql中的嵌套查询会导致循环查询,并且使服务器崩溃。必须格外小心。
限制电话变得困难,因为用户可以在一次通话中触发多个查询。
提示:使用facebook的dataloader减少javascript / node的查询次数
答案 3 :(得分:8)
它每年都在变得越来越好,并且就目前而言,GraphQL的community正在增长,结果,对于许多以前在其他答案中都强调的问题,有更多的解决方案。 但是要承认将所有资源投入GraphQL仍然使公司陷入困境,我想列出一些问题和解决方案,然后是未解决的问题和解决方案。
但是还有更多的情况可以算作不利条件:
总而言之,GraphQL只是实现特定目标的工具,并且可以肯定,它并不是解决所有问题的灵丹妙药,当然也不是REST的替代品。
答案 4 :(得分:0)
拥有一个端点并公开所有数据真的很棒。我发现GraphQL需要考虑以下几点:
此外,在实施之后应该考虑专业人士:
易于实施的参数和自定义顺序添加条件
使用大量自定义过滤器,并摆脱所有需要创建的操作,例如,用户可以将id,name等作为参数并执行过滤。另外,过滤器也可以应用于用户中的组。
答案 5 :(得分:0)
我认为目前graphql必须是后端体系结构的一部分,对于文件上传,您仍然可以使用常规api