JHIPSTERは、データベースの設計から生成できる様々なことを生成するが、
RESTAPIの設計書をもとにした自動生成は、openapiを定義してそこから生成する仕組みを採用しています。
内部でopenapi-generatorを使用しています。
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の定義を生成できるようにしておく。そうしたら次は、テンプレートでクライアントの画面も生成しておく。
https://www.jhipster.tech/doing-api-first-development/
src/main/resources/swagger/api.yml
デフォルトでは、セキュリティに関する記述はあるが何も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のアノテーションを付ける箇所は
自動的に生成すればいいのにと思う。