RESTEasyのガイド
1. 前書き
JAX-RS(RESTfulWebサービス用のJavaAPI)は、REST APIsの作成をサポートするJavaAPIのセットです。 また、フレームワークはアノテーションをうまく利用して、これらのAPIの開発と展開を簡素化します。
このチュートリアルでは、単純なRESTful Webサービスを作成するために、JBossが提供するJAX-RS仕様のポータブル実装であるRESTEasyを使用します。
2. プロジェクトのセットアップ
次の2つのシナリオを検討します。
-
スタンドアロンセットアップ-すべてのアプリケーションサーバーでの作業を目的としています
-
JBoss ASセットアップ– JBoss ASでの展開のみを考慮する
2.1. スタンドアロンセットアップ
スタンドアロンセットアップでJBoss WildFly 10を使用することから始めましょう。
JBoss WildFly 10にはRESTEasyバージョン3.0.11が付属していますが、ご覧のとおり、pom.xmlを新しい3.0.14バージョンで設定します。
また、resteasy-servlet-initializerのおかげで、RESTEasyは、ServletContainerInitializer統合インターフェースを介してスタンドアロンのServlet 3.0コンテナーとの統合を提供します。
pom.xml:__を見てみましょう
3.0.14.Final
org.jboss.resteasy
resteasy-servlet-initializer
${resteasy.version}
org.jboss.resteasy
resteasy-client
${resteasy.version}
jboss-deployment-structure.xml
JBoss内では、WAR、JAR、またはEARとしてデプロイされるものはすべてモジュールです。 これらのモジュールはdynamic modulesと呼ばれます。
これらのほかに、$JBOSS_HOME/modulesには静的なmodulesもあります。 JBossにはRESTEasystatic modulesがあるため、スタンドアロンデプロイメントの場合、それらの一部を除外するにはjboss-deployment-structure.xmlが必須です。
このようにして、WARに含まれるすべてのクラスとJARファイルがロードされます。
2.2. JBossASセットアップ
JBossバージョン6以降でRESTEasyを実行する場合は、アプリケーションサーバーに既にバンドルされているライブラリを採用することを選択できます。これにより、pomが簡素化されます。
org.jboss.resteasy
resteasy-jaxrs
${resteasy.version}
jboss-deployment-structure.xmlは不要になっていることに注意してください。
3. サーバーサイドコード
3.1. サーブレットバージョン3 web.xml
ここで、単純なプロジェクトのweb.xmlを簡単に見てみましょう。
RestEasy Example
resteasy.servlet.mapping.prefix
/rest
resteasy.servlet.mapping.prefixは、APIアプリケーションへの相対パスを付加する場合にのみ必要です。
この時点で、resteasyservlet-initializerがpom.xmlの依存関係として追加されているため、web.xmlでServletを宣言していないことに注意することが非常に重要です。 。 その理由は– RESTEasyはjavax.server.ServletContainerInitializerを実装するorg.jboss.resteasy.plugins.servlet.ResteasyServletInitializerクラスを提供します。
ServletContainerInitializerは初期化子であり、サーブレットコンテキストの準備が整う前に実行されます。この初期化子を使用して、アプリのサーブレット、フィルター、またはリスナーを定義できます。
3.2. アプリケーションクラス
javax.ws.rs.core.Applicationクラスは、デプロイメントに関する情報を提供するために実装できる標準のJAX-RSクラスです。
@ApplicationPath("/rest")
public class RestEasyServices extends Application {
private Set
ご覧のとおり、これはすべてのJAX-RSルートリソースとプロバイダーを一覧表示する単なるクラスであり、@ApplicationPathアノテーションが付けられています。
クラスおよびシングルトンの空のセットを返すと、WARがスキャンされてJAX-RSアノテーションリソースとプロバイダークラスがスキャンされます。
3.3. サービス実装クラス
最後に、ここで実際のAPI定義を見てみましょう。
@Path("/movies")
public class MovieCrudService {
private Map inventory = new HashMap();
@GET
@Path("/getinfo")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) {
if (inventory.containsKey(imdbId)) {
return inventory.get(imdbId);
} else {
return null;
}
}
@POST
@Path("/addmovie")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response addMovie(Movie movie) {
if (null != inventory.get(movie.getImdbId())) {
return Response
.status(Response.Status.NOT_MODIFIED)
.entity("Movie is Already in the database.").build();
}
inventory.put(movie.getImdbId(), movie);
return Response.status(Response.Status.CREATED).build();
}
}
4. 結論
このクイックチュートリアルでは、RESTEasyを紹介し、それを使用して非常にシンプルなAPIを構築しました。
この記事で使用されている例は、sample project in GitHubとして利用できます。