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

Más contenido relacionado

Destacado (7)

RESTful API 入門
RESTful API 入門RESTful API 入門
RESTful API 入門
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
AWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイントAWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイント
 
RESTfulとは
RESTfulとはRESTfulとは
RESTfulとは
 
Javaユーザに伝えたいselenide入門
Javaユーザに伝えたいselenide入門Javaユーザに伝えたいselenide入門
Javaユーザに伝えたいselenide入門
 

Similar a Jersey勉強会

OSS ソースコードサーチツールの効能、有効活用方法
OSS ソースコードサーチツールの効能、有効活用方法OSS ソースコードサーチツールの効能、有効活用方法
OSS ソースコードサーチツールの効能、有効活用方法
Open Source Software Association of Japan
 
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
MasayukiIke
 
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
Code4Lib JAPAN
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
Shin Ise
 

Similar a Jersey勉強会 (20)

ITフォーラム2024 AITCセッション(4)
ITフォーラム2024 AITCセッション(4)ITフォーラム2024 AITCセッション(4)
ITフォーラム2024 AITCセッション(4)
 
リソースモデリングパターンの提案 #sendagayarb
リソースモデリングパターンの提案 #sendagayarbリソースモデリングパターンの提案 #sendagayarb
リソースモデリングパターンの提案 #sendagayarb
 
OSS ソースコードサーチツールの効能、有効活用方法
OSS ソースコードサーチツールの効能、有効活用方法OSS ソースコードサーチツールの効能、有効活用方法
OSS ソースコードサーチツールの効能、有効活用方法
 
Kspin20121201 kobayashi
Kspin20121201 kobayashiKspin20121201 kobayashi
Kspin20121201 kobayashi
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
 
Power Query Online
Power Query OnlinePower Query Online
Power Query Online
 
DOIって何?(図書館総合展2012版)
DOIって何?(図書館総合展2012版)DOIって何?(図書館総合展2012版)
DOIって何?(図書館総合展2012版)
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
 
OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
 
DOI勉強会@nii
DOI勉強会@niiDOI勉強会@nii
DOI勉強会@nii
 
スキーマとURI
スキーマとURIスキーマとURI
スキーマとURI
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
全文検索入門
全文検索入門全文検索入門
全文検索入門
 
データベース入門
データベース入門データベース入門
データベース入門
 
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
 
Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
Scis2015 ruo ando_2015-01-20-01
Scis2015 ruo ando_2015-01-20-01Scis2015 ruo ando_2015-01-20-01
Scis2015 ruo ando_2015-01-20-01
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
AWSの最新動向と事例から知る クラウド利用の進化と真価
AWSの最新動向と事例から知る クラウド利用の進化と真価AWSの最新動向と事例から知る クラウド利用の進化と真価
AWSの最新動向と事例から知る クラウド利用の進化と真価
 

Más de Appresso Engineering Team

Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44
Appresso Engineering Team
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42
Appresso Engineering Team
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40
Appresso Engineering Team
 

Más de Appresso Engineering Team (20)

20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)
 
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78
 
Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75
 
マルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Executionマルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Execution
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
 
JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値
 
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加
 
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70
 
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68
 
Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73
 
Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)
 
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65
 
Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62
 
Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59
 
Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目49-52Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目49-52
 
Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48
 
Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56
 
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40
 

Jersey勉強会