REST比GraphQL更适合的项目?

let*_*ive 11 architecture rest web-applications graphql

根据我读到的文章,GraphQL在往返方面更具资源效率,它也可以做REST所能提供的.考虑到Web应用程序只是从头开始,软件架构师和开发人员可能决定继续使用REST而不是GraphQL,这是什么原因?此外,这是一个连续的项目,将从Web和移动消费和openID连接是一个要求.

Mar*_*ock 10

这是一个相当广泛的问题,但我会尝试从我自己的经验中回答。

REST 提供对特定资源(例如用户或产品)的访问。请求的结果可能是对您想要或使用什么数据的假设,即无论您是否使用所有数据,它都可能是关于该资源的一切。

还有N+1的问题。以用户拥有和属于多个关系场景为例;使用 RESTful API,您可以向用户发出请求,例如,/users/:id然后向他们的所有关系发出请求,例如/users/:id/relationships,这已经是两个请求。可能假设关系端点包括关系(朋友、家庭成员等)和结果数组中的用户,但如果 API 没有做出该假设,你将不得不做出对每个用户端点的请求,以获取每个关系中每个用户的数据。

这个例子也可以更深入;如果您想要所有二级关系(例如朋友的朋友)怎么办?

GraphQL 通过允许您具体询问您需要的内容来解决这个问题。您可以构造一个查询以返回深度数据:

query myQuery($userId: ID!) {
  user(id: $userID) {
    id
    name
    relationships {
      id
      type
      user {
        id
        name
        relationships {
          id
          type
          user {
            id
            name
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Fragments 可以稍微清理一下,并且可能会出现递归问题,但您应该明白这一点;一个请求为您提供所需的所有嵌套数据。

如果您不太需要这种嵌套或相互连接的结果集,GraphQL 可能不会在收益和复杂性之间提供太多的权衡。

然而,我发现 GraphQL 的最大好处之一是它的可扩展性和自文档化。


Blu*_*ueM 5

我认为,除其他方面外,这也是用例的问题:

  • 如果您的应用程序或其他前端连接速度慢和/或等待时间长(典型示例:移动应用程序),则GraphQL的“往返最小化”可能是一大优势。而且,对数据结构进行客户端控制非常方便,因此通常可以减少所需的API端点数量。
  • 如果仅是服务器之间的数据交换,则RESTful API与HTTP紧密相关的事实具有优势,例如动词的语义(当您使用一个GraphQL查询执行多项操作时,GraphQL无法提供动词的语义)和状态代码。另外:您可以免费获得所有HTTP缓存功能,这在大量数据驱动的应用程序/服务中非常重要。此外,REST无处不在(尽管可能大多数宣传为“ RESTful”的API并非如此,通常是由于缺少对超媒体的支持)。