HATEOAS 与 GraphQL 为微服务设置的决策标准?
HATEOAS vs GraphQL decision criteria set for microservices?
我最近与某人交谈,他说他们正在完全跳过 HATEOAS REST 端点的开发,转而支持 GraphQL。所以我很好奇决定何时使用 GraphQL 与 HATEOAS 的标准集是什么,或者 GraphQL 只是 API 网关/边缘服务器架构的更好选择?
各自的优缺点是:
GraphQL
亲:
- 提供对返回数据的精细控制以避免不必要的流量
- 消除了为了附加/"follow-on"数据而一遍又一遍地回到井中的需要
- 根据上述内容,它允许软件设计人员通过减少延迟来提供出色的性能 - 每个查询指定它需要的所有东西,并且 GraphQL 实现可以 assemble 并且只用一个客户端交付它< ->服务器事务
- 可能会缓慢弃用而不是版本化 APIs
- 这是一种查询语言
- 内省是内置的
缺点:
- 不处理缓存(尽管现在有库会处理这个问题)
HATEOAS/休息
亲:
- 缓存是一个很好理解的事情
- 相对成熟且易于理解
- 很多基础设施,例如 CDN 来分散负载
- 非常适合微服务
- 可以上传文件
缺点:
- "back to the well" 问题
- 没有严格规定
- 服务器和客户端的每个实现都必须做出自己的决定
- 查询不规范
结论
一个有趣的比较是,人们使用 GraphQL 作为 REST API 的前端,但头脑正常的人不会考虑做相反的事情。如果你选择联合/微服务设计,那么一个 GraphQL 服务器为其他人提供前端,他们可以在前端和微服务之间使用 API 的通用规范;如果微服务是 REST,这就不太可能了。
我认为只要您想到要问的正确问题,GraphQL 就会成为设计良好的系统的重要组成部分。是否完全跳过 HATEOAS 很遗憾,"it depends".
来源
我自己的经历,加上 Phil Sturgeon 的经历 GraphQL vs REST: Overview
我喜欢 Ed 在我的概述中发表了 link,但我认为还有另一篇文章比那篇文章更相关。
两者对状态的表示完全不同
https://blog.apisyouwonthate.com/representing-state-in-rest-and-graphql-9194b291d127
GraphQL 完全无法以有意义和标准化的方式提供一系列 "next steps",除了可能会推送包含您应该尝试命中的潜在相关突变的字符串数组。
即使你这样做了,它也肯定不能帮助你与其他 HTTP API 进行通信,这真是一种耻辱。
反正就是那篇文章! :)
我最近与某人交谈,他说他们正在完全跳过 HATEOAS REST 端点的开发,转而支持 GraphQL。所以我很好奇决定何时使用 GraphQL 与 HATEOAS 的标准集是什么,或者 GraphQL 只是 API 网关/边缘服务器架构的更好选择?
各自的优缺点是:
GraphQL
亲:
- 提供对返回数据的精细控制以避免不必要的流量
- 消除了为了附加/"follow-on"数据而一遍又一遍地回到井中的需要
- 根据上述内容,它允许软件设计人员通过减少延迟来提供出色的性能 - 每个查询指定它需要的所有东西,并且 GraphQL 实现可以 assemble 并且只用一个客户端交付它< ->服务器事务
- 可能会缓慢弃用而不是版本化 APIs
- 这是一种查询语言
- 内省是内置的
缺点:
- 不处理缓存(尽管现在有库会处理这个问题)
HATEOAS/休息
亲:
- 缓存是一个很好理解的事情
- 相对成熟且易于理解
- 很多基础设施,例如 CDN 来分散负载
- 非常适合微服务
- 可以上传文件
缺点:
- "back to the well" 问题
- 没有严格规定
- 服务器和客户端的每个实现都必须做出自己的决定
- 查询不规范
结论
一个有趣的比较是,人们使用 GraphQL 作为 REST API 的前端,但头脑正常的人不会考虑做相反的事情。如果你选择联合/微服务设计,那么一个 GraphQL 服务器为其他人提供前端,他们可以在前端和微服务之间使用 API 的通用规范;如果微服务是 REST,这就不太可能了。
我认为只要您想到要问的正确问题,GraphQL 就会成为设计良好的系统的重要组成部分。是否完全跳过 HATEOAS 很遗憾,"it depends".
来源
我自己的经历,加上 Phil Sturgeon 的经历 GraphQL vs REST: Overview
我喜欢 Ed 在我的概述中发表了 link,但我认为还有另一篇文章比那篇文章更相关。
两者对状态的表示完全不同
https://blog.apisyouwonthate.com/representing-state-in-rest-and-graphql-9194b291d127
GraphQL 完全无法以有意义和标准化的方式提供一系列 "next steps",除了可能会推送包含您应该尝试命中的潜在相关突变的字符串数组。
即使你这样做了,它也肯定不能帮助你与其他 HTTP API 进行通信,这真是一种耻辱。
反正就是那篇文章! :)