The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

RESTEasy Reactiveへの移行

RESTEasy ClassicからRESTEasy Reactiveへの移行は、ほとんどの場合簡単ですが、いくつかの注意が必要なケースがあります。この文書では、移行を試みるユーザが注意すべき問題のリストを提供します。

RESTEasy Reactiveのリファレンスドキュメントは こちら でご覧いただけます。

サーバー

RESTEasy Reactiveのサーバー部分( quarkus-resteasy-reactive とその依存関係)は、JAX-RS仕様の実装を提供しますが、Quarkusのビルド時処理とVert.xが提供する統一I/Oモデルを活用しています。

依存関係

次の表は、従来のRESTEasyの依存関係と新しいRESTEasy Reactiveの依存関係を対応付けたものです。

Legacy RESTEasy Reactive

quarkus-resteasy

quarkus-resteasy-reactive

quarkus-resteasy-jackson

quarkus-resteasy-reactive-jackson

quarkus-resteasy-jsonb

quarkus-resteasy-reactive-jsonb

quarkus-resteasy-jaxb

quarkus-resteasy-reactive-jaxb

quarkus-resteasy-qute

quarkus-resteasy-reactive-qute

quarkus-resteasy-mutiny は、RESTEasy Reactive が Mutiny の統合を最初から提供するため、対応する依存関係がありません。

アノテーション

RESTEasy Reactiveは、 org.jboss.resteasy.annotations パッケージの各種カスタムアノテーションには対応していません。

次の表は、従来のRESTEasyアノテーションと新しいRESTEasy Reactiveアノテーションを対応させたものです。

Legacy RESTEasy Reactive Comments

org.jboss.resteasy.annotations.jaxrs.PathParam

org.jboss.resteasy.reactive.RestPath

パス部分がメソッドパラメータ名と一致する場合は、このアノテーションは必要ありません

org.jboss.resteasy.annotations.jaxrs.QueryParam

org.jboss.resteasy.reactive.RestQuery

org.jboss.resteasy.annotations.jaxrs.FormParam

org.jboss.resteasy.reactive.RestForm

org.jboss.resteasy.annotations.jaxrs.HeaderParam

org.jboss.resteasy.reactive.RestHeader

org.jboss.resteasy.annotations.jaxrs.CookieParam

org.jboss.resteasy.reactive.RestCookie

org.jboss.resteasy.annotations.jaxrs.MatrixParam

org.jboss.resteasy.reactive.RestMatrix

org.jboss.resteasy.annotations.cache.Cache

org.jboss.resteasy.reactive.Cache

org.jboss.resteasy.annotations.cache.NoCache

org.jboss.resteasy.reactive.NoCache

org.jboss.resteasy.annotations.SseElementType

org.jboss.resteasy.reactive.RestStreamElementType

org.jboss.resteasy.annotations.Separator

org.jboss.resteasy.reactive.Separator

前の表には org.jboss.resteasy.annotations.Form アノテーションは含まれていません。RESTEasy Reactive に特化した代替品がないためです。代わりに、サーバーとクライアントの両方でサポートされている JAX-RS 標準の javax.ws.rs.BeanParam アノテーションを使用することが推奨されます。

JAX-RSプロバイダー

RESTEasy Reactiveは、RESTEasy Classicと同じ仕様に準拠した動作を提供しますが、実行時に正確に同じプロバイダの実装が含まれているわけではありません。

プロバイダの違いで動作が異なる可能性がある最も一般的なケースは、同梱の javax.ws.rs.ext.ExceptionMapper 実装です。アプリケーションにどのようなクラスが含まれているかを確認するには、開発モードでアプリケーションを起動し、 http://localhost:8080/q/dev/io.quarkus.quarkus-resteasy-reactive/exception-mappers を開いてください。

サービスローディング

RESTEasy Classicは、JavaのService Loaderを使用して、ビルド時にプロバイダを決定することをサポートしています。すべてのプロバイダがビルド時に決定されるようにするため、RESTEasy Reactive はこの機能をサポートしていません。代わりに、アプリケーションの依存関係にプロバイダがあるユーザは、CDI ガイドの Beanディスカバリー セクションで説明されている方法のいずれかを使用して、これらの依存関係のインデックスを作成することが推奨されます。

マルチパート対応

RESTEasy ReactiveのHTTP Multipartサポートは、RESTEasy Classicと同じ型やアノテーションを再利用して いない ため、ユーザーはリファレンスドキュメントの この部分を読むことが推奨されます。

multipart リソースを RESTEasy Reactive に移行するユーザーは、設定パラメータ quarkus.http.limits.max-form-attribute-size に注意する必要があります。これにより、各パートのサイズに上限が設定されるためです。 この設定値を超えるパーツ サイズのリクエストは、HTTP ステータス コード 413 になります。

デフォルトのメディアタイプ

Quarkusでは、一般的なユースケースをシンプルにするために、JAX-RSメソッドのメディアタイプを決定する際にスマートデフォルトを使用しています。 quarkus-resteasy-reactivequarkus-resteasy の違いは、メソッドが String を返す場合、 text/html の代わりに text/plain をデフォルトのメディアタイプとして使用することです。

クライアント

Reactive REST Client ( quarkus-rest-client-reactive とその依存関係) は、レガシー quarkus-rest-client を置き換えるものですが、Quarkus のビルド時処理と Vert.x が提供する統一 I/O モデルを活用します。

依存関係

次の表は、従来の REST Client の依存関係と、新しい Reactive REST Client の依存関係を対応付けたものです。

Legacy RESTEasy Reactive

quarkus-rest-client

quarkus-rest-client-reactive

quarkus-rest-client-jackson

quarkus-rest-client-reactive-jackson

quarkus-rest-client-jsonb

quarkus-rest-client-reactive-jsonb

quarkus-rest-client-jaxb

quarkus-rest-client-reactive-jaxb

Keycloak adminクライアント

quarkus-rest-client を使用する場合、ユーザーは quarkus-keycloak-admin-client を使用して、RESTクライアントを活用してターゲットのKeycloakインスタンスを管理することができます。

一方、 quarkus-rest-client-reactive を使用する場合、ユーザーは同じ機能にアクセスするために quarkus-keycloak-admin-client-reactive を使用し、reactive REST Client を使用する必要があります。

OIDC

quarkus-rest-client を使用する場合、ユーザーは quarkus-oidc-client-filter エクステンションを使用して、OpenID Connect および OAuth 2.0 準拠の Authorization Server からアクセストークンを取得し、更新することができます。

一方、 quarkus-rest-client-reactive を使用する場合、同じ機能を利用するためには、 quarkus-oidc-client-filter-reactive を使用する必要があります。

同様に、 quarkus-oidc-token-propagation は、従来の REST のユーザーが現在の Bearer または Authorization Code Flow のアクセストークンを伝搬することを可能にします。

一方、 quarkus-rest-client-reactive を使用する場合、同じ機能を利用するためには、 quarkus-oidc-token-propagation-reactive を使用する必要があります。

カスタムエクステンション

このセクションは、JAX-RSおよび/またはRESTクライアントの機能に依存するカスタムエクステンションを開発したユーザのみが読む必要がある高度なセクションです。

依存関係

カスタムエクステンションはRESTEasy Reactiveに明示的に依存するか、RESTEasyの両方のフレーバーをサポートし、ユーザーの判断に委ねるかが最初の関心事です。エクステンションが汎用的なものであれば、後者のオプションを選択することが理にかなっていると思われます。

両方のエクステンションをサポートすることを選択した場合、カスタムエクステンションのデプロイメントモジュールは通常、SPIモジュール - quarkus-jaxrs-spi-deployment , quarkus-resteasy-common-spi , quarkus-resteasy-reactive-spi-deployment に依存し、ランタイムモジュールは両方のRESTEasyフレーバーのランタイムモジュールに optional 依存することになります。

Quarkusがこの戦略を用いて、コアリポジトリでRESTEasyの両方のフレーバーをサポートしている好例は、 [こちら](https://github.com/quarkusio/quarkus/pull/21089) と [こちら] (https://github.com/quarkusio/quarkus/pull/20874) にあります。

一般に、両方のフレーバーをサポートするために、カスタムエクステンションの2つの異なるバージョンを用意する必要はないはずです。このような選択が厳密に必要なのは、エクステンションの消費者(Quarkusアプリケーションなど)がRESTEasyのバージョンを自分で選択する必要がない場合のみです。

リソースとプロバイダーのディスカバリー

JAX-RSリソース、プロバイダ、RESTクライアントインターフェースを実行時モジュールに含み、その発見をJandexインデックスに依存するカスタムエクステンション(例えば、空の META-INF/beans.xml ファイルを持っているから)は、RESTEasy Reactiveでこれらを発見可能にするための追加設定を行う必要がありません。

ビルドアイテムによるプロバイダー登録

ビルド アイテムを介してプロバイダーを登録するエクステンションは、RESTEasy Classicの io.quarkus.resteasy.common.spi.ResteasyJaxrsProviderBuildItem ビルド アイテムを使用します。 ただし、RESTEasy Reactive では、エクステンションは io.quarkus.resteasy.reactive.spi.MessageBodyWriterBuildItemio.quarkus.resteasy.reactive.spi.MessageBodyWriterBuildItem などの特定のビルド アイテムを使用する必要があります。

RESTクライアント

REST クライアントを使用する Quarkus アプリケーションの一部として実行されるコードは、アプリケーションの static-init フェーズで必要な設定がすべて完了しているため、Reactive REST クライアントを安全に使用できます。