使用GraphQL进行微服务互通是否有意义?

阿夫纳·利维(Avner Levy)

我已经阅读了很多关于使用GraphQL作为微服务前端的API网关的信息。但是我想知道GraphQL相对于Rest的所有优势是否也与微服务之间的通信不相关。任何输入,优点/缺点和成功使用示例都将受到赞赏。

Lior酒吧

考虑r的主要注意事项

  • GraphQL不是万能的,也不是比REST“更好”的。只是不同而已。
  • 您绝对可以同时使用两者,因此两者都不是。
  • 根据特定的用途,GraphQL(或REST)的规模可以大到大。
  • GraphQL和REST并非完全替代:
    • GraphQL是一种查询语言,规范和工具集合,旨在通过HTTP在单个端点上运行,以优化性能和灵活性。
    • REST是一种架构样式/方法,用于利用其所存在协议的统一接口进行常规通信。

避免在微服务之间共同使用GraphQL的一些原因

  • 当客户端需要一个灵活的响应而无需更改服务器代码即可控制时,GraphQL尤其有用。

    • 当您授予客户端服务对进入的数据的控制权时,它可能导致公开过多的数据,从而损害正在服务的服务上的封装。这是系统可维护性和变更能力的长期风险。
  • 在微服务之间,延迟远没有客户端服务器之间的问题大,聚集功能也是如此。

  • 当您有许多服务时,统一接口确实非常有用-但是graphQL可能会适得其反。

  • QueryQL定义的灵活查询在性能优化方面可能更具挑战性。

  • 一次更新对象的层次结构(graphQL自然结构)可能会增加原子性,幂等性,错误报告等方面的复杂性。

回顾一下

  • GraphQL对于服务器到服务器的通信确实非常有用,但是很可能在很小的用例中就很合适。
  • 您在服务之间是否有API网关的用例?也许这是您应该问自己的问题。GraphQL只是一个(流行的)工具。
  • 像往常一样,最好将问题与工具匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中为线程池使用单独的微服务有意义吗?

进行这种聚合根设计是否有意义?

使用 wso2-dss 作为 msf4j 微服务的数据访问层有意义吗?

在使用代码优先的情况下,使用MetadataType强制进行验证是否有意义?

在服务上使用 Vue 3 反应性是否有意义?

使用junit测试用例进行用户注册是否有意义?

在进行同步 IO 基准测试时使用队列深度是否有意义?

是否存在使用 NOT LIKE ANY 有意义的场景?

在Spring的JdbcTemplate中使用PersistenceExceptionTranslationPostProcessor是否有意义?

缩小NodeJS中使用的代码是否有意义?

在实现toString()时使用反射是否有意义?

在Django中使用Cython。是否有意义?

在现代Linux上使用noatime是否有意义?

在同步方法中使用ReadWriteLock是否有意义?

对$ scope使用去抖是否有意义?

使用六核CPU是否有意义?

使用TaskCompletionSource的这种异步方法是否有意义?

嵌套setState是否有意义?

sizeof(function)是否有意义?

使用泛型参数来选择将注入哪个服务实现是否有意义?

为 Serverful 应用程序进行无服务器部署有意义吗?

将模块定义为“服务”,“工厂”是否有意义?

服务器推送woff2是否有意义?

在单个服务器上运行Kubernetes是否有意义?

Java:创建LinkedList并将其转换为ArrayList进行排序是否有意义?

在scikit-learn的Pipeline中包含分类器以进行交叉验证是否有意义?

在CI文件中进行gofmt项目是否有意义

仅对包含 Windows 系统文件的硬盘进行索引是否有意义?

编写伪代码进行赋值,并想再次检查它是否有意义