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返すようにした方が良さそうかなと感じました。