JavaによるRESTfulシステム構築

[cover photo]
TOPICS
Web , Java
発行年月日
PRINT LENGTH
348
ISBN
978-4-87311-467-5
原書
RESTful Java with JAX-RS
FORMAT
Print PDF
Ebook
3,520円
Ebookを購入する
Print
3,520円

Java EE 6でサポートされたJAX-RSの特徴とRESTfulアーキテクチャ原則を使って、Javaでの分散Webサービスを設計開発する方法を学ぶ書籍。理論よりも実装に焦点を当て、RESTのアーキテクチャから実装までを豊富なサンプルコードとともに解説します。前半では、URIの決定方法、HTTPコンテンツネゴシエーション、HATEOASなどRESTとJAX-RSの概要について解説し、後半のワークブックでは、前半の技術解説で取り上げた設定、実行などを例題と共に学習します。JAX-RS仕様の解説と具体的な利用例からなる本書を読むことで、Javaの新しいデザイン手法であるアノテーションやインジェクションなどについても自然と学ぶことができるでしょう。柔軟なAPIを提供するJAX-RSを題材にRESTについて学べる本書は、Javaの最新動向を学習したいプログラマ/設計者必携の一冊です。

目次

目次

まえがき
はじめに

第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<String, String>とフォーム入力
        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.3 クライアントコード

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 サンプルプログラムのビルドと実行

監訳者あとがき
索引