2018年9月11日

Prisma Client(预览版):简化且类型安全的数据库访问

Prisma client 是一个自动生成的库,可以用作 Prisma bindings 的替代品,用于在您的应用程序中访问数据。它支持 JavaScript、TypeScript、Flow 和 Go。

Prisma Client (Preview): Simplified & Type-safe Database Access

⚠️ 本文已过时,因为它涉及现已弃用Prisma 1。要了解最新版本的 Prisma,请阅读文档。⚠️

Prisma client:Prisma bindings 的下一代演进

Prisma 将您的数据库转换为 GraphQL API。这个 GraphQL API 通常不是由前端应用程序直接使用的,而是用作一种数据库抽象层,以简化应用程序服务器中的数据访问(类似于 ORM)。

在使用 Prisma 实现 GraphQL 服务器时,您的 GraphQL 服务器的解析器使用 Prisma bindingsschema delegation 连接到 Prisma API。

Schema delegation 是一种高级的实现解析器的方法,它通过将传入请求(使用 info 对象)转发到另一个 GraphQL API。

虽然 schema delegation 是一个强大且优雅的概念,但它最适合高级用例。为了使 Prisma 更加灵活和易于使用,我们正在引入一种在您的应用程序中消费 Prisma API 的新方式:Prisma client


Evolution of Prisma bindings


更多用例:构建 GraphQL 服务器、REST API 等

新的 Prisma client 与 Prisma bindings 的用途相似,但有三个主要区别

  • 虽然 Prisma bindings 专为 GraphQL 服务器设计,但 Prisma client 更灵活,可用于更多用例,例如 REST API、CLI、脚本编写等。
  • Prisma client 是 Prisma 工具链的组成部分:它在 prisma.yml 中配置,并通过 Prisma CLI 生成
  • Prisma client 支持多种语言。今天的预览版本提供了对 JavaScript、TypeScript、Flow 和 Go 的支持!

我还能在 GraphQL 服务器中使用 Prisma bindings 吗?

Prisma bindings 仍然是实现 GraphQL 解析器的一种强大方法,它通过委托给底层的 Prisma API 来实现。如果 Prisma bindings 非常适合您当前的用例,则无需更改您的实现以使用新的 Prisma client。


生成 Prisma client

Prisma client 是一个连接到您的 Prisma API 的库。它是根据您的 Prisma datamodel 自动生成的,因此了解所有 API 操作和数据结构。

要生成 Prisma client,您需要做两件事

  1. 在您的 prisma.yml 中指定新的 generate 属性,例如
  1. 在 Prisma CLI 中运行新的 prisma generate 命令。它从 prisma.yml 和您的 datamodel 中读取信息以生成 Prisma client。请注意,这仅适用于 Prisma 1.17-beta 或更高版本。

上面的代码演示了如何在 TypeScript 中生成 client;对于 JavaScript、Flow 和 Go,您可以为 generator 使用以下值:javascript-clientflow-clientgo-client

使用 Prisma client API

Prisma client API 是根据您的 datamodel 生成的,并为每个模型公开了 CRUD 操作。

所有以下代码示例都基于下面的 datamodel

您可以在此处查看新的 Prisma client API 的完整文档。

导入 Prisma client 实例

生成后,您可以将 Prisma client 实例导入到您的代码中

读取数据

虽然 Prisma bindings 通过 query 字段暴露所有查询,但查询可以直接在生成的 Prisma client 上调用

这会返回返回的 User 对象的全部标量字段。可以使用方法链(也称为fluent API)优雅地查询关联。

请注意,上面的代码片段仍然只向 Prisma API 发起一个请求,然后由 Prisma 强大的查询引擎针对数据库解析该请求。

使用新的 Prisma client API,仍然可以使用 GraphQL 查询嵌套数据或将 schema delegation 用于高级用例。

请参阅文档中的更多示例。

写入数据

就像查询一样,mutation 也通过 Prisma client 在顶层暴露

您还可以在一个 transaction 中执行多个写入操作

请参阅文档中的更多示例。

无样板代码:通过代码生成实现类型安全

Prisma client 的一个核心优势是类型安全。类型安全有助于提高生产力、更好的可维护性、更简单的重构,并带来出色的开发者体验。

类型安全的数据访问需要大量手动工作,编写样板代码和冗余类型定义。Prisma client 利用代码生成来为数据模型和查询提供自定义类型。


尝试 Prisma client

要了解有关 Prisma client 的更多信息,请查看新的示例仓库或按照“入门”教程进行操作。请在Slack 上告诉我们您的想法 🙌



入门

不要错过下一篇文章!

订阅 Prisma 时事通讯