node.js - API 请求/响应形状的单一事实来源,包括 JSON 模式、TypeScript 类型和运行时验证器?
问题描述
我正在编写一个典型的 Node.js REST 服务,其端点接收 JSON 输入(作为 POST 主体)并返回 JSON 响应。
我想要这三样东西:
- JSON 模式定义了我的端点的请求体和响应体的形状。(或 Swagger 文件,或任何适合为客户定义合同的文件。)
- TypeScript 类型/接口完美地反映了 JSON 模式。
- 我可以从我的处理程序调用运行时验证函数,以确保对象的形状正确。(一旦输入对象被验证,我的 TypeScript 代码应该知道它的接口。)
但我想要一个单一的事实来源,以避免这三个组件不同步。所以我只想手动维护其中一个(JSON 模式或 TypeScript 类型)。其他两个组件应该由手写的组件生成,它们不应该提交给版本控制。
我觉得这一定是当今相当普遍的要求,但我在网上找不到太多关于它的信息。也许我使用了错误的搜索词来研究它。是否有任何框架或传统模式可以解决这个目标,即定义一个 JSON API 的目标,严格验证输入、标准化模式文档以及 TypeScript 中完全类型化对象的所有便利?
解决方案
我认为看看 Google RPC 协议可能是个好主意。
https://grpc.io/docs/languages/node/basics/
您在单个文件中描述所有协议交互(也称为对象结构、响应、请求等).proto
,并且提供的实用程序可以为 nodejs、客户端 javascript 和其他编程语言生成客户端和服务器代码。
推荐阅读
- java - OpenAM JEE 策略代理 3.5 和 5.x
- spring - @enabler2dbcrepositories 无法找到我的存储库
- timer - SwiftUI:如何在 SwiftUI 视图中取消计时器?
- virtualbox - 无法在订阅者 VM 上接收消息(VirtualBox 上的 ZeroMQ)
- laravel - Laravel 宅基地和依赖项
- angular - 通过从 Angular 中的数组中获取数据来生成动态表时出错
- visual-studio - .NET Framework 项目中的可空引用类型不能与 IntelliSense 一起使用
- stripe-payments - 我怎样才能让条纹在 prestashop 上工作?
- python-3.x - python3:TypeError:需要一个类似字节的对象,而不是'str'
- angular - 如何修复离子应用程序的 EONENT npm 安装错误?