状况:实验
@blgc/openapi-router 是围绕快递和Hono等网络框架的路由器的薄包装器,提供OpenAPI类型安全,并与Valibot和Zod等验证库进行无缝整合.
- 类型安全: 与 TypeScript 为强类型的安全而构建并支持
openapi-typescript类型 - 框架不可知论: 与Express,Hono等通俗网络框架相兼容
- 第一次验证: 与 Valibot, Zod 和其他验证器合并,以确保请求符合预期类型
- 模块可扩展( L): 具有以下特征的易于扩展:
withExpress(). . . . . . .
实例
动机
在网络框架路由器周围创建一个类型安全而直截了当的包装器,使用 OpenAPI 计划进行无缝整合 openapi-typescript 并确保与Zod和Valibot等图书馆进行类型验证.
使用量
快递Js
@blgc/openapi-router 环绕 快速路由器 实现完全类型安全,并使用验证器执行您的 OpenAPI-Schema.
虽然TypeScript类型确保了编译时间的安全,但它们不执行运行时间的计时验证. 对于运行时间合规,需要与Zod或Valibot等验证库相整合. 尽管您必须手动定义验证规则,但这些规则对于确保这些规则的正确定义是安全的.
import { createExpressOpenApiRouter } from '@blgc/openapi-router';
import { Router } from 'express';
import * as v from 'valibot';
import { vValidator } from 'validation-adapters/valibot';
import { paths } from './gen/v1'; // OpenAPI-generated types
import { PetSchema } from './schemas'; // Custom reusable Zod schema for validation
export const router: Router = Router();
export const openApiRouter = createExpressOpenApiRouter<paths>(router);
// GET /pet/{petId}
openApiRouter.get('/pet/{petId}', {
pathValidator: vValidator(
v.object({
petId: v.number() // Validate that petId is a number
})
),
handler: (req, res) => {
const { petId } = req.params; // Access validated params
res.send({ name: 'Falko', photoUrls: [] });
}
});
// POST /pet
openApiRouter.post('/pet', {
bodyValidator: vValidator(PetSchema), // Validate request body using PetSchema
handler: (req, res) => {
const { name, photoUrls } = req.body; // Access validated body data
res.send({ name, photoUrls });
}
});
浩诺
@blgc/openapi-router 环绕 Hono 路由器 实现完全类型安全,并使用验证器执行您的 OpenAPI-Schema.
虽然TypeScript类型确保了编译时间的安全,但它们不执行运行时间的计时验证. 对于运行时间合规,需要与Zod或Valibot等验证库相整合. 尽管您必须手动定义验证规则,但这些规则对于确保这些规则的正确定义是安全的.
Hono 类型脚本集成提供了类型建议
c.json()基于通用定义的响应类型,但在编译时不强制执行这些类型. 譬如说,c.json('')即使预期类型是,也不会产生类型错误{someType: string}这是由于Hono内部使用TypedResponse<T>,这可以推断,但不严格地执行所传通类. 霍诺讨论
import { createHonoOpenApiRouter } from '@blgc/openapi-router';
import { Hono } from 'hono';
import { zValidator } from 'validation-adapters/zod';
import * as z from 'zod';
import { paths } from './gen/v1'; // OpenAPI-generated types
import { PetSchema } from './schemas'; // Custom reusable Zod schema for validation
export const router = new Hono();
export const openApiRouter = createHonoOpenApiRouter<paths>(router);
// GET /pet/{petId}
openApiRouter.get('/pet/{petId}', {
pathValidator: zValidator(
z.object({
petId: z.number() // Validate that petId is a number
})
),
handler: (c) => {
const { petId } = c.req.valid('param'); // Access validated params
return c.json({ name: 'Falko', photoUrls: [] });
}
});
// POST /pet
openApiRouter.post('/pet', {
bodyValidator: zValidator(PetSchema), // Validate request body using PetSchema
handler: (c) => {
const { name, photoUrls } = c.req.valid('json'); // Access validated body data
return c.json({ name, photoUrls });
}
});