- 追加された行はこの色です。
- 削除された行はこの色です。
[[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]
いらないとは思うが、プロジェクトによっては整理しなおしたほうがよい。
ジェネレータのテンプレートをいじって、変数名の説明を出力するなどを行うとよいように思う。