GraphQL 是 ORM 吗?

Posted

技术标签:

【中文标题】GraphQL 是 ORM 吗?【英文标题】:Is GraphQL an ORM? 【发布时间】:2018-02-27 00:47:59 【问题描述】:

好像是这样。归根结底,它需要查询数据库以获取信息。你需要给它一个模式(就像一个 ORM)。据我了解,在前端您传递您想要的细节,而后端的 GraphQL 将为您提供只是您请求的信息。

我看到的与 Sequelize 或 ActiveRecord 等传统 ORM 的唯一区别是 GraphQL 将只为您提供您想要的,使其非常有吸引力和灵活。我怀疑尽管幕后发生的任何事情都可能会给您留下一些低效的查询(ORM 很常见)。那么 GraphQL 是否只是一个 ORM,可以让您在请求和接收的内容方面提供 100% 的灵活性?

【问题讨论】:

【参考方案1】:

GraphQL 不是 ORM,因为它不理解 DB 的概念。它只是从“数据源”(可能是静态的、从文件等)获取数据。一旦将源指向它,它也无法弄清楚如何获取数据。您必须编写解析器函数来告诉数据库如何找到每个字段的值。

一些 gems/packages 将简化其中的一些。其中一些可能是或可能成为 ORM,但 GraphQL 本身完全与平台/数据源无关。

【讨论】:

【参考方案2】:

不,不是。仅使用 GraphQL,我们无法轻松访问数据库,因为发送查询所需的语言不是由 ORM 映射的。

ORM 使访问数据库变得容易,这在某种意义上更像是创建一个我们的编程语言可以轻松访问的虚拟数据库。然后 GraphQL 将其查询发送到该虚拟数据库。

【讨论】:

【参考方案3】:

我向您推荐 Prisma。 Prisma 是一个高性能的开源 GraphQL ORM-like 层,在您的 GraphQL 服务器中完成繁重的工作。它将您的数据库转换为 GraphQL API,您的解析器可以通过 GraphQL 绑定使用该 API。

【讨论】:

以上是关于GraphQL 是 ORM 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我真的需要用于 graphql 的 prisma ORM 吗?

graphql服务器端验证

从 graphQL 模式自动创建 ORM 模式和查询

mikro-orm 使用 type-graphql 缓存数据

GraphQL,Dataloader,[ORM or not],有很多关系理解

无法为 mikro orm graphql 中的不可空字段返回 null