GraphQL和Fieldings REST约束
在his中,定义了一组应满足RESTAPI的规则 其中包括以下规则:GraphQL和Fieldings REST约束,rest,client-server,graphql,distributed-system,Rest,Client Server,Graphql,Distributed System,在his中,定义了一组应满足RESTAPI的规则 其中包括以下规则: 客户端服务器 无状态缓存接口 统一合同(超媒体或HATEOAS等) 分层系统 使用GraphQL是否可以满足这些要求 虽然points客户端-服务器、无状态和分层系统可能已经实现,但我不确定points缓存和统一契约是否已经实现。让我们看看Fieldings约束,并检查GraphQL是否满足这些约束: 客户端-服务器体系结构-是 GraphQL(主要)是一种查询语言,指定从客户端到服务器的查询 无国籍状态-是 对此进行了详
- 客户端服务器
- 无状态缓存接口
- 统一合同(超媒体或HATEOAS等)
- 分层系统
虽然points客户端-服务器、无状态和分层系统可能已经实现,但我不确定points缓存和统一契约是否已经实现。让我们看看Fieldings约束,并检查GraphQL是否满足这些约束: 客户端-服务器体系结构-是 GraphQL(主要)是一种查询语言,指定从客户端到服务器的查询 无国籍状态-是 对此进行了详细讨论。 简短的回答是肯定的,GraphQL是无状态的,因为没有会话概念,服务器不需要任何附加信息来处理请求 可缓存性-否 这个比较棘手。从技术上讲,您可以在HTTP请求级别缓存GraphQL查询(如果需要)。但是,由于客户端可以查询对象和属性的任意组合,因此此类缓存的命中率可能较低,并且缓存的信息高度冗余。因此,GraphQL开发人员建议。然而,这种方法需要全局唯一的标识符,在GraphQL规范的基础上引入了一个额外的约束,该约束与REST的“资源标识”约束相似(见下文) 另一种选择是将缓存延迟到向GraphQL服务器提供数据的其他组件,但这与GraphQL本身无关。鉴于上述情况,我认为GraphQL请求在默认情况下是不可缓存的 分层系统-是 将分层体系结构部署为一体 。。。通过约束组件行为由层次结构层组成 这样,每个组件都无法“看到”具有 它们正在相互作用 您可以设置一个GraphQL服务器,将请求转发到其他GraphQL服务器,而客户机不知道这一点。实际上,GraphQL服务器通常被用作“前端的后端”,聚合来自客户端不知道的其他服务的数据。这是一个分层系统 接口/统一合同-否 该约束通常通过四个子约束来表述:
- 资源识别-否
- 通过表示操作资源-是(?)
- 自描述性消息-否(?)
- 作为应用程序状态引擎的超媒体(HATEOS)-否
总之,GraphQL并不满足所有REST要求。这可能不是有意的。它旨在解决REST原则引起的一些问题,主要是客户端需要多个HTTP往返来获取单个对象图,从而接收到比实际使用的数据多得多的数据。让我们看看Fieldings约束,并检查GraphQL是否满足这些约束: 客户端-服务器体系结构-是 GraphQL(主要)是一种查询语言,指定从客户端到服务器的查询 无国籍状态-是 对此进行了详细讨论。 简短的回答是肯定的,GraphQL是无状态的,因为没有会话概念,服务器不需要任何附加信息来处理请求 可缓存性-否 这个比较棘手。从技术上讲,您可以在HTTP请求级别缓存GraphQL查询(如果需要)。但是,由于客户端可以查询对象和属性的任意组合,因此此类缓存的命中率可能较低,并且缓存的信息高度冗余。因此,GraphQL开发人员建议。然而,这种方法需要全局唯一的标识符,在GraphQL规范的基础上引入了一个额外的约束,该约束与REST的“资源标识”约束相似(见下文) 另一个选项是将缓存延迟到向GraphQL服务器b提供数据的其他组件