如何将 GraphQL 用于企业应用程序
How to use GraphQL for enterprise applications
提问前的简短介绍:
我目前正处于开发企业应用程序的规划阶段,其中有许多服务,每个服务都有大量业务逻辑。
我最近被介绍并要求加入 GraphQL
- 坦率地说,我不明白这一点。它看起来像一个包装
数据库。如果我们以声明的方式编写我们想要的数据,GraphQL
以整洁的 JSON 格式为我们提供数据。对我来说没有区别
正确的 NoSQL 查询。
- JavaScript 繁重的应用程序由于业务逻辑而不太安全
呈现给客户端浏览器,可以在其中对其进行调整以更改
行为。 GraphQL 倾向于依赖前端的此类应用程序
end 直接与数据通信。在从客户端获取所需信息后,传统的 NoSQL 查询可以从服务器 运行。
问题:
如果 GraphQL 直接从数据库中获取数据并呈现出来,我该如何实现 GraphQL 来处理中间件任务、后端验证等业务逻辑、复杂的业务检查、批处理等?
如果不是,那么它只是一个基于数据库查询的声明式库吗?
If GraphQL directly obtains the data from the database and presents
it, how can I implement GraphQL to handle middleware tasks, business
logic like back-end validations, complex business checks, batch
processes etc?
GraphQL 不直接从数据库中获取数据。 GraphQL 实现通过一个与任何其他端点没有区别的端点公开,这意味着您可以使用您想要的任何中间件、身份验证堆栈、验证等。它也是与数据库无关的。同样,你可以使用任何你想要的数据库、ORM 等的组合。
If not, then is it just a Declarative library on top of database
queries?
不完全是。 GraphQL 实现有两个主要部分——模式和解析器。模式简单地定义了数据的形状,解析器负责繁重的工作。解析器是逻辑层,它定义了如何为模式中定义的每个字段获取和转换数据。更多关于下面的解析器。
How is it different than using a NoSQL database?
GraphQL 的主要卖点是让消费者准确定义他们需要的数据。对于平面(即非嵌套)数据,这可能没什么大不了的。但是当您开始处理更多嵌套的数据时,它会变得越来越有优势。例如,假设您有一个如下所示的 GraphQL 查询:
query {
user(userId: "some_user_id") {
...userData
projects {
...projectData
assets {
...assetData
}
}
}
}
我们正在获取用户、该用户的项目以及每个项目的资产,我们可以在每个级别准确指定我们想要的字段。一个用户可能有 15 个字段,但也许我们只需要其中的两个或三个。项目和资产也是如此。由于 GraphQL 解析器是智能的,我们不必担心在任何给定查询中实际请求了哪些字段。仅返回作为查询一部分请求的字段。如果通过异步函数解析字段,则只有在请求该字段时才会执行该函数。
最后,客户端返回 JSON 匹配查询的形状,但(我希望)我们永远不会在 NoSQL 数据库中存储这样的嵌套数据。还有像 dataloader 这样的工具可以更容易地通过批处理和缓存优化查询。
GraphQL tends to rely on such applications where the front end
directly communicates with the data.
从上面可以看出,情况并非如此。
提问前的简短介绍:
我目前正处于开发企业应用程序的规划阶段,其中有许多服务,每个服务都有大量业务逻辑。
我最近被介绍并要求加入 GraphQL
- 坦率地说,我不明白这一点。它看起来像一个包装 数据库。如果我们以声明的方式编写我们想要的数据,GraphQL 以整洁的 JSON 格式为我们提供数据。对我来说没有区别 正确的 NoSQL 查询。
- JavaScript 繁重的应用程序由于业务逻辑而不太安全 呈现给客户端浏览器,可以在其中对其进行调整以更改 行为。 GraphQL 倾向于依赖前端的此类应用程序 end 直接与数据通信。在从客户端获取所需信息后,传统的 NoSQL 查询可以从服务器 运行。
问题:
如果 GraphQL 直接从数据库中获取数据并呈现出来,我该如何实现 GraphQL 来处理中间件任务、后端验证等业务逻辑、复杂的业务检查、批处理等? 如果不是,那么它只是一个基于数据库查询的声明式库吗?
If GraphQL directly obtains the data from the database and presents it, how can I implement GraphQL to handle middleware tasks, business logic like back-end validations, complex business checks, batch processes etc?
GraphQL 不直接从数据库中获取数据。 GraphQL 实现通过一个与任何其他端点没有区别的端点公开,这意味着您可以使用您想要的任何中间件、身份验证堆栈、验证等。它也是与数据库无关的。同样,你可以使用任何你想要的数据库、ORM 等的组合。
If not, then is it just a Declarative library on top of database queries?
不完全是。 GraphQL 实现有两个主要部分——模式和解析器。模式简单地定义了数据的形状,解析器负责繁重的工作。解析器是逻辑层,它定义了如何为模式中定义的每个字段获取和转换数据。更多关于下面的解析器。
How is it different than using a NoSQL database?
GraphQL 的主要卖点是让消费者准确定义他们需要的数据。对于平面(即非嵌套)数据,这可能没什么大不了的。但是当您开始处理更多嵌套的数据时,它会变得越来越有优势。例如,假设您有一个如下所示的 GraphQL 查询:
query {
user(userId: "some_user_id") {
...userData
projects {
...projectData
assets {
...assetData
}
}
}
}
我们正在获取用户、该用户的项目以及每个项目的资产,我们可以在每个级别准确指定我们想要的字段。一个用户可能有 15 个字段,但也许我们只需要其中的两个或三个。项目和资产也是如此。由于 GraphQL 解析器是智能的,我们不必担心在任何给定查询中实际请求了哪些字段。仅返回作为查询一部分请求的字段。如果通过异步函数解析字段,则只有在请求该字段时才会执行该函数。
最后,客户端返回 JSON 匹配查询的形状,但(我希望)我们永远不会在 NoSQL 数据库中存储这样的嵌套数据。还有像 dataloader 这样的工具可以更容易地通过批处理和缓存优化查询。
GraphQL tends to rely on such applications where the front end directly communicates with the data.
从上面可以看出,情况并非如此。