Node.js API请求/响应形状(包括JSON模式、TypeScript类型和运行时验证器)的单一真实来源?
我正在编写一个典型的Node.js REST服务,其端点接收JSON输入(作为POST正文)并返回JSON响应 我想要这三样东西:Node.js API请求/响应形状(包括JSON模式、TypeScript类型和运行时验证器)的单一真实来源?,node.js,typescript,jsonschema,Node.js,Typescript,Jsonschema,我正在编写一个典型的Node.js REST服务,其端点接收JSON输入(作为POST正文)并返回JSON响应 我想要这三样东西: 定义端点的请求体和响应体的形状的JSON模式。(或Swagger文件,或任何适合为客户定义合同的文件。) TypeScript类型/接口完美地反映了JSON模式 我可以从处理程序调用运行时验证函数,以确保对象的形状正确。(一旦输入对象被验证,我的TypeScript代码应该知道它的接口。) 但我想要一个单一的真相来源,以避免这三个组成部分失去同步。所以我只想手工维护
我觉得现在这一定是一个相当普遍的要求,但我在网上找不到太多。也许我用错了搜索词来研究它。是否有任何框架或传统模式可以实现这一目标,即定义一个JSON API,严格验证输入、标准化的模式文档以及TypeScript中全类型对象的所有便利性?我假设您在前端和后端使用TypeScript 自定义类型重用 假设我们有一个包含三个主要文件夹的项目存储库:
client
、server
和shared
在shared
中有一个Types.ts
文件,其中包含所有自定义类型定义。
例如:
export interface Person {
name: string;
age: number;
}
现在,您可以从任何子文件夹导入这些类型,如\client\src\components\SomeComponent.ts
或server\server\src\api\SomeRoute.ts
与:
因此,通过这种方式,您就可以在服务器和客户端的项目范围内使用类型定义
JSON模型和文档生成
您可以使用注释来记录api并生成降价文档
另一种选择是。TypeDoc将TypeScript源代码中的注释转换为呈现的HTML文档或JSON模型。您可以通过只考虑相关api文件的方式对其进行配置
运行时验证
关于输入和输出的运行时验证,您可以为本文中由stereobooster解释的每种类型编写自己的验证函数:。或者你使用像这样的图书馆
可能没有“一刀切”的工具,因为它在很大程度上取决于您想要实现的确切需求。因此,组合不同工具的工具集应该可以引导您走向正确的方向。如果您找到了适合自己的设置,请随时发布答案。这里的棘手之处在于JSON模式(或类似模式)和编程语言类型之间。并非总是有1:1的翻译。您可以使用QuyType在某个级别上执行此操作,但也可以认为它并不完美,OpenAPI和SWAGER负载模式与JSON模式不完全相同。
import { Person } from `..\..\..\..\shared\Types.ts`;