[[JHIPSTER一覧]]

JHIPSTERは、データベースの設計から生成できる様々なことを生成するが、

RESTAPIの設計書をもとにした自動生成は、openapiを定義してそこから生成する仕組みを採用しています。

内部でopenapi-generatorを使用しています。

** openapi-generatorの設定について [#n3d40716]

pom.xmlに、以下のコードでパラメータが定義されているので、パラメータは自分の好みで調整したほうがよさそうです。

*** 例: pom.xmlから設定箇所の抜粋 [#vb8f0ad2]

                <plugin>
                    <!--
                        Plugin that provides API-first development using openapi-generator to
                        generate Spring-MVC endpoint stubs at compile time from an OpenAPI definition file
                    -->
                    <groupId>org.openapitools</groupId>
                    <artifactId>openapi-generator-maven-plugin</artifactId>
                    <version>${openapi-generator-maven-plugin.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                            <configuration>
                                <inputSpec>${project.basedir}/src/main/resources/swagger/api.yml</inputSpec>
                                <generatorName>spring</generatorName>
                                <apiPackage>com.kuni.web.api</apiPackage>
                                <modelPackage>com.kuni.service.api.dto</modelPackage>
                                <supportingFilesToGenerate>ApiUtil.java</supportingFilesToGenerate>
                                <importMappings>Problem=org.zalando.problem.Problem</importMappings>
                                <skipValidateSpec>false</skipValidateSpec>
                                <configOptions>
                                    <delegatePattern>true</delegatePattern>
                                    <title>my-app-01</title>
                                </configOptions>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

generatorNameのspringと書いてあるところを変えると、いろいろな言語のサーバだったり、クライアントだったり、ドキュメントを生成することができるはず。

どんな項目を設定できるのかは、

openapi-generatorのコマンドで見るのが確実

openapi-generatorのプロジェクトをgit cloneしてきて、以下のコマンドで一覧が出ます。
 java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar list

*** 結果もついでだから載せておきますね [#ha88496d]
 $ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar list
 tThe following generators are available:

 CLIENT generators:
    - ada
    - android
    - apex
    - bash
    - c
    - clojure
    - cpp-qt-client
    - cpp-restsdk
    - cpp-tiny (beta)
    - cpp-tizen
    - cpp-ue4 (beta)
    - crystal (beta)
    - csharp
    - csharp-netcore
    - dart
    - dart-dio
    - dart-dio-next (experimental)
    - dart-jaguar
    - eiffel
    - elixir
    - elm
    - erlang-client
    - erlang-proper
    - go
    - groovy
    - haskell-http-client
    - java
    - java-micronaut-client (beta)
    - javascript
    - javascript-apollo (beta)
    - javascript-closure-angular
    - javascript-flowtyped
    - jaxrs-cxf-client
    - jmeter
    - k6 (beta)
    - kotlin
    - lua (beta)
    - nim (beta)
    - objc
    - ocaml
    - perl
    - php
    - php-dt (beta)
    - powershell (beta)
    - python (experimental)
    - python-legacy
    - r
    - ruby
    - rust
    - scala-akka
    - scala-gatling
    - scala-sttp (beta)
    - scalaz
    - swift5
    - typescript (experimental)
    - typescript-angular
    - typescript-aurelia
    - typescript-axios
    - typescript-fetch
    - typescript-inversify
    - typescript-jquery
    - typescript-nestjs (experimental)
    - typescript-node
    - typescript-redux-query
    - typescript-rxjs
 
 
 SERVER generators:
    - ada-server
    - aspnetcore
    - cpp-pistache-server
    - cpp-qt-qhttpengine-server
    - cpp-restbed-server
    - csharp-nancyfx
    - erlang-server
    - fsharp-functions (beta)
    - fsharp-giraffe-server (beta)
    - go-echo-server (beta)
    - go-gin-server
    - go-server
    - graphql-nodejs-express-server
    - haskell
    - haskell-yesod (beta)
    - java-inflector
    - java-msf4j
    - java-pkmst
    - java-play-framework
    - java-undertow-server
    - java-vertx-web (beta)
    - jaxrs-cxf
    - jaxrs-cxf-cdi
    - jaxrs-cxf-extended
    - jaxrs-jersey
    - jaxrs-resteasy
    - jaxrs-resteasy-eap
    - jaxrs-spec
    - kotlin-server
    - kotlin-spring
    - kotlin-vertx (beta)
    - nodejs-express-server (beta)
    - php-laravel
    - php-lumen
    - php-mezzio-ph
    - php-slim4
    - php-symfony
    - python-aiohttp
    - python-blueplanet
    - python-fastapi (beta)
    - python-flask
    - ruby-on-rails
    - ruby-sinatra
    - rust-server
    - scala-akka-http-server (beta)
    - scala-finch
    - scala-lagom-server
    - scala-play-server
    - scalatra
    - spring
 
 
 DOCUMENTATION generators:
    - asciidoc
    - cwiki
    - dynamic-html
    - html
    - html2
    - markdown (beta)
    - openapi
    - openapi-yaml
    - plantuml (beta)
 
 
 SCHEMA generators:
    - avro-schema (beta)
    - graphql-schema
    - ktorm-schema (beta)
    - mysql-schema
    - protobuf-schema (beta)
    - wsdl-schema (beta)
 
 
 CONFIG generators:
    - apache2


*** 思ったこと [#i923d86e]
いろいろな言語のクライアント用のAPIリクエスト投げる部分とか、自動で作れるので、openapi-generatorをそのまま使ったほうが使い勝手良いのでは?

クライアントのフレームワークをJHIPSTERで選んでりるわけだから、それ用のコードも生成しておいてもいいのでは?

クライアントの画面も作ってしまえばいいのでは?

希望としては、JDLをリクエストとレスポンスの記述できるように拡張して、OPENAPIの定義を生成できるようにしておく。そうしたら次は、テンプレートでクライアントの画面も生成しておく。

** JHIPSTER本家のOPENAPIの説明 [#h6ec5142]
https://www.jhipster.tech/doing-api-first-development/

** jhipsterのapi.ymlの場所 [#u1f8d232]
 src/main/resources/swagger/api.yml

** サンプルAPI [#ofd48b67]
デフォルトでは、セキュリティに関する記述はあるが何もAPIが記載されていない。

なので、以下のコードをapi.ymlに追加して確認するとする

  /health:
    get:
      operationId: openapitutorial.controller.health.call
      summary: サーバーの状態を返します
      description: サーバーの状態を返します。
      responses:
        '200':
          description: サーバーは正常に動作しています
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/get_health_response'

 components:
  schemas:
    get_health_response:
      description: サーバーの状態のレスポンス
      type: object
      properties:
        status:
          type: string
          enum:
            - ok
      required:
        - status  

** 実行方法 [#t6efba7f]
pom.xmlに設定があるのでそれを動かすかんじかな、

本家には、実行方法が以下のように書いてあります。
 ./mvnw generate-sources

自分は、windowsであり、mavenをインストール済みなので、
 mvn generate-sources
で生成できます。


*** おもったこと [#r18b1389]
個人的には、getメソッドとpostメソッドなど、swaggerのアノテーションを付ける箇所は

自動的に生成すればいいのにと思う。

* 自動生成されるSpring fox用アノテーション [#bc98aea7]
いらないとは思うが、プロジェクトによっては整理しなおしたほうがよい。

ジェネレータのテンプレートをいじって、変数名の説明を出力するなどを行うとよいように思う。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS