我正在开发一个个人项目(在服务器端非常简单)并计划使用 GraphQL(第一次)。我有点理解 GraphQL 不是 ORM,因此 GraphQL 模式与数据库模式不同。但对于我这个简单的项目来说,服务器端的整体功能只是基本的 CRUD,而且目前可能只有一张表。对于这种情况,我真的不想重复 GraphQL 和一些 ORM 中的模式定义。这两种模式可以统一吗?我应该如何实现这一目标?
PS 我计划使用 NodeJS 进行服务器端开发。
根据设计和实现 GraphQL 服务的个人经验,我建议您以不同的方式思考模式。原因如下:
您的数据库架构定义了数据库有效存储数据、结构关系和查询信息所需的严格参数,特定于您所使用的数据库类型。您的数据库架构在您的应用程序如何合理管理持久数据方面发挥着重要作用。
另一方面,您的 GraphQL 模式描述了您可以从服务器获取的数据的形状/类型/结构,以及您可以用它做什么——这可能是来自您的数据库、外部 API、其他服务的数据您的服务器通信的等等。
更重要的是,您的 GraphQL 架构描述了普通人希望如何与您的服务器交互,而无需了解服务器如何/何处/为何获取数据的内部细节。
您的 GraphQL 模式不应该与数据库模式统一,因为它 1)不是数据库,2)不代表数据库的内部结构——它代表来自服务器的任何数据,与数据的位置无关起源。
即使您正在使用单个表构建一个简单的 CRUD 应用程序并且没有“外部”数据,单独考虑 DB 和 GraphQL 模式仍然有价值。
首先,考虑一下理想的 GraphQL API 是什么样子的。毕竟,它代表了您向最终用户公开的功能和数据。该数据是什么?该数据是什么样的?我需要定义哪些 GraphQL 类型、查询、突变、订阅等才能实现这一点?
现在您已经使用 API 架构定义了理想情况下如何与服务器交互,接下来设计数据库架构来表示您想要创建、读取、更新和删除的数据。
您可能会发现您的 GraphQL 和 DB 模式最终以类似的方式定义相同的数据,尤其是对于非常简单的应用程序 - 但很可能,如果您以“graphql 模式优先”的心态进行设计,您可能会很高兴忘记这一点当您的应用程序扩展时,您会引入更多的关系数据,您的模式会变得更加复杂,或者以上所有情况:)
然而...您可能想看看这个很棒的库,它目前仍处于早期开发阶段,https://github.com/danielrearden/sqlmancer,它允许您将 GraphQL 语句转换为 SQL 查询(而不是数据库)架构!)
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |