JBossでRESTful APIを作ってみる
はじめに
JBossつったら、SOAPだろ。と思っておりました。
とある事情でRESTful APIを作らねばならなくなりました…
RESTful対応するには
javax.ws.rs.core.Applicationを継承したクラスを作る。
@ApplicationPath("/api") public class RestApplication extends javax.ws.rs.core.Application {}
ApplicationPathのアノテーションを付けたパス以下がRESTfulになります。
web.xmlにjavax.ws.rs.core.Applicationのservlet-mappingを追加する。
<servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping>
url-patternのパスがRESTfulになります。
どちらか対応すればよいです。
APIクラス
HTTPメソッドのアノテーションをつければAPIになります。
@Path("/") public class Api { @GET @Path("/hoge") public String Hoge(@QueryParam("key") String key) { return "input key=" + key; } }
@Pathや@QueryParamアノテーションを付けると、メソッド名や変数名に関係なくパスやパラメーターが設定できます。
APIパラメーター
@QueryParam
URLのクエリーパラメーターから設定されます。
/api/hoge?key=value
@FormParam
HTMLのformの値から設定されます。(POSTのみ。)
<form><input type=”text” name=”key”></form>
その他
@PathParamや@HeaderParamなんかもあるそうです。
HTTPステータスコードを設定
メソッドの戻り値をjavax.ws.rs.core.Responseに変更し、statusメソッドで設定する。
public Response Hoge(@QueryParam("key") String key) { return Response.status(Status.INTERNAL_SERVER_ERROR).build(); }
ステータスコードと共にテキストを設定したい場合は、entityメソッドで設定すればよい。
public Response Hoge(@QueryParam("key") String key) { return Response.status(Status.INTERNAL_SERVER_ERROR).entity("内部エラー").type(MediaType.TEXT_PLAIN).build(); }
まとめ
案外難しくないなーと思いました。
このままだと、パラメーターがUTF-8になってなかったりしますが…
RESTful APIだとHTTPステータスコードも重要なので、Response返すようにした方が良さそうかなと感じました。