OpenAPIGeneratorの自動生成におけるコントローラーの生成単位はURLで決まる

この記事は、カサレアル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仕様書ではタグでグルーピングしていますし、複数タグつけるようなパターンは思いつきませんが…

タグの単位で生成されるものだろうという思い込みから、意外と対応に時間がかかりました。本記事が誰かの助けになれば幸いです。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です