openapi generator の設定
3時に寝て6時半に起きた。昨日は夕方に昼寝したので夜は眠れなかった。
openapi generator の x-implements 機能⌗
外部ベンダーの api client の wrapper を実装していて、api client が扱うリクエストやレスポンスを型 (インターフェース) で抽象化できるとよさそうと思って openapi generator の設定を調べていた。maven-plugin の設定と openapi-generator の設定の2つがあるので両方のドキュメントを確認しないといけない。
- https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator-maven-plugin
- https://openapi-generator.tech/docs/generators/java/
そんなに都合よくインターフェースを指定できるような仕組みがなければ、最悪は mustache テンプレートをカスタマイズするしかないかなぁとか考えていた。テンプレートを操作すると、今後の保守コストが上がってしまうのでそのメリット・デメリットを比較して考えないといけない。諦めかけていたときに so でこの issue をみつけた。
ちょうどこの5月末にリリースされたばかりの 6.0.0 に x-implements
と指定すれば、任意のインターフェースを implements できる機能が追加された。これはスキーマに対する設定なのでテンプレートをカスタマイズするよりずっと保守コストは小さくて済む。
例えば、openapi schema の json で設定すると、コード生成したときにそんな風にインターフェースが付く。
"SomethingApiResponse": {
+ "x-implements": "com.example.app.MyResponse",
"title": "SomethingApiResponse",
"type": "object",
"properties": {
-public class SomethingApiResponse {
+public class SomethingApiResponse implements com.example.app.MyResponse {
あまりにも意図していた機能をみつけて嬉しくてツィートしてしまった。
openapi generator で生成するコードに任意の interface を指定するのはテンプレートをカスタマイズするしかないかなぁと思っていたら、最新の 6.0.0 でスキーマ定義に x-implements で指定できるようになっている。これはすごい。https://t.co/bT0fQxSrGz
— Tetsuya Morimoto (@t2y) June 27, 2022