JHIPSTER一覧

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

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

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

openapi-generatorの設定について

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

例: pom.xmlから設定箇所の抜粋

               <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

結果もついでだから載せておきますね

$ 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

思ったこと

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

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

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

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

JHIPSTER本家のOPENAPIの説明

https://www.jhipster.tech/doing-api-first-development/

jhipsterのapi.ymlの場所

src/main/resources/swagger/api.yml

サンプルAPI

デフォルトでは、セキュリティに関する記述はあるが何も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  

実行方法

pom.xmlに設定があるのでそれを動かすかんじかな、

本家には、実行方法が以下のように書いてあります。

./mvnw generate-sources

自分は、windowsであり、mavenをインストール済みなので、

mvn generate-sources

で生成できます。

おもったこと

個人的には、getメソッドとpostメソッドなど、swaggerのアノテーションを付ける箇所は

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

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