この記事は、カサレアルAdvent Calender 2022 の9日目のエントリです。
OpenAPIGeneratorを利用してソースコードを自動生成したときの備忘録になります。
環境
- OpenAPI: 3.0.3
- OpenAPIGenerator: 6.0.1
- コード生成対象(generatorName):kotlin-spring, typescript-axios
現象
OpenAPIGeneratorで以下のようなOpenAPIのyamlファイル(記事に関係ない部分は省略)からソースコードを自動生成しました。
tags:
- name: Foo
description: FooのAPI
- name: Bar
description: BarのAPI
paths:
/getXXXX:
get:
tags:
- Foo
/getYYYY:
get:
tags:
- Foo
/getZZZZ:
get:
tags:
- Bar
このとき、予想としてはContorllerとしてFooContorollerとBarContoroller(正確にはそのinterface)が生成されるのかと思っていました。
- FooContoroller
/getXXXX
/getYYYY
- BarContoroller
/getZZZZ
しかし、実際に生成されたのは以下3つのControllerでした。これではAPIの受け口分コントローラーが生成されてしまう…困る…
- GetXXXXContoroller
/getXXXX
- GetYYYYContoroller
/getYYYY
- GetZZZZContoroller
/getZZZZ
対応
やりたかったような単位でControllerを生成するには、以下のようにpathで1つ区切る必要がありました。タグは関係なかったです。
tags:
- name: Foo
description: FooのAPI
- name: Bar
description: BarのAPI
paths:
/foo/getXXXX: # ← pathを修正
get:
tags:
- Foo
/foo/getYYYY:
get:
tags:
- Foo
/bar/getZZZZ:
get:
tags:
- Bar
これで狙い通りにコントローラを生成できました。
- FooContoroller
/getXXXX
/getYYYY
- BarContoroller
/getZZZZ
おわりに
OpenAPIのyamlの仕様上、タグは1つのpathに複数付与できるので、よく考えればタグの単位でControllerは生成できないですね。ただ、OpenAPIのAPI仕様書ではタグでグルーピングしていますし、複数タグつけるようなパターンは思いつきませんが…
タグの単位で生成されるものだろうという思い込みから、意外と対応に時間がかかりました。本記事が誰かの助けになれば幸いです。