首页 > 解决方案 > 如何将 GraphQL 用于企业应用程序

问题描述

在我的问题之前做一个简短的介绍:

我目前正处于开发企业应用程序的计划阶段,其中有许多服务,每个服务都有大量的业务逻辑。

我最近被介绍并要求加入 GraphQL

问题:

如果 GraphQL 直接从数据库中获取数据并呈现出来,如何实现 GraphQL 来处理中间件任务、后端验证等业务逻辑、复杂的业务检查、批处理等?如果不是,那么它只是数据库查询之上的声明性库吗?

标签: nosqlgraphqlenterprise

解决方案


如果 GraphQL 直接从数据库中获取数据并呈现出来,如何实现 GraphQL 来处理中间件任务、后端验证等业务逻辑、复杂的业务检查、批处理等?

GraphQL 不直接从数据库中获取数据。GraphQL 实现通过与任何其他端点没有什么不同的端点公开,这意味着您可以使用任何您想要的中间件、身份验证堆栈、验证等。它也与数据库无关。同样,您可以使用任何您想要的数据库、ORM 等组合。

如果不是,那么它只是数据库查询之上的声明性库吗?

不完全的。GraphQL 实现有两个主要部分——模式和解析器。架构简单地定义了数据的形状,解析器完成了繁重的工作。解析器是定义如何为模式中定义的每个字段获取和转换数据的逻辑层。更多关于解析器的信息如下。

它与使用 NoSQL 数据库有何不同?

GraphQL 的主要卖点是让消费者准确定义他们需要的数据。对于平面(即非嵌套)数据,这可能没什么大不了的。但是,当您开始处理更多嵌套的数据时,它会变得越来越有利。例如,假设您有一个 GraphQL 查询,如下所示:

query {
  user(userId: "some_user_id") {
    ...userData
    projects {
      ...projectData
      assets {
        ...assetData
      }
    }
  }
}

我们正在获取用户、该用户的项目以及每个项目的资产,我们可以准确地指定每个级别需要哪些字段。一个用户可能有 15 个字段,但也许我们只想要其中的两个或三个。项目和资产也可能如此。由于 GraphQL 解析器很智能,我们不必担心在任何给定查询中实际请求了哪些字段。仅返回作为查询一部分请求的字段。如果一个字段是通过异步函数解析的,那么只有在请求该字段时才会执行该函数。

最后,客户端会返回与查询形状匹配的 JSON,但是(我希望)我们永远不会将这样的嵌套数据存储在 NoSQL 数据库中。还有一些工具,如dataloader,可以更轻松地通过批处理和缓存来优化查询。

GraphQL 倾向于依赖前端直接与数据通信的此类应用程序。

正如你可以从上面收集到的那样,情况并非如此。


推荐阅读