首页 > 解决方案 > API 请求/响应形状的单一事实来源,包括 JSON 模式、TypeScript 类型和运行时验证器?

问题描述

我正在编写一个典型的 Node.js REST 服务,其端点接收 JSON 输入(作为 POST 主体)并返回 JSON 响应。

我想要这三样东西:

  1. JSON 模式定义了我的端点的请求体和响应体的形状。(或 Swagger 文件,或任何适合为客户定义合同的文件。)
  2. TypeScript 类型/接口完美地反映了 JSON 模式。
  3. 我可以从我的处理程序调用运行时验证函数,以确保对象的形状正确。(一旦输入对象被验证,我的 TypeScript 代码应该知道它的接口。)

但我想要一个单一的事实来源,以避免这三个组件不同步。所以我只想手动维护其中一个(JSON 模式或 TypeScript 类型)。其他两个组件应该由手写的组件生成,它们不应该提交给版本控制。

我觉得这一定是当今相当普遍的要求,但我在网上找不到太多关于它的信息。也许我使用了错误的搜索词来研究它。是否有任何框架或传统模式可以解决这个目标,即定义一个 JSON API 的目标,严格验证输入、标准化模式文档以及 TypeScript 中完全类型化对象的所有便利?

标签: node.jstypescriptjsonschema

解决方案


我认为看看 Google RPC 协议可能是个好主意。

https://grpc.io/docs/languages/node/basics/

您在单个文件中描述所有协议交互(也称为对象结构、响应、请求等).proto,并且提供的实用程序可以为 nodejs、客户端 javascript 和其他编程语言生成客户端和服务器代码。


推荐阅读