GraphQL如何比REST更好?

时间:2018-02-18 11:13:15

标签: rest web-services graphql axios

冒着有人恨我并低估这个问题的风险,我想确保理解GraphQL的工作原理。以下是我对GraphQL优于RESTful API的一种方式的理解。假设您有user型号:

{
  user: {
    firstName: "John",
    lasName: "Smith",
    username: "jsmith",
    email: "jsmith@company.com",
    gender: "M",
    password: "password"
  }
}

然后,您为应用的个人资料页面的get此用户信息进行API调用。我们假设您只想要用户firstName(可能会显示欢迎信息)。

axios.get(get_user_info_url).then(res => {
  const firstName = res.data.user.firstName
})

所以,这里发生的事情是来自服务器的res包含该用户信息的全部,其中包含我们不知道的数据。关心(例如他的usernameemail)。这意味着服务器正在下载该用户数据的所有,并将其发送回客户端。但是,客户端只关心firstName,并且基本上忽略了其他一切。因此,如果user模型上有数十(或数百)个属性,我们就会过度收集,因为我们正在下载我们根本不需要的数据。

在这个例子中,要获得他的名字,我们必须设置res.data.user.firstName。但是,使用GraphQL,服务器只返回 用户的firstName,而不是其他信息。因此,使用GraphQL,我们不会从服务器下载整个用户模型(过度获取)。  相反,我们只下载我们需要的数据(例如他的firstName)。如果用户有几十个属性,这将是有益的,因为我们只会获取/下载我们实际需要的数据。

对GraphQL的理解是否正确?

1 个答案:

答案 0 :(得分:0)

我相信GraphQL更适用于您需要的数据比一个字段多得多的情况。它有助于避免字段和属性的“过度提取”。与REST相比,它向服务器发出的请求更少,从而使您有机会获取它,从而减少了延迟。两个通信接口都具有t heir drawbacks,但作为任何工具,它们都和拥有它们的接口一样好:)