首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >满足GraphQL的所有休息要求?

满足GraphQL的所有休息要求?
EN

Stack Overflow用户
提问于 2017-07-06 13:59:25
回答 1查看 172关注 0票数 0

在他的学位论文中,野战定义了一组应该满足REST的规则。

除其他外,这包括以下规则:

  • 客户端-服务器
  • 无状态缓存接口
  • 统一合同(超媒体或Hypermedia,.)
  • 分层系统

用GraphQL可以满足这些要求吗?

虽然点客户端服务器、无状态和分层系统可能已经实现,但我不确定点缓存和统一协议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-04 03:53:15

让我们检查一下字段约束,并检查GraphQL是否实现了这些约束:

客户端-服务器架构-是的

GraphQL主要是一种查询语言,它指定从客户端到服务器的查询。

无国籍状态-是的

详细讨论了这一点,这里。简单地说,是的,GraphQL是无状态的,因为没有会话概念,而且服务器不需要任何其他信息来处理请求。

可缓存性- NO

这个更难对付。从技术上讲,您可以在HTTP级别缓存GraphQL查询(如果是使用HTTP)。但是,由于客户端可以查询对象和属性的任意组合,这种缓存的命中率可能很低,而且缓存的信息高度冗余。因此,GraphQL开发人员建议使用基于图形的缓存方法。然而,这种方法需要全局唯一标识符,在GraphQL规范的基础上引入额外的约束,这与REST的“资源标识”约束很相似(参见下文)。

另一种选择是将缓存推迟到向GraphQL服务器提供数据的其他组件,但这与GraphQL本身无关。鉴于以上所述,我认为默认情况下GraphQL请求是不可缓存的。

分层系统-是的

所述作为一个分层的体系结构.

..。通过约束组件行为,使每个组件不能“看到”与其交互的直接层之外的层次结构层。

您可以设置一个GraphQL服务器,将请求转发到其他GraphQL服务器,而客户端不知道它。在实践中,GraphQL服务器通常被用作“前端的后端”,从客户不知道的其他服务中聚合数据。这是一个分层系统。

接口/统一合同-否

这个约束通常是通过四个子约束来表述的:

  • 资源的识别- NO

如上所述,GraphQL没有提供统一的机制来识别资源。GraphQL文档指出:

HTTP通常与REST相关联,REST使用“资源”作为其核心概念。相反,GraphQL的概念模型是一个实体图。因此,GraphQL中的实体不被URL识别。

  • 通过表示操纵资源-是的(?)

让我们假设GraphQL的资源是数据对象,而传输的JSON (或其他格式)是表示(而不是将整个GraphQL端点看作一个单一资源)。然后,可以向服务器发送一个变异的JSON表示来更新对象。

  • 自描述性消息- NO(?)

在我看来,这是一个意见问题。什么时候消息是自我描述的?如果目标是通过客户机和服务器之间任意引入的中间层来“理解”,那么我认为GraphQL消息不是自我描述的。查询或突变的结构只有在服务器架构的上下文中才有意义。可以从服务器请求此架构,但这将扩展单个消息的范围。

  • 超媒体作为应用程序状态引擎- NO

这个很简单。GraphQL根本不支持链接的概念,链接是超媒体的前提和本质。这篇文章对这个主题有一些有趣的看法。

按需代码(可选)- NO

从GraphQL服务器发送到客户端的所有数据都是输入的。不打算执行任何受支持的类型。表示操作的变异请求只从客户端发送到服务器,而不是从另一个方向发送。当然,将代码作为文本发送是可能的,但这并不是GraphQL设计的目的。

总之,GraphQL并不能满足其他所有的需求。而且可能不是故意的。它旨在解决REST原则带来的一些问题,主要是客户端需要多个HTTP往返来获取单个对象图,然后接收比实际使用的更多的数据。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44951074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档