magazine.gif JavaによるRESTfulシステム構築

第1部 RESTとJAX-RS標準
1章 RESTについて

  • 1.1 RESTとHTTPの再生
  • 1.2 RESTfulアーキテクチャの原則
    • 1.2.1 アドレス可能性
    • 1.2.2 制約された統一インターフェイス
    • 1.2.3 統一インターフェイスがなぜ重要なのか
    • 1.2.4 表現指向
    • 1.2.5 ステートレスな通信
    • 1.2.6 HATEOAS
  • 1.3 まとめ

2章 RESTfulサービスの設計

  • 2.1 オブジェクトモデル
  • 2.2 URIのモデル化
  • 2.3 データフォーマットの定義
    • 2.3.1 読み取りと更新のフォーマット
    • 2.3.2 作成のフォーマット
  • 2.4 HTTPメソッドの割り当て
    • 2.4.1 全オーダー、全顧客、全製品の参照
    • 2.4.2 各オーダー別、各顧客別、各製品別のデータの取得
    • 2.4.3 オーダー、顧客、製品の作成
    • 2.4.4 オーダー、顧客、製品の更新
    • 2.4.5 オーダー、顧客、製品の削除
    • 2.4.6 オーダーのキャンセル
  • 2.5 まとめ

3章 初めてのJAX-RSサービス

  • 3.1 JAX-RS RESTfulサービスの開発
    • 3.1.1 Customer: データクラス
    • 3.1.2 CustomerResource: JAX-RSサービス
    • 3.1.3 JAX-RSとJavaインターフェイス
    • 3.1.4 継承
  • 3.2 サービスのデプロイ
    • 3.2.1 サーブレットコンテナへのデプロイメント
  • 3.3 まとめ

4章 HTTPメソッドとURIマッチング

  • 4.1 HTTPメソッドのバインド
    • 4.1.1 HTTPメソッドの拡張
  • 4.2 @Path
    • 4.2.1 URIのバインド
    • 4.2.2 @Path表現
    • 4.2.3 マトリックスパラメータ
  • 4.3 サブリソースロケータ
    • 4.3.1 フルダイナミックディスパッチ
  • 4.4 まとめ

5章 JAX-RSインジェクション

  • 5.1 基本
  • 5.2 @PathParam
    • 5.2.1 複数のパスパラメータ
    • 5.2.2 パスパラメータのスコープ(範囲)
    • 5.2.3 PathSegmentとマトリックスパラメータ
    • 5.2.4 プログラミングによるURI情報の取得
  • 5.3 @MatrixParam
  • 5.4 @QueryParam
    • 5.4.1 プログラミングによるクエリパラメータ情報の取得
  • 5.5 @FormParam
  • 5.6 @HeaderParam
    • 5.6.1 生のヘッダ
  • 5.7 @CookieParam
  • 5.8 共通の機能
    • 5.8.1 自動的なJava型変換
    • 5.8.2 @DefaultValue
    • 5.8.3 @Encoded
  • 5.9 まとめ

6章 JAX-RSコンテンツハンドラ

  • 6.1 組み込みのコンテンツマーシャリング
    • 6.1.1 javax.ws.rs.core.StreamingOutput
    • 6.1.2 java.io.InputStream、java.io.Reader
    • 6.1.3 java.io.File
    • 6.1.4 byte[]
    • 6.1.5 String、char[]
    • 6.1.6 MultivaluedMapとフォーム入力
    • 6.1.7 javax.xml.transform.Source
  • 6.2 JAXB
    • 6.2.1 JAXBについて
    • 6.2.2 JAXB JAX-RSハンドラ
    • 6.2.3 JAXBとJSON
    • 6.2.4 JSONとJSONスキーマ
  • 6.3 カスタムマーシャリング
    • 6.3.1 MessageBodyWriter
    • 6.3.2 MessageBodyReader
    • 6.3.3 ライフサイクルと環境
  • 6.4 まとめ

7章 レスポンスコード、複雑なレスポンス、そして例外処理

  • 7.1 デフォルトのレスポンスコード
    • 7.1.1 成功時のレスポンス
    • 7.1.2 エラー時のレスポンス
  • 7.2 複雑なレスポンス
    • 7.2.1 Cookieを返す
    • 7.2.2 Status列挙型
    • 7.2.3 javax.ws.rs.core.GenericEntity
  • 7.3 例外処理
    • 7.3.1 javax.ws.rs.WebApplicationException
    • 7.3.2 例外マッピング
  • 7.4 まとめ

8章 HTTPコンテンツネゴシエーション

  • 8.1 Connegについて
    • 8.1.1 優先順位
  • 8.2 言語のネゴシエーション
  • 8.3 エンコードのネゴシエーション
  • 8.4 JAX-RSとConneg
    • 8.4.1 メソッドディスパッチ
    • 8.4.2 ConnegとJAXBを利用する
    • 8.4.3 複雑なネゴシエーション
    • 8.4.4 URIパターンによるネゴシエーション
  • 8.5 コンテンツネゴシエーションの活用
    • 8.5.1 新しいメディアタイプを作成する
    • 8.5.2 柔軟性のあるスキーマ
  • 8.6 まとめ

9章 HATEOAS

  • 9.1 HATEOASとWebサービス
    • 9.1.1 Atomリンク
    • 9.1.2 WebサービスでHATEOASを使用する利点
    • 9.1.3 リンクヘッダとAtomリンク
  • 9.2 HATEOASとJAX-RS
    • 9.2.1 UriBuilderを使用したURIの構築
    • 9.2.2 UriInfoを使用した相対URI
  • 9.3 まとめ

10章 JAX-RSアプリケーションをスケールする

  • 10.1 キャッシング
    • 10.1.1 HTTPキャッシング
    • 10.1.2 Expiresヘッダ
    • 10.1.3 Cache-Control
    • 10.1.4 再検証と条件付きGET
  • 10.2 同時並行性
    • 10.2.1 JAX-RSと条件付き更新
  • 10.3 まとめ

11章 デプロイメントと統合

  • 11.1 デプロイメント
    • 11.1.1 Applicationクラス
    • 11.1.2 JAX-RS非対応コンテナ内のデプロイメント
    • 11.1.3 JAX-RS対応コンテナ内のデプロイメント
    • 11.1.4 Java EE 6内のデプロイメント
  • 11.2 設定
    • 11.2.1 従来のJava EEコンテナ
    • 11.2.2 Java EE 6コンテナ内のデプロイメント
  • 11.3 EJBとの統合
  • 11.4 Springとの統合
  • 11.5 まとめ

12章 JAX-RSのセキュア化

  • 12.1 認証
    • 12.1.1 ベーシック認証
    • 12.1.2 ダイジェスト認証
    • 12.1.3 クライアント証明書による認証
  • 12.2 認可
  • 12.3 JAX-RSにおける認証と認可
    • 12.3.1 暗号化の実施
    • 12.3.2 認可に関するアノテーション
    • 12.3.3 プログラミングによるセキュリティの強化
  • 12.4 まとめ

13章 RESTful Javaクライアント

  • 13.1 java.net.URL
    • 13.1.1 キャッシング
    • 13.1.2 認証
    • 13.1.3 利点と欠点
  • 13.2 Apache HttpClient
    • 13.2.1 認証
    • 13.2.2 利点と欠点
  • 13.3 RESTEasyクライアントフレームワーク
    • 13.3.1 認証
    • 13.3.2 利点と欠点
  • 13.4 RESTEasyクライアントプロキシ
    • 13.4.1 利点と欠点
  • 13.5 まとめ

14章 JAX-RS実装

  • 14.1 Jersey
    • 14.1.1 組み込み可能なJersey
    • 14.1.2 クライアントAPI
    • 14.1.3 WADL
    • 14.1.4 データフォーマット
    • 14.1.5 MVC(モデル、ビュー、コントローラ)
    • 14.1.6 コンポーネント統合
  • 14.2 Apache CXF
    • 14.2.1 リクエストパラメータをbeanに集約する
    • 14.2.2 特定の型へのリクエストパラメータ変換
    • 14.2.3 サブリソースの静的な解決
    • 14.2.4 クライアントAPI
    • 14.2.5 JAX-RSアノテーションなしでのサービスのサポート
    • 14.2.6 リクエストとレスポンスの横取り
    • 14.2.7 ファーストクラス市民としてのXSLTとXPathの使用を奨励
    • 14.2.8 保留呼び出しのサポート
    • 14.2.9 マルチパートフォーマットのサポート
    • 14.2.10 分散OSGi RIとの統合
    • 14.2.11 WADLのサポート
    • 14.2.12 コンポーネント統合
  • 14.3 JBoss RESTEasy
    • 14.3.1 組み込みコンテナ
    • 14.3.2 非同期HTTP
    • 14.3.3 インターセプターフレームワーク
    • 14.3.4 クライアント「ブラウザ」キャッシュ
    • 14.3.5 サーバーサイドキャッシング
    • 14.3.6 GZIP圧縮
    • 14.3.7 データフォーマット
    • 14.3.8 コンポーネント統合
  • 14.4 まとめ

第2部 JAX-RSワークブック
15章 ワークブックについて

  • 15.1 RESTEasyとサンプルコードのインストール
  • 15.2 サンプルコードの実行に必要な要件と構造
    • 15.2.1 サンプルコードのディレクトリ構造
    • 15.2.2 環境の設定

16章 3章のサンプルコード

  • 16.1 サンプルプログラムのビルドと実行
    • 16.1.1 pom.xmlの解説
    • 16.1.2 ビルドの実行
  • 16.2 ソースコードをチェックする

17章 4章のサンプルコード

  • 17.1 サンプルex04_1: HTTPメソッド拡張
    • 17.1.1 サンプルプログラムのビルドと実行
    • 17.1.2 サーバーコード
    • 17.1.3 クライアントコード
  • 17.2 サンプルex04_2:正規表現を用いた@Path
    • 17.2.1 サンプルプログラムのビルドと実行
    • 17.2.2 サーバーコード
    • 17.2.3 クライアントコード
  • 17.3 サンプルex04_3:サブリソースロケータ
    • 17.3.1 サンプルプログラムのビルドと実行
    • 17.3.2 サーバーコード
    • 17.3.3vクライアントコード

18章 5章のサンプルコード

  • 18.1 サンプルex05_1:URI情報のインジェクション
    • 18.1.1 サーバーコード
    • 18.1.2 クライアントコード
    • 18.1.3 サンプルプログラムのビルドと実行
  • 18.2 サンプルex05_2:フォームとCookie
    • 18.2.1 サーバーコード
    • 18.2.2 サーバー設定
    • 18.2.3 サンプルプログラムのビルドと実行

19章 6章のサンプルコード

  • 19.1 サンプルex06_1:JAXBの使用
    • 19.1.1 クライアントコード
    • 19.1.2 pom.xmlへの変更
    • 19.1.3 サンプルプログラムのビルドと実行
  • 19.2 サンプルex06_2:コンテンツハンドラの作成
    • 19.2.1 コンテンツハンドラコード
    • 19.2.2 リソースクラス
    • 19.2.3 アプリケーションクラス
    • 19.2.4 クライアントコード
    • 19.2.5 サンプルプログラムのビルドと実行

20章 7章のサンプルコード

  • 20.1 サンプルex07_1:ExceptionMapper
  • 20.1.1 クライアントコード
  • 20.1.2 サンプルプログラムのビルドと実行

21章 8章のサンプルコード

  • 21.1 サンプルex08_1:JAX-RSを使用したconneg
    • 21.1.1 クライアントコード
    • 21.1.2 サンプルプログラムのビルドと実行
  • 21.2 サンプルex08_2:URLパターンを使用したConneg
    • 21.2.1 サーバーコード
    • 21.2.2 サンプルプログラムのビルドと実行

22章 9章のサンプルコード

  • 22.1 サンプルex09_1:Atomリンク
    • 22.1.1 サーバーコード
    • 22.1.2 クライアントコード
    • 22.1.3 サンプルプログラムのビルドと実行
  • 22.2 サンプルex09_2:リンクヘッダ
    • 22.2.1 サーバーコード
    • 22.2.2 クライアントコード
    • 22.2.3 サンプルプログラムのビルドと実行

23章 10章のサンプルコード

  • 23.1 サンプルex10_1:キャッシングと同時並行の更新
    • 23.1.1 サーバーコード
    • 23.1.2 クライアントコード
    • 23.1.3 サンプルプログラムのビルドと実行

24章 11章のサンプルコード

  • 24.1 サンプルex11_1:EJBとJAX-RS
    • 24.1.1 プロジェクト構造
    • 24.1.2 EJBプロジェクト
    • 24.1.3 WARプロジェクト
    • 24.1.4 EARプロジェクト
    • 24.1.5 サンプルプログラムのビルドと実行
  • 24.2 サンプルex11_2:SpringとJAX-RS
    • 24.2.1 サンプルプログラムのビルドと実行