根据设计和实现 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 查询(不是数据库模式!)