为什么在后端环境中使用 Prisma?

Why use Prisma in a backend environment?

在学习了 GraphQL 并在几个项目中使用它之后,我终于想尝试一下 Prisma。它承诺消除对数据库的需求,并从 GraphQL Schema 生成一个 GraphQL 客户端和一个工作数据库。到目前为止一切顺利。

但我的问题是:GraphQL 客户端对我来说真的只对客户端有用(防止过度获取、加速页面、React 集成,...)。然而,Prisma 并没有消除对业务逻辑的需求,因此人们最终会使用 Node.js 中生成的客户端库,只是将另一个 GraphQL 服务器中的许多功能重新导出到实际客户端。

为什么我更喜欢 Prisma 而不是自定义数据库解决方案?是否有必要将大量端点重新暴露给实际客户端的想法?

我刚开始学习graphql的时候也有过类似的疑问。这是我使用后的感悟。

  • Prisma 充当您数据库的代理,为您提供现成的 使用 GraphQL API 来过滤和排序数据 一些自定义类型,例如 DateTime,它们不是 graphql 的一部分,并且 你必须自己实施。它不是 GraphQL 服务器。只是一个 数据库和后端服务器之间的层,如 ORM。

  • 它涵盖了几乎所有可能的用例 在模式中预定义了所有 CRUD 操作的数据模型 连同 订阅,因此您不必做所有这些事情 并更多地关注事物的业务逻辑方面。

  • 此外,它还消除了您为以下内容编写不同查询的依赖性 不同的数据库,如 Sql 或 MongoDb 作为一个层 将其查询语言转换为实际的数据库查询。

  • 您可以使用 API(graphql) 服务器仅公开所需的模式 给客户而不是一切。由于 graphql 查询可以得到 高度嵌套,实现它可能是困难和棘手的 也可能导致性能问题,这在 Prisma 中并非如此,因为它会自行处理所有事情。

您可以查看此 article 了解更多信息。

我在 Prisma 工作,很想澄清一下!

预先快速说明:Prisma 不是 "GraphQL-as-a-Service" 工具(与 Graphcool、AppSync 或 Hasura 不同)。 Prisma 客户端不是 "GraphQL client",它是 数据库客户端 (类似于 ORM)。因此,不在前端使用 Prisma 客户端的原因与不使用 ORM 或不直接从前端连接到数据库的原因相同。

It promises to eliminate the need for a database and it generates a GraphQL client and a working database from the GraphQL Schema. So far so good.

我真的很想知道你到底是从哪里得到这种看法的!我们很清楚,我们需要改进关于 Prisma 提供的价值及其运作方式的沟通。你所表述的是关于 Prisma 的一个极其普遍的误解,我们希望在未来避免这种误解。我们实际上计划在下周发布关于这个确切主题的博客 post,希望这会澄清很多。

拾取具体点:

  • Prisma 并没有消除对数据库的需求。与 ORM 类似,Prisma 客户端用于简化数据库访问。它还通过声明性数据建模和迁移方法使数据库迁移更容易(我们实际上目前正在对我们的迁移系统进行重大改进,您可以找到它的 RFC here)。
  • Prisma 的另一个主要优势是即将推出的数据管理工具 Prisma Admin。下周将提供第一个预览版。