2016-11-18 73 views
1

出于好奇,我开始阅读关于GraphQL的知识。根据this article上的示例,它看起来像REST API请求。它是无国籍的吗?意味着它没有请求,服务器没有响应?如果是,那么它是如何比REST API更轻的资源?GraphQL无状态吗?

回答

1

它是无状态的吗?

是的,只要服务器不需要任何客户端状态知识来正确解释请求;所有必要的信息都包含在请求本身(标题和正文)中。

它看起来像REST API请求给我。

它可能没有。它在超媒体约束上完全失败(规范缺少对链接的任何引用,这是一个很大的暗示)。 “资源”有点混乱。

graphql.org

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

因此,您得到了许多不同的URI,指向实体图的不同子集的表示,以及用于图的所有修改的单个URI。在统一界面的后面,这些“资源”将全部使用单一路线实施。

REST is an architectural style,“选择它们在候选架构上引发的属性”。看起来好像GraphQL对不同的一组属性感兴趣;也就是说他们正试图解决一个不同类型的问题。

+2

这里有几个问题:1.许多人称为REST的API不支持HATEOAS或链接,并且人们将其称为REST,2.您可以完全通过GET请求发送GraphQL查询参数,可以像往常一样缓存。 – stubailo

+0

没有这么相关的问题:既然它们都基于HTTP,我仍然可以使用相同的Oauth 2.0和OpendID连接令牌的实现吗? –

+0

使用GET方法的好处;我发现一些不好的/旧的东西,表明一切都是通过POST。 – VoiceOfUnreason

2

GraphQL通常被认为比REST更有效率,因为它允许客户端在一个请求中请求多个资源,这样可以节省往返时间,并且还允许客户端只过滤他们实际需要的字段。因此,在一天结束时,请求完成的方式看起来很相似,但更强大的查询语言允许客户端准确获取所需的数据,而不再需要更多。

是的,它就像REST一样是无状态的。实际上有些人可能会说GraphQL满足REST描述的许多原始要求。