Quarkus + Reactive Routesで軽量REST APIを作る方法を初心者向けに解説
生徒
「QuarkusでREST APIを作れると聞いたんですが、Spring Bootと何が違うんですか?」
先生
「Quarkusは起動がとても速く、メモリ使用量が少ないのが特徴です。特にReactive Routesを使うと、軽量で高速なAPIを簡単に作れます。」
生徒
「Reactive Routesって難しそうですが、初心者でも大丈夫ですか?」
先生
「基本はとてもシンプルです。まずは仕組みと最小構成のコードから見ていきましょう。」
1. QuarkusのREST APIとは何か
QuarkusのREST APIは、JavaでWeb APIを作るための仕組みです。 REST APIは、ブラウザやスマートフォンアプリ、別のサーバーとデータをやり取りするための入口として使われます。 Quarkusでは、RESTEasyやReactive Routesといった仕組みを使って、シンプルかつ高速なAPIを構築できます。 特にQuarkusはクラウドネイティブを前提に設計されており、コンテナ環境やマイクロサービスとの相性がとても良いのが特徴です。
2. Reactive Routesの特徴とメリット
Reactive Routesは、Quarkus独自の軽量なルーティング機能です。 従来のアノテーション中心のREST APIとは違い、関数のような書き方でURLと処理を結び付けます。 これによりコード量が減り、処理の流れも直感的に理解しやすくなります。 また、非同期処理を前提としているため、アクセスが増えても効率よく処理できる点が大きなメリットです。
3. 最小構成でReactive Routesを定義する
まずは、最もシンプルなReactive Routesの例を見てみましょう。 URLにアクセスしたら文字列を返すだけのAPIです。 初心者の方は「URLと処理をつなげている」と考えると理解しやすくなります。
import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class SimpleRoutes {
@Route(path = "/hello", methods = Route.HttpMethod.GET)
void hello(RoutingExchange exchange) {
exchange.ok("Hello Quarkus Reactive API");
}
}
4. パラメータを受け取るAPIの作り方
REST APIでは、URLに含まれる値を受け取って処理することがよくあります。 Reactive Routesでは、クエリパラメータも簡単に扱えます。 ここでは、名前を受け取ってメッセージを返すAPIを作ってみます。 Webアプリと連携する基本形として覚えておくと便利です。
import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class ParamRoutes {
@Route(path = "/greet", methods = Route.HttpMethod.GET)
void greet(RoutingExchange exchange) {
String name = exchange.getParam("name").orElse("Guest");
exchange.ok("Hello " + name);
}
}
5. JSONを返すReactive Routes
実際のREST APIでは、文字列ではなくJSON形式でデータを返すことが多くなります。 Quarkusでは、JavaのオブジェクトをそのままJSONとして返せます。 これにより、データ構造を意識しながらAPIを設計できるようになります。
import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.Map;
@ApplicationScoped
public class JsonRoutes {
@Route(path = "/user", methods = Route.HttpMethod.GET)
void user(RoutingExchange exchange) {
Map<String, Object> data = Map.of(
"id", 1,
"name", "Taro",
"role", "beginner"
);
exchange.ok(data);
}
}
6. Reactive Routesと非同期処理の考え方
Reactive Routesは、最初から非同期処理を意識して作られています。 そのため、時間のかかる処理があっても全体のパフォーマンスが落ちにくくなります。 初心者の段階では「同時にたくさんのアクセスを効率よく処理できる仕組み」と理解しておけば十分です。 Quarkusが内部でうまく調整してくれるため、複雑な設定をしなくても高速なAPIを作れます。
7. 開発中に便利なホットリロード機能
Quarkusには、コードを変更すると自動で反映されるホットリロード機能があります。 Reactive Routesでも同様に、保存するだけでAPIの挙動が変わるため、学習効率が非常に高いです。 初心者の方でも試行錯誤しながら理解を深めやすく、REST APIの動きを直感的に確認できます。
@Route(path = "/status", methods = Route.HttpMethod.GET)
void status(RoutingExchange exchange) {
exchange.ok("API is running");
}
8. Quarkusで軽量APIを作るときのポイント
QuarkusとReactive Routesを使うことで、シンプルなコードで高速なREST APIを作れます。 起動が速く、メモリ消費が少ないため、学習用だけでなく実務でも使われる技術です。 まずは小さなAPIから作り、URLと処理の関係を理解することが大切です。 それができるようになると、Quarkusによる本格的なAPI開発へ自然に進めるようになります。