【问题标题】:Is GraphQL stateless?GraphQL 是无状态的吗?
【发布时间】:2017-04-01 19:56:03
【问题描述】:

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

【问题讨论】:

    标签: rest graphql


    【解决方案1】:

    它是无国籍的吗?

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

    对我来说,这看起来像是 REST API 请求。

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

    来自graphql.org

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

    因此,您会获得许多不同的 URI,它们指向实体图的不同子集的表示,以及用于图的所有修改的单个 URI。在统一接口背后,这些“资源”都将使用单一路由实现。

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

    【讨论】:

    • 这里有几个问题:1. 很多被称为 REST 的 API 不支持 HATEOAS 或链接,人们还是将其称为 REST,以及 2. 您可以完全发送 GraphQL 查询通过带有查询参数的 GET 请求,可以照常缓存。
    • 不太相关的问题:由于它们都基于 HTTP,我仍然可以使用 Oauth 2.0 和 OpendID 连接令牌的相同实现,对吗?
    • 使用 GET 方法的要点;我发现了一个坏的/旧的副本,表明一切都在通过 POST。
    【解决方案2】:

    GraphQL 通常被称为比 REST 更高效,因为它允许客户端在一个请求中请求多个资源,从而节省了往返行程,并且还允许客户端过滤到他们实际需要的字段。因此,最终完成请求的方式似乎相似,但更强大的查询语言允许客户端准确地获取他们需要的数据。

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

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 2013-11-22
      • 2016-07-10
      • 1970-01-01
      • 2019-06-30
      • 2018-12-11
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多