keel

Prisma · Zod · NestJS · Next.js

改一处字段定义,编译器替你找出剩下的

keel 把数据库、接口契约、管理后台、官网串成一条类型链路。字段改了但某处忘了跟上,是构建失败,不是上线之后才发现的线上问题。

  1. 01schema.prisma数据库定义字段
    model Post {  publishedAt DateTime?}
  2. 02packages/sharedZod 生成契约
    publicPostSchema = z.object({  publishedAt: z.coerce.date(),})
  3. 03apps/web + apps/admin两端共用同一个类型
    const post: PublicPost = ...  post.publishedAt  // ^ 改上面任一层,这里编译报错

几个不肯让步的做法

两套命名空间

/api/admin/* 要登录,响应统一包一层 data;/api/public/* 匿名可读,结果直接返回。可见性规则只在 service 里定义一次,加接口不用重新想一遍。

字段白名单

公开接口的字段是挑出来的,不是从完整实体里删掉几个。数据库加一列,默认不会漏出去 —— 最坏的情况是官网少显示一个字段,而不是把草稿泄露给访客。

权限用例成对写

测「编辑删不了」的同时必须测「管理员删得了」。只写被拒的那一半,删除功能整个坏掉时用例照样全绿。

最近写的

全部文章 →