Openapi 代码生成 server/client 代码
目录
swagger and openapi 代码生成和文档自动生成一些体会
说在前面
平时使用gqlgen,一般的 workflow 是先写 graphql 的 schema,然后 code generate 对应的 model 和 api 的实现的空接口,自己对应实现对应的 resolver 即可。使用起来很流程。最近调研一下 java 下类似的工具。找到在 java 下 star 最多的项目graphql-java,但并不是这里讨论的。 这里讨论的是基于 spring 的 openapi 的实现和 code generate 方案。
基于 openapi 的 code generate 方案
首先简单介绍一下 openapi,他是语言无关的 restful 描述语言,可以使用 yaml 进行编写接口文档,通过 generate,生成不同语言的 client 和 server。这里有官方的简介。自己比较关注的语言是 python、java、go、rust,js。
踩到的一些坑,这里简单试用了一下 generate java。首先,maven 下有对应的 openapi 的 plugin,openapi-generator-maven-plugin, 但每次 compile 都会进行 generate,并不是我所希望的,所以这里使用了基于 docker 的使用方案。代码见exfly:gorgestar/isn,使用generator.sh生成对应的代码,配置文件可以看generator.json,
我的使用策略是,先修改openapi.yaml,创建或者修改 restful api,然后 bash ./generator.sh
,生成对应接口默认空实现,之后由我们对应的实现接口即可。
一些自己没有进行操作的方案:
- 如何保证 api 和接口文档一致:可以对应的使用 swagger 的 api-doc json 进行转换为 yaml,对原本手写的
openapi.yaml
进行比较,确认文档的一致性 - 这个版本的 generate 每次都会将所有的文件覆盖,需要编辑.openapi-generator-ignore,类似 gitignore 的东西,类比修改即可。被忽略的文件,即使被删除,也不会自动生成对应文件,生成逻辑看起来比较傻。