【问题标题】:Can GraphQL schema be used as database schema definition?GraphQL 模式可以用作数据库模式定义吗?
【发布时间】:2021-03-10 01:10:44
【问题描述】:

我正在处理一个个人项目(在服务器端非常简单)并计划使用 GraphQL(第一次)。我有点理解 GraphQL 不是 ORM,因此 GraphQL 模式与数据库模式不同。但对于我的简单项目,服务器端的整体功能只是基本的 CRUD,目前可能只有一张表。对于这种场景,我真的不想在 GraphQL 和一些 ORM 中重复架构定义。这两种模式可以统一吗?我应该如何做到这一点?

附:我打算使用 NodeJS 进行服务器端开发。

【问题讨论】:

  • "graphql 架构优先"

标签: database graphql


【解决方案1】:

根据设计和实现 GraphQL 服务的个人经验,我想建议您对模式的看法有所不同。原因如下:

您的数据库架构定义了您的数据库有效存储数据、结构关系和查询信息所需的严格参数,具体到您使用的数据库类型。您的 DB 架构在您的应用如何妥善管理持久数据方面发挥着重要作用。

另一方面,您的 GraphQL 架构描述了您可以从服务器获取的数据的形状/类型/结构,以及您可以用它做什么——这可能是来自您的数据库、外部 API 的数据,您的服务器与之通信的其他服务等。

更重要的是,您的 GraphQL 架构描述了普通人希望如何与您的服务器交互,而无需了解您的服务器如何/在何处/为何获取其数据的内部细节。

您的 GraphQL 架构不应与您的数据库架构统一,因为它 1) 不是数据库,2) 不代表您的数据库的内部结构——它代表来自您的服务器的任何数据,与该数据的来源。

即使您正在构建一个简单的 CRUD 应用程序,其中只有一个表且没有“外部”数据,但分开考虑 DB 和 GraphQL 模式仍然很有价值。

首先,想想您理想的 GraphQL API 应该是什么样子。毕竟,它代表了您向最终用户公开的功能和数据。这些数据是什么,这些数据会是什么样子?什么是 GraphQL 类型、查询、突变、订阅等。我需要定义以实现这些?

现在您已经使用 API 架构定义了理想情况下希望如何与服务器交互,设计数据库架构来表示您想要创建、读取、更新和删除的数据。

您可能会发现您的 GraphQL 和 DB 架构最终会以相似的方式定义相同的数据,尤其是对于非常简单的应用程序 - 但很有可能,如果您以“graphql 架构优先”的心态进行设计,您可能会很乐意忘记你的应用程序扩展的那一刻,你引入了更多的关系数据,你的架构变得更加复杂,或者以上所有:)

但是...您可能想看看这个目前仍处于早期开发阶段的出色库 https://github.com/danielrearden/sqlmancer,它允许您将 GraphQL 语句转换为 SQL 查询(不是数据库模式!)

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2022-08-15
    • 2019-05-20
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多