ZenStack:简化全栈开发的强大工具

ZenStack:简化全栈开发的强大工具

zenstack Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema, closer to the database zenstack 项目地址: https://gitcode.com/gh_mirrors/ze/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 绝对值得一试!

了解更多

zenstack Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema, closer to the database zenstack 项目地址: https://gitcode.com/gh_mirrors/ze/zenstack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廉艳含

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值