55129


# 背景

openapi v3で書かれたyamlファイルから、Python3(3.6以上)のClient Libraryを作りたいです。  
<https://github.com/OpenAPITools/openapi-generator>

以下のサイトを参考にして、Client Libraryを作成しようとしています。  
<https://qiita.com/watiko/items/0961287c02eac9211572>

[code]

    java -jar openapi-generator-cli-3.3.4.jar generate --input-spec petstore.yaml --generator-name python --template-dir template/
    
[/code]

### 環境

  * Xubuntu 18.04
  * openapi-generator-cli-3.3.4.jar
  * openjdk 10.0.2

# 現状の動き

petstore.yamlに記載されたtagsごとに、pyファイルが`api`ディレクトリに出力されます。

petstore.yaml

[code]

      /pets/{petId}:
        get:
          summary: Info for a specific pet
          operationId: showPetById
          tags:
            - pet
    
      /animals/{animalId}:
        get:
          summary: Info for a specific Animal
          operationId: showAnimalById
          tags:
            - animals
    
[/code]

出力先の`api`ディレクトリの中身

[code]

    animals_api.py
    pet_api.py
    
[/code]

# やりたいこと

`api.py`というファイルに、`tags`関係なく、すべてのapi情報を出力したいです。  
以下のように、すべてのAPIに対応したメソッドを、一つのクラスにまとめたいです。

[code]

    class Api:
        def show_pet_by_id:
            pass
    
        def show_animal_by_id:
            pass
    
    
[/code]

# 質問

「やりたいこと」を実現するには、どうすればよいでしょうか？  
apiのテンプレートファイル`api.mustache`には、tagsごとの情報が記載されているので、mustacheファイルだけの修正では難しいように思いました。

<https://github.com/OpenAPITools/openapi-
generator/blob/master/modules/openapi-
generator/src/main/resources/python/api.mustache>

ジェネレータも作成する必要がありますか？

openapi-generatorでの実現が難しい場合は、以下のようなコマンドを実行して、各`*_api.py`を連結します。

[code]

    cat api/*_api.py > api.py && rm *_api.py
    
[/code]


CC BY-SA 4.0
2019-04-15T04:53:56.190
54167
2019-05-25T07:30:40.043
2019-05-25T07:30:40.043
19524
19524
question
python openapi openapi-generator
openapi-generator-cliで、すべてのAPIを一つのファイルに出力する方法


こんにちは！OpenAPI Generator core teamの中野です。

下記のように、 `tags` の指定を追加するのはどうでしょうか？  
（例としてそれぞれに `creatures` を追加しています）

[code]

      /pets/{petId}:
        get:
          summary: Info for a specific pet
          operationId: showPetById
          tags:
            - pet
    +       - creatures
    
      /animals/{animalId}:
        get:
          summary: Info for a specific Animal
          operationId: showAnimalById
          tags:
            - animals
    +       - creatures
    
[/code]

OpenAPI GeneratorではtagごとにAPIクラスを生成しますので、  
上記の場合、 すべてのメソッドが集約された CreaturesApi クラスが生成されます。

ただ、このままですとCreaturesApiの他にPetApi, AnimalsApiも生成されますので  
CreaturesApi以外のAPIクラスが不要でしたら、下記のように生成時のオプションを指定することで特定のAPIクラスだけに絞ることができます。

[code]

    $ openapi-generator generate -g python -i {YAML} -o {出力先} \
        -Dapis=creatures \
        -Dmodels \
        -DsupportingFiles
    
[/code]


CC BY-SA 4.0
2019-05-21T04:42:08.240
55129
2019-05-21T04:42:08.240
33002
54167
answer