2. l RESTfulサービスはRESTサービスとも呼ばれる
l 昨今のエンタープライズプロジェクトで使⽤される⼀般的なアーキテク
チャスタイルになっている
l REST( Representational State Transfer)という⾔葉は、Roy
Fielding博⼠が2000年に発表した論⽂にあった
l https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
l RESTサービスは最新のWebサービスとも考えられる。APIはRESTfulで
HTTPベースであるため、Web上で簡単に利⽤できる。
(SOAP Webサービスは7章を参照)
RESTful servicesとは
20192
14. XMLの代わりに、JSONでリクエスト・レスポンスの場合は、以下の2点を修正だけ
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
201914
1. 依存ライブラリ(pom.xml)の追加
• to support json
• org.apache.cxf:cxf-rt-rs-extension-providers
• to use Jackson
• com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
2. RESTサービス起動するmainクラス(RestOrderServer.java)の修正
CXFはクラスパスのJSONプロバイダ
を⾃動発⾒してくれないので、 CXF関
連の初期化時、明⽰的にJacksonを
JSONプロバイダとして使うように
セットアップする
15. l メリット
l JAX-RS標準的な⽅法
l Apache CXF-RSは定評のあるRESTライブラリ
l 開発者はソースコードを変更して完全に制御できる
l デメリット
l Javaコードを書かずにRESTサービスを定義できない
l Camelに統合されていない
l CXF-RSの設定が簡単ではない(特にHTTPサーバ周り、SSLなど)
l “CXF in Action”という本が出版されてない
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
201915
16. JVM
l 仕組み
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201916
CXF Camelルート
REST
Client
REST
Order
Service
getOrder
<Camel Route>direct:xxxhttp
createOrder
<Camel Route>
updateOrder
<Camel Route>
cancelOrder
<Camel Route>
…
producer.requestBody(“direct:xxx”, …);
…
17. l プロジェクトの構成
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201917
1. 依存ライブラリの定義
(Camelの依存ライブラリを追加)
2. データモデルの定義(⽅法1同様)
3. RESTサービスのJava Interfaceの定義(⽅法1同様)
4. RESTサービスのの定義
(Camelルートへ送信するように変更)
6. RESTサービス起動するmainクラス
(Camel関連の初期化を追加)
(番号は開発順)
5. サービス中⾝(Camelルート)の実装
(Camelルートで処理ロジックを実装)
18. 1. 依存ライブラリ(pom.xml)
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201918
• Cxf
• org.apache.cxf:cxf-core
• org.apache.cxf:cxf-rt-frontend-jaxrs
• Cxf http/jetty server
• org.apache.cxf:cxf-rt-transports-http
• org.apache.cxf:cxf-rt-transports-http-jetty
• Logging
• org.slf4j:slf4j-log4j12
• log4j:log4j
• Camel
• org.apache.camel:camel-core
19. 4. RESTサービスの定義(RestOrderService.java)
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201919
Camelルートへ送信するため、
ProducerTemplateを注⼊のため、メ
ソッドを⽤意する
注⼊されたProducerTemplateを使って、
Camel directコンポーネントで送信する
Camelの処理結果のBodyをorderに格納する
20. 5. サービス中⾝(Camelルート)の実装 (OrderRoute.java)
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201920
Java DSLの実装のため、RouteBuilderを
継承する
Camelルートの実装。
便利上、⽅式1で実装した
DummyOrderServiceをBeanとして
再利⽤しているが、本当はどんな
Camelルートでも可能。
22. l メリット
l JAX-RS標準的な⽅法
l Apache CXF-RSは定評のあるRESTライブラリ
l 開発者はソースコードを変更して完全に制御できる
l Camelが統合されている
l デメリット
l Javaコードを書かずにRESTサービスを定義できない
l Camelに統合されていない
l CXF-RSの設定が簡単ではない(特にHTTPサーバ周り、SSLなど)
l 起動時にCamelとCXF双⽅のセットアップが必要
l “CXF in Action”という本が出版されてない
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201922
業務ロジック上で他システムと連携がある
場合、このメリットが⼤きい。Camelコン
ポーネントが使えるから。
23. JVM
l 仕組み
REST実装⽅式3. Camel Restlet component
<10.1.4 Using camel-restlet with REST services>
201923
Camelルート
REST
Client
Camel-
restlet
http
getOrder
<Camel Route>
createOrder
<Camel Route>
updateOrder
<Camel Route>
cancelOrder
<Camel Route>
get
例:
<from
uri=“restlet:http://0.0.0.0:8080/orders/{id}/restletMethod=get”/>
24. l プロジェクトの構成
REST実装⽅式3. Camel Restlet component
<10.1.4 Using camel-restlet with REST services>
201924
1. 依存ライブラリの定義
(Camelの依存ライブラリを追加)
2. データモデルの定義(⽅法1同様)
(番号は開発順)
4. サービス中⾝(Camelルート)の実装
(Camelルートで処理ロジックを実装)
3. RESTサービスのJava Interfaceの定義(⽅法1同様)
27. l メリット
l 少ないコードで実装可能
l Javaコードを書かずにRESTサービスも実装可能(XML DSL)
l Restletは2008年からCamel部品として提供され、枯れてる
l Camelが統合されている
l デメリット
l JAX-RS準拠の⽅法ではない
l XML扱う場合が簡単だが、JSON扱う場合は追加の設定が必要
REST実装⽅式3. Camel Restlet component
<10.1.4 Using camel-restlet with REST services>
201927
業務ロジック上で他システムと連携がある
場合、このメリットが⼤きい。Camelコン
ポーネントが使えるから。
Camel Context起動前に、以下のように、camel-jacksonコンポーネントを”fallback
type converter”として有効化する必要がある。
context.getProperties().put("CamelJacksonEnableTypeConverter", "true");
context.getProperties().put("CamelJacksonTypeConverterToPojo", "true");
⽅法1のように、RESTサービス定義
(RestOrderService.java)がないこと
33. l メリット
l 少ないコードで実装可能
l JAX-RS準拠の⽅法である
l Apache CXF-RSは定評のあるRESTライブラリ
l 開発者はソースコードを変更して完全に制御できる
l Camelが統合されている
l デメリット
l Javaコーディングが必須
l CXF-RSの設定が簡単ではない(特にHTTPサーバ周り、SSLなど)
l “CXF in Action”という本が出版されてない
REST実装⽅式4. Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
201933
業務ロジック上で他システムと連携がある
場合、このメリットが⼤きい。Camelコン
ポーネントが使えるから。
JAX-RS準拠のRESTサービス定義が
Javaコーディング必要
35. l メリット
l 少ないコードで実装可能
l Javaコードを書かずにRESTサービスも実装可能(XML DSL)
l OpenAPI準拠、Swaggerと連携可能
l Http ServerとServletを選択可能
(例: Undertow, Spark-rest, JavaEE server)
l 開発者はソースコードを変更して完全に制御できる
l Camelが統合されている
l デメリット
l REST DSLの記述⽅法の習得
REST実装⽅式5. Camel REST DSL
<10.2 The Camel Rest DSL>
201935