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のアノテーションを付ける箇所は
自動的に生成すればいいのにと思う。