和歌山のプログラミング・システム開発ならシステムキューブ
JBossつったら、SOAPだろ。と思っておりました。
とある事情でRESTful APIを作らねばならなくなりました…
@ApplicationPath("/api") public class RestApplication extends javax.ws.rs.core.Application {}
ApplicationPathのアノテーションを付けたパス以下がRESTfulになります。
<servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping>
url-patternのパスがRESTfulになります。
HTTPメソッドのアノテーションをつければAPIになります。
@Path("/") public class Api { @GET @Path("/hoge") public String Hoge(@QueryParam("key") String key) { return "input key=" + key; } }
@Pathや@QueryParamアノテーションを付けると、メソッド名や変数名に関係なくパスやパラメーターが設定できます。
URLのクエリーパラメーターから設定されます。
/api/hoge?key=value
HTMLのformの値から設定されます。(POSTのみ。)
<form><input type=”text” name=”key”></form>
@PathParamや@HeaderParamなんかもあるそうです。
メソッドの戻り値を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返すようにした方が良さそうかなと感じました。