ZenStack:简化全栈开发的强大工具
项目介绍
ZenStack 是一个专为 Node.js 和 TypeScript 开发者设计的工具包,旨在简化 Web 应用后端的开发流程。它通过增强 Prisma ORM 的功能,提供了一个灵活的授权层和自动生成的类型安全 API/Hooks,从而释放 Prisma 在全栈开发中的全部潜力。ZenStack 的目标是帮助开发者节省编写样板代码的时间,专注于构建真正的功能。
项目技术分析
ZenStack 通过四个主要层次来增强 Prisma 的功能:
1. ZModel - 扩展的 Prisma 模式语言
ZenStack 引入了一种名为 "ZModel" 的数据建模语言,它是 Prisma 模式语言的超集。ZModel 扩展了 Prisma 模式,增加了自定义属性和函数,并基于此实现了灵活的访问控制层。
// base.zmodel
abstract model Base {
id String @id
author User @relation(fields: [authorId], references: [id])
authorId String
// 🔐 允许作者进行所有 CRUD 操作
@@allow('all', author == auth())
}
// schema.zmodel
import "base"
model Post extends Base {
title String
published Boolean @default(false)
// 🔐 允许已登录用户读取已发布的帖子
@@allow('read', auth() != null && published)
}
ZenStack CLI 将 ZModel 转换为标准的 Prisma 模式,开发者可以继续使用常规的 Prisma 工作流程。
2. 运行时增强的 Prisma 客户端
在运行时,ZenStack 通过透明代理在 Prisma 客户端周围创建拦截器,以强制执行访问策略。
import { enhance } from '@zenstackhq/runtime';
// 常规的 Prisma 客户端
const prisma = new PrismaClient();
async function getPosts(userId: string) {
// 创建一个启用了访问控制的增强型 Prisma 客户端
const enhanced = enhance(prisma, { user: userId });
// 仅返回用户可见的帖子
return enhanced.post.findMany();
}
3. 通过服务器适配器自动生成 RESTful API
ZenStack 提供了服务器适配器包,帮助开发者将启用了访问控制的 Prisma 客户端封装为后端 CRUD API,这些 API 可以安全地从前端调用。以下是 Next.js 的示例:
// pages/api/model/[...path].ts
import { requestHandler } from '@zenstackhq/next';
import { enhance } from '@zenstackhq/runtime';
import { getSessionUser } from '@lib/auth';
import { prisma } from '@lib/db';
// 挂载 Prisma 风格的 API:"/api/model/post/findMany", "/api/model/post/create" 等
// 可以配置为提供标准的 RESTful API(使用 JSON:API)
export default requestHandler({
getPrisma: (req, res) => enhance(prisma, { user: getSessionUser(req, res) }),
});
4. 生成的客户端库(Hooks)用于数据访问
ZenStack 插件可以生成强类型的客户端库,用于与上述 API 进行通信。以下是 React 的示例:
// components/MyPosts.tsx
import { useFindManyPost } from '@lib/hooks';
const MyPosts = () => {
// 列出当前用户可见的所有帖子及其作者
const { data: posts } = useFindManyPost({
include: { author: true },
orderBy: { createdAt: 'desc' },
});
return (
<ul>
{posts?.map((post) => (
<li key={post.id}>
{post.title} by {post.author.name}
</li>
))}
</ul>
);
};
项目及技术应用场景
ZenStack 适用于需要快速开发全栈应用的场景,特别是那些需要强大数据访问控制和类型安全保障的项目。无论是构建多租户应用、博客平台,还是复杂的权限管理系统,ZenStack 都能帮助开发者轻松应对。
项目特点
- 访问控制与数据验证:直接在 Prisma 模式中定义访问控制和数据验证规则。
- 自动生成 API:自动生成 OpenAPI 规范、服务和客户端库。
- 端到端类型安全:确保从数据库到前端的数据访问都是类型安全的。
- 可扩展性:支持自定义属性、函数和插件系统。
- 框架无关的核心:提供框架特定的适配器,支持多种前端和后端框架。
- 高性能:不妥协的性能表现,确保应用的响应速度。
总结
ZenStack 是一个强大的工具,它通过增强 Prisma ORM 的功能,为全栈开发者提供了极大的便利。无论是简化开发流程,还是提升应用的安全性和性能,ZenStack 都是一个值得尝试的选择。如果你正在寻找一个能够帮助你快速构建全栈应用的工具,ZenStack 绝对值得一试!
了解更多: