【问题标题】:How does graphql minimize round trips when compared to REST?与 REST 相比,graphql 如何最大限度地减少往返行程?
【发布时间】:2021-11-26 20:24:16
【问题描述】:

我无法了解 GraphQL 如何最大限度地减少从多个端点获取数据的调用次数。 例如,我们有 2 个端点:

  1. 通过帖子 ID 提供帖子信息,包括帖子作者 ID

socialmedia.com/posts/:postid

  1. 另一个按用户 ID 提供帖子作者信息的方法

socialmedia.com/authors/:authorid

我的用例是我首先从帖子详细信息中获取作者 ID,然后根据作者 ID 获取作者详细信息。 如果我是一个休息客户,我会拨打 2 个电话 2 个这些端点。

在使用 graphql 时如何将这种情况最小化?

【问题讨论】:

  • 通过拥有一个端点,通常是/graphql,您可以向其发出一个请求,根据您的需要返回帖子作者数据。

标签: graphql


【解决方案1】:

这实际上取决于您如何设置 GraphQL 架构。但是让我们假设您的架构中有两种类型:

type Author {
 id: ID!
 name: String
 posts: [Post!]
}

type Post {
  id: ID!
  body: String
  author: Author!
}

所以一个作者有很多帖子,而一个帖子只有一个作者。作为示例,我们还假设您有一个顶级查询,可以让您检索所有帖子:

query Query {
 allPosts: [Post!]
}

现在,假设您要加载所有帖子以及作者姓名。您的查询可能如下所示:

query AllPostsWithAuthors {
  allPosts {
    id
    body
    author {
      id
      name
    }
  }
}

服务器应在一次往返中解析该查询并准确提供您请求的信息。 但同样 - 这取决于您如何设置架构。 GraphQL 本身只是一个规范,在这方面它是一个相当轻松的规范。我看到很多人(包括我自己)都在为“范式转变”而苦苦挣扎,以图而不是资源和端点来思考,他们最终以 REST 式的心态设计 API,包裹在 GraphQL 中,以及结果不好。我强烈推荐这篇文章:https://graphqlme.com/2017/11/11/build-better-graphql-apis-thinking-in-graphs/

【讨论】:

  • 谢谢。我应该更好地表达我的问题。我的理解是 graphQL 服务器必须在将结果返回给调用者之前在内部对端点进行 2 次调用。我说的对吗?
  • 哦,所以您使用 GraphQL 作为 REST API 的代理?如果是这样,那么是的 - GraphQL 服务器将不得不吸收这种打击。但是你的客户端只需要对 GraphQL 服务器进行一次调用,所以它仍然是一个胜利。你可以用一些智能缓存来实现你的 GraphQL 服务器。例如,如果您已经在缓存中拥有Author,那么您可以避免前往socialmedia.com/authors/:authorid 端点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2016-01-22
  • 2011-07-23
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多