Jersey勉強会

2,098 views

Published on

アプレッソ開発部
部内勉強会

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,098
On SlideShare
0
From Embeds
0
Number of Embeds
188
Actions
Shares
0
Downloads
19
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Jersey勉強会

  1. 1. Jersey勉強会 -サクサク分かるRESTfulなWebアプリの作り 方 開発部 土岐
  2. 2. RESTとは
  3. 3. Representational State Transfer リソース(URI)に対してうんたら するアーキテクチャスタイル
  4. 4. 例えば • 特定のユーザーを削除するときの呼び出 し方 • http://test.com/deletePerson(パラメータで ID指定) – RESTfulではなくてダサい • http://test.com/person/toki (DELETEメソッド を指定) – RESTfulでかっこいい
  5. 5. リソースとは • リソースとは、Web上の情報である • 世界中の無数のリソースは、それぞれURI で一意な名前を持つ • プログラムはURIに対してアクセスして各 種処理を行う [参考文献] 『Webを支える技術』 山本陽平著技術評 論社
  6. 6. JAX-RS • JSR-311で定義された、JavaでRESTアーキテクチャに則った Webサービスを提供するための試用 • 準拠したものとして以下のものがある – Jersey • Oracleによるリファレンス実装 – Apache CXF • Apacheプロジェクト(もともと別プロジェクト?) – Apache Wink • Apacheプロジェクト – RESTEasy • JBOSSプロジェクト – Restlet • JAX-RS以前からあるRESTライブラリ • いろいろあるけど、Jerseyが一番情報も多いし無難っぽいので Jerseyをとりあえず取り上げます
  7. 7. やってみよう
  8. 8. 事前準備 • プロジェクトの作成 • Jerseyライブラリ追加 – asm-3.3.1.jar – jersey-bundle-1.12.jar – jersey-core-1.12.jar – jersey-multipart-1.12.jar • JettyのWebAppとして登録
  9. 9. サーブレットディスパッチャー 登録 web.xmlに追加 <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer ←ディスパッチャのサーブレット(固 定) </servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>resttest</param-value> ←リソース(処理を記述するJavaクラス)のパッケー ジ名 </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> ←ディスパッチするURLパターン </servlet-mapping>
  10. 10. 後はJerseyが勝手にリソースと なるクラスを見つけてくれ る!
  11. 11. GETで プレーンテキストを返す例
  12. 12. @Path("/hello") public class HelloWorld { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "Hello World"; } }
  13. 13. ポイント • @Pathでパスを指定 – これを指定しているクラスをJerseyがリソース とみなす • @GETでメソッド指定 – 指定されたHTTPメソッドをここで受け入れる • @ProducesでレスポンスのMIMEタイプを 指定
  14. 14. POSTでJSONデータを送り ユーザー登録を行う例
  15. 15. @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public PersonModel createPersonJson(PersonModel person) { person.setName("JSON呼び出し!"); return person; }
  16. 16. ポイント • @Consumesで受け入れるContent-Typeを指 定 • JAXBを使用したバインディングで、 JavaBeanのオブジェクトのやり取りが可能 – JSON、XMLなどの表現形式を意識しなくてい い! – JAXBに関しては深くは触れません
  17. 17. PathParamを受け取って削除する 例 (/person/tokiにDELETEでアクセスみたいな感じ)
  18. 18. @DELETE @Path("{name}") public void detelePerson(@PathParam("name") String name) { System.out.println(name); }
  19. 19. ポイント • @PathParamで、アクセスされたURI内のパ ラメータにアクセス可能 – 予め@Pathで変数宣言をしておく • 同じような感じで@FormParamでフォーム のパラメータにアクセス可能
  20. 20. その他 • 返却するオブジェクトはJavaBean、String の他、OutputStreamやバイト配列も可能 – OutputStreamはStreamingOutputにラップして 返す • ServletResponseやServletContextにアクセス する場合は@Contextアノテーションを宣 言する – フィールド、引数どちらでも可
  21. 21. まとめ • 設定は最小限、ほとんどアノテーション で作っていく – 設定ファイル地獄からの解放→今っぽい – 複雑なことをやろうとすると、いろいろと方 法が用意されていて良く出来てるなーという 印象 • JAXBバインディング便利 – ただXMLとJSONの微妙な表現の違いとかで悩 みそう

×