😺

QuarkusでAPI開発(RESTサービス(JSON))のサンプルプロジェクトを作成してみた

2021/11/03に公開

QuarkusでAPI開発(RESTサービス(JSON))のサンプルプロジェクトを作成してみました。

API開発の前にQuarkusの簡単な説明をします。

Quarkusのポイント

  • コンテナファースト
     - 低メモリ使用量と高速起動時間に最適化されている
  • ビルド時間処理
     - ビルド時に、従来のフレームワークが実行時に行うことを実行すること
     - すべてのメタデータ処理がすでに実行されているため、メモリ使用量が少なくなり、起動時間が短縮される
  • リフレクション使用量の削減
     - 可能な限りリフレクションを回避し、起動時間とメモリ使用量を削減
  • GraalVMネイティブイメージのファーストクラスのサポート
     - アプリケーションをネイティブ実行可能ファイルにコンパイルすると、起動がはるかに速くなり、標準のJVMよりもはるかに小さいヒープで実行できる
  • ネイティブイメージのプリブート
  • Kubernetesだけでなく、ベアメタル

QuarkusのRESTサービス(JSON)を実行する(チート)

# サンプルプロジェクトをcloneするディレクトリに移動して実行
$ mkdir -p ~/app/quarkus/
$ cd ~/app/quarkus/

$ git clone https://github.com/taktaky/quarkus-samples.git
$ cd quarkus-samples/rest-json-sample
$ ./mvnw compile quarkus:dev
# 別のターミナルで実行するかブラウザで下記のURLにアクセス
$ curl -s http://localhost:8080/pets

QuarkusのRESTサービス(JSON)を実行する(詳細)

Quarkusのサンプルプロジェクトをダウンロード

# サンプルプロジェクトをcloneするディレクトリに移動して実行
$ mkdir -p ~/app/quarkus/
$ cd ~/app/quarkus/

$ git clone https://github.com/taktaky/quarkus-samples.git

RESTサービス(JSON)プロジェクトのディレクトリに移動

$ cd quarkus-samples/rest-json-sample

RESTサービス(JSON)の起動

$ ./mvnw compile quarkus:dev
[INFO] Scanning for projects...
・・・省略・・・
[INFO] 
[INFO] --------------------< com.deraii:rest-json-sample >---------------------
[INFO] Building rest-json-sample 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- quarkus-maven-plugin:2.4.0.Final:generate-code (default) @ rest-json-sample ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ rest-json-sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ rest-json-sample ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- quarkus-maven-plugin:2.4.0.Final:dev (default-cli) @ rest-json-sample ---
[INFO] Invoking org.apache.maven.plugins:maven-resources-plugin:2.6:testResources) @ rest-json-sample
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/tack/app/quarkus/quarkus-samples/rest-json-sample/src/test/resources
[INFO] Invoking org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile) @ rest-json-sample
[INFO] Nothing to compile - all classes are up to date
Listening for transport dt_socket at address: 5005
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2021-11-03 02:01:00,320 INFO  [io.quarkus] (Quarkus Main Thread) rest-json-sample 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.4.0.Final) started in 2.310s. Listening on: http://localhost:8080
2021-11-03 02:01:00,328 INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2021-11-03 02:01:00,329 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy, resteasy-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [r] to resume testing, [o] Toggle test output, [h] for more options>

RESTサービス(JSON)にアクセス

$ curl -s http://localhost:8080/pets
[{"name":"ムギ","description":"犬:トイプードル"},{"name":"サクラ","description":"犬:チワワ"},{"name":"ハッピー","description":"犬:ミックス犬"}]%

以上です🎉

参考資料

https://quarkus.io/vision/container-first

https://github.com/taktaky/quarkus-samples

Discussion