Prisma 介绍:What,Why,How
Prisma 是什么?
Prisma 是在你的应用架构中用来替代传统 ORM 框架的数据层框架(data layer)。
该 data layer
由以下几个组件组成:
- 扮演数据库代理角色的 Prisma server;
- 运行在 Prisma server 上的高性能的查询引擎(query engine),用于生成真实的数据库查询请求;
- 连接到 Prisma server 的客户端 Prisma client;
- 实时的事件系统,让你可以订阅相关的数据库事件。
简单的讲,Prisma 是一个数据库抽象层,可以将数据库转换为带有 CRUD 操作和实时功能的 GraphQL API。它是数据库和 GraphQL 服务器之间的粘合剂。
适用场景
在你处理各类数据库操作的场景中,在任何上下文里,Prisma 都是一个非常有用的工具。
🍊 创建 GraphQL 服务器
Prisma 是创建 GraphQL 服务器的完美工具。Prisma client 能够很好的兼容 Apollo 框架生态,拥有默认的对 GraphQL subscriptions 的支持,以及 Relay 风格的分页支持,同时提供端对端类型安全的以及内置的 dataloader 来解决 N+1 问题。
🍊 创建 REST APIs
Prisma 非常适合用来创建 REST APIs,主要用于取代传统的 ORM 框架。它拥有类型安全、先进 API 以及自由读写关系型数据等诸多优点。
🍊 CLIs 命令行, Scripts 脚本,Serverless Functions 及其它
Prisma 拥有极其自由的 API,让其非常适合处理各类使用场景。当你需要同一个或多个数据库进行会话时,Prisma 将会在数据库 workflows 简化方面提供巨大的帮助。
为什么用 Prisma?
🥑 简单的数据库工作流 (database workflows)
Prisma 的最终目标 是去除你的应用中的复杂的通用数据库工作流同时简化数据库访问。
- 类型安全的数据库访问,得益于已配置的自动生成的 Prisma client;
- 处理关系型数据以及事务的简单而强大的 API;
- Prisma 同时对多个数据库的统一的访问,因此大大降低了跨数据库工作流程的复杂性;
- 数据库实时数据流以及事件系统,能够确保你能够获取到数据库中发生的所有重要事件的更新;
- 基于使用 GraphQL schema definition language(SDL)表示的声明式数据类型 datamodel 的自动数据库迁移方案;
- 其它数据库工作流,如数据导入 / 导出等。
🥑 实时的数据库层
一些数据库,例如 RethinkDB 或者 DynamoDB 提供了开箱即用的实时 API。这样的 API 允许客户端订阅数据库中发生的任何更改。然而,绝大多数传统数据库不提供这样的实时 API,并且手动实现它非常复杂。Prisma 为每个受支持的数据库提供实时API,允许您订阅任何数据库事件,例如创建,更新或删除数据。
🥑 端到端安全性
以类型安全的方式编程是现代应用程序开发的默认设置。以下是类型安全的一些核心优势:
- 信心:由于静态分析和编译时错误检查,开发人员可以对代码充满信心。
- 开发体验:在明确定义数据类型时,开发人员开发体验更好。类型定义是 IDE 功能的基础,如智能自动补全或定义跳转。
- 代码生成:在开发工作流程中利用代码生成很容易,以避免编写样板。
- 跨系统协定:类型定义可以跨系统共享(例如,在客户端和服务器之间),并用作定义相应接口 / API 的协定。
端到端类型安全是指从客户端到数据库在整个堆栈中具有类型安全性。端到端类型安全体系结构如下所示:
- 数据库:Prisma 提供强类型数据库层,datamodel 定义了存储在数据库中的数据类型;
- 应用程序服务器:应用程序服务器定义自己的 schema(例如,使用 GraphQL 或 OpenAPI / Swagger),它可以重用或转换数据库中的数据类型。应用程序服务器需要使用类型安全的语言(例如 TypeScript,Scala,Go)编写。
- 客户端</