ブログ

JBossでRESTful APIを作ってみる

2017年12月18日 09:00 | ブログ | | 248 views

このエントリーをはてなブックマークに追加
はてなブックマーク - JBossでRESTful APIを作ってみる
reddit にシェア
Pocket
LINEで送る

はじめに

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