oRPC发布1.0版本,支持OpenAPI和端到端类型安全

来源: InfoQ - 架构

原文

oRPC是一款用于构建类型安全API的TypeScript库,最近正式发布了1.0版本,标志着它已经达到了稳定、可用于生产的里程碑,为寻求替代现有RPC和REST方案并希望获得完整OpenAPI集成的开发者提供了新的选择。

oRPC 1.0引入了一系列旨在简化API开发同时保持企业级类型安全的功能。此次发布包含一流的OpenAPI支持、对输入、输出和错误的端到端类型安全、对Date和File等复杂类型的原生支持,以及通过TanStack Query与ReactVueSolidSvelte等主流前端框架的无缝集成。

oRPC设计理念的核心是团队所称的“强大而简洁”(powerful simplicity)。开发者可以使用类似编写标准函数的语法定义API端点,同时自动获得生产级的功能,例如,OpenAPI规范生成、服务端行为的兼容性以及契约优先(contract-first)工作流支持。该库开箱即用地支持多种Schema校验器,包括ZodValibotArkType,无需额外的配置。

oRPC 1.0的一大亮点是其全面的OpenAPI实现。与需要第三方插件或已弃用OpenAPI支持的竞品不同,oRPC将OpenAPI遵从性直接内建于其核心架构中。该库还支持同时使用多个Schema校验器,并提供括号语法(bracket notation)以支持更复杂的API结构,这些特性在tRPC和ts-rest等替代方案中均未提供。

oRPC中定义过程(procedure)的语法采用链式模式,集成了中间件、校验和错误处理。以下是一个典型的oRPC过程示例:

const getBands = os
 .use(dbProvider)
 .use(requiredAuth)
 .route({ method: 'GET', path: '/bands/{id}' })
 .input(z.object({ id: z.string() }))
 .handler(async ({ input, context }) => {
 // Implementation logic
 })

随该版本一同发布的性能基准测试显示,oRPC相较tRPC有显著的性能优势:类型检查速度快1.6倍,运行时性能快2.8倍,打包体积约为tRPC同类配置的一半。在测试场景中,oRPC的内存占用为103MB,远低于tRPC的268MB。不过,团队指出,这些结果会因项目复杂度和运行环境而有所差异。

对于希望从现有方案迁移的开发者,oRPC提供了详细的迁移指南,包含了并排的代码对比。迁移文档涵盖了从tRPC过渡的全过程,包括安装步骤、概念映射以及路由器、过程和客户端配置的更新模式。核心的迁移步骤包括,将t.procedure替换为os、将query和mutation方法统一为.handler,并将错误处理从TRPCError切换为ORPCError。

社区对此次发布的反应较为谨慎,开发者普遍对OpenAPI集成和多框架支持表现出兴趣。GitHub上的讨论围绕与认证库的集成模式和最佳插件配置展开,表明早期采用者已在积极测试生产场景。

在Reddit上,开发者就现代Next.js项目是否仍需RPC库展开了辩论。讨论者的共识认为,尽管Next.js Server Actions能为简单的CRUD操作提供足够的类型安全性,但oRPC在特定使用场景中仍具价值。有开发者提到专门使用oRPC实现服务器发送事件(SSE),另有开发者强调其内置OpenAPI支持是Server Actions无法提供的关键差异化优势。

与竞品相比,oRPC在TypeScript API工具生态中的定位很独特:tRPC擅长React场景下的类型安全性但缺乏对OpenAPI的支持,ts-rest提供了契约优先开发和OpenAPI支持,而oRPC则试图融合两者优势。对比文档显示,oRPC还提供了Cloudflare WebSocket休眠、Vue Pinia Colada集成和类型安全的文件处理等功能,而竞品要么缺失这些能力,要么需依赖第三方方案实现。

oRPC是由独立开发者unnoq开发的开源TypeScript库,采用MIT许可证。该项目支持多种运行时环境,包括Cloudflare Workers、Deno、Bun和Node.js,这使其既适用于边缘计算场景,也适用于传统服务器部署。

原文链接:

 oRPC Releases Version 1.0 with OpenAPI Support and End to End Type Safety