繁体   English   中英

如何使用 GraphQL 突变进行更新(热巧克力)

[英]How to do updates with GraphQL mutations(Hot Chocolate)

我们最近在我们的项目中引入了 GraphQL,我以前从未使用过它,但是我非常喜欢它。 我们决定使用 .NET Core 的 HotChocolate 库和客户端的 Apollo 来 go。

我不太确定的一件事是关于突变,特别是使用突变执行更新和部分更新。 我在某处读到这种做法,我应该坚持为每个 update 创建特定的突变,例如 updateUsername()、updateAddress()、updateCity() 所有这些都应该有特定的突变。

问题在于,如果我决定朝这个方向发展 go,我的代码库将大幅增长,因为我们非常依赖数据驱动,每个表有很多表和列。

另一个问题是,如何处理可为空的属性,我可以创建一个接受一些输入 object 的突变,但最终我的实体将被覆盖,并且调用端未提供的所有可为空的属性将设置为 null。 有没有办法部分处理这个更新,或者我应该 go 对我想要更新的每个属性进行特定的更新突变?

我认为您错误地理解了围绕特定突变的最佳实践。 它不是“有一个突变来更新一个字段”,而是更多的是“有特定的突变来封装你的域中的动作”。 一个具体的例子是创建一个“addItemToBasket”突变,而不是有 3 个突变来更新与您的购物篮等相关的各个表。

GraphQL 非常以前端开发为中心,因此您的突变通常应该与用户可以在您的前端执行的操作非常相似。 例如,您的前端有一个“添加到购物篮”按钮,而您的后端有一个“addItemToBasket”突变,类似于将物品放入用户购物篮的动作。

如果您在设计突变时考虑到这一点,那么大多数时候您不应该遇到部分更新的问题,因为突变确切地知道要做什么,而且您不只是让架构的用户随意更新字段。

如果出于某种原因您需要进行这些部分更新,除非您的数据提供商支持,否则您可能无法自行实施修补程序。 这意味着您将必须有一个输入 object 类型,该类型具有可为空的属性,并且您的突变决定哪些字段已更改并使用您的数据提供程序更改它们。

话虽如此,Hot Chocolate 存储库中还有一个修补类型的建议,应该简化修补部分: https://github.com/ChilliCream/hotchocolate/issues/1326

例如 updateUsername(), updateAddress(), updateCity() 他们都应该有特定的突变。

问题在于,如果我决定朝这个方向发展 go,我的代码库将大幅增长,因为我们非常依赖数据驱动,每个表有很多表和列。

正确的。 对于或多或少的大数据驱动的应用程序,这实际上是不可能遵循的。 考虑我们如何在API中实现补丁。 还可以考虑关注 HotChocolate github 线程中有关修补功能的讨论 希望,这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM