我想要使用MongoDB处理OpenAPI Generator的输出模型(未成功)

OpenAPI是什么

您是否了解OpenAPI(原Swagger)这种用于REST API的接口定义方法?您可以使用符合OpenAPI标准的定义文件,通过使用Stoplight等工具来编写,然后通过openapi-generator-cli等生成器,可以在一定程度上自动生成Go/Python-Flask等服务器模板、Go/Python/TypeScript等客户端库、模拟服务器和文档等。

听说通过使用生成器,只需要准备一次定义文件,就可以利用自动生成的模型,在服务器端和客户端上进行实现而无需从头开始编写,可以相对快速地推进实施。

我试图做的这件事

由于花了相当时间编写OpenAPI文档,所以希望尽可能地基于自动化生成来实现API服务器。之前的版本使用Flask和原始的SQL编写了相当不规范的代码来实现,为了更加正式一些,我打算使用Go和MongoDB进行重写。因此,我希望在验证请求的模型后直接将其存储到MongoDB中。

使用了发电机

我使用了openapi-generator-cli构建了go-server(net/http)。虽然也可以使用gin或echo(oapi-gen)构建,但作为初次使用go语言的我,想要选择尽可能少写代码的net/http。关于Go语言而言,似乎有一个叫做Go-Swagger的工具可以使用,但它只支持当前定义文件的编写方式OpenAPI(v3)之前的Swagger(v2),所以我无法使用它。

使用过的库

我使用了MongoDB官方提供的mongo-driver。以前mgo非常推荐,但由于它已经停止维护,所以我不情愿地选择了这个。

这次生成的模型

image.png

在MongoDB中注册模型

image.png

向MongoDB进行插入操作

image.png

从MongoDB获取

image.png

我试试努力一下

image.png

这次的结论

使用OpenAPI Generator生成的模型可以直接插入/获取MongoDB,但是如果使用嵌入式(继承)添加字段,则在获取时无法将其映射到修改后的模型上,这就变成了一个困难。此外,似乎不打算直接将其插入MongoDB,因此最好停止这种方式。我们应该另外准备一个仅用于直接插入MongoDB的模型。

广告
将在 10 秒后关闭
bannerAds