SlideShare a Scribd company logo
1 of 35
Download to read offline
Camel In Action 2nd edition 読書会
10.1 RESTful services
2019年11⽉19⽇
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
l アドレス指定可能なURIで公開されていること
l インターフェース(HTTPメソッドの利⽤)の統⼀がされていること
l ステートレスであること
l 処理結果がHTTPステータスコードで通知されること
l サーバが処理結果のキャッシュできること(オプション)
RESTサービスの設計原則
20193
ファーストステップ、設計結果の例:
(The RESTful API for the Rider Auto Parts order web service )
l RESTサービスの実装は、多くな⽅法があるが、本書では以下の5つ
の⽅式を使って説明している
RESTサービスの実装⽅式
20194
# 実装⽅式 概要
1 Apache CXF
<10.1.2 Using JAX-RS with REST services>
Camelコンポーネントを使わず、CXFのみ
で実装する⽅法
2 Apache CXF with Camel
<10.1.3 Using Camel in an existing JAX-RS
application>
CXFでREST送受信を⾏い、処理ロジックの
部分はCamelルートに任せる⽅法
3 Camel Restlet component
<10.1.4 Using camel-restlet with REST
services>
最も簡易なCamelコンポーネントcamel-
restletを使って実装する⽅法
4 Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
Camelコンポーネントcamel-cxfを使った
実装する⽅法
5 Camel REST DSL
**こっちが推奨**
<10.2 The Camel Rest DSL>
Camel DSLを使って、REST専⽤⾔語
(REST DSL)で定義及び実装する⽅法
JVM
l 仕組み
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
20195
CXF
REST
Client
REST
Order
Service
getOrder()
<Method>http
createOrder()
<Method>
updateOrder()
<Method>
cancelOrder()
<Method>
l プロジェクトの構成
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
20196
1. 依存ライブラリの定義
2. データモデルの定義
3. RESTサービスのJava Interfaceの定義
4. RESTサービスのの定義
6. RESTサービス起動するmainクラス
(番号は開発順)
5. サービス中⾝(処理ロジック)の実装
1. 依存ライブラリ(pom.xml)
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
20197
• 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
2. データモデルの定義(Order.java)
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
20198
このサンプルはXMLを扱うため、JAXB
のアノテーションで定義している
3. RESTサービスのJava Interfaceの定義(OrderService.java)
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
20199
標準なJava InterfaceでRESTサービス
のOperationを羅列する
4. RESTサービスの定義(RestOrderService.java)
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
201910
RESTサービスのベースパス
応答のコンテンツタイプ - XML
サービス中⾝(処理ロジック)実装の注⼊
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
201911
個々のOperationの定義
4. RESTサービスの定義(RestOrderService.java)
HTTPメソッド – GET/PUT/POST/DELETE パスパラメータ –実⾏時idが⾃動
的にorderIdにマップされる
パスパラメータ –実⾏時idが⾃動
的にorderIdにマップされる
サービス実装を呼び出し
Orderを⾒つかった場合、okステータ
ス(200)、及びOrderを返す
Orderを⾒つからなかった場合、not
foundステータス(404) を返す
5. サービス中⾝(処理ロジック)の実装 (DummyOrderService.java)
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
201912
RESTサービスのJava Interfaceを実装
CXF, JAX-RSなど依存しないのPOJOで
実装可能
6. RESTサービス起動するmainクラス(RestOrderServer.java)
REST実装⽅式1. Apache CXFのみの実装⽅法
<10.1.2 Using JAX-RS with REST services>
201913
サービス中⾝(処理ロジック)の初期化
RESTサービス定義の初期化
CXF関連の初期化
CXFサーバの起動
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プロバイダとして使うように
セットアップする
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
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”, …);
…
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ルートで処理ロジックを実装)
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
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に格納する
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ルートでも可能。
6. RESTサービス起動するmainクラス(RestOrderServer.java)
REST実装⽅式2. Apache CXF with Camelの実装⽅法
<10.1.3 Using Camel in an existing JAX-RS application>
201921
CamelのProducerTemplateをRESTサービスに
注⼊する
CXF及びRESTサービスの初期化の前に、
CamelコンテキストとProducerTemplateを
初期化する
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コン
ポーネントが使えるから。
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”/>
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同様)
1. 依存ライブラリ(pom.xml)
REST実装⽅式3. Camel Restlet component
<10.1.4 Using camel-restlet with REST services>
201925
• Camel
• org.apache.camel:camel-core
• org.apache.camel:camel-restlet
• org.apache.camel:camel-jaxb (XML扱う場合)
• org.apache.camel:camel-Jackson (JSON扱う場合)
4. サービス中⾝(Camelルート)の実装(Camelルートで処理ロジックを実装)
REST実装⽅式3. Camel Restlet component
<10.1.4 Using camel-restlet with REST services>
201926
Java DSLの実装のため、RouteBuilderを
継承する
Camelルートの実装。
便利上、⽅式1で実装した
DummyOrderServiceをBeanとして
再利⽤しているが、本当はどんな
Camelルートでも可能。
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)がないこと
JVM
l 仕組み
REST実装⽅式4. Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
201928
Camelルート
REST
Client 振分⽤ルート
<Camel Route>
getOrder
<Camel Route>
createOrder
<Camel Route>
updateOrder
<Camel Route>
cancelOrder
<Camel Route>
Direct:xxx
例:
<from uri=“cxfrs:…”/>
<toD uri=“direct:${header.operationName}”>
l プロジェクトの構成
REST実装⽅式4. Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
201929
1. 依存ライブラリの定義
(Camelの依存ライブラリを追加)
2. データモデルの定義(⽅法1同様)
(番号は開発順)
5. サービス中⾝(Camelルート)の実装
(Camelルートで処理ロジックを実装)
3. RESTサービスのJava Interfaceの定義(⽅法1と同様)
4. RESTサービスのの定義
1. 依存ライブラリ(pom.xml)
REST実装⽅式4. Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
201930
• 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
• org.apache.camel:camel-cxf
4. RESTサービスの定義(RestOrderService.java)
REST実装⽅式4. Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
201931
JAX-RS準拠のRESTサービスの定義
• ベースパス情報
• 要求メッセージのコンテンツタイプ
• 応答メッセージのコンテンツタイプ
JAX-RS準拠のRESTサービスの定義
• Operation別の定義
• パラメータ情報
5. サービス中⾝(Camelルート)の実装(Camelルートで処理ロジックを実装)
REST実装⽅式4. Camel CXF REST component
<10.1.5 Using camel-cxf with REST services>
201932
Java DSLの実装のため、RouteBuilderを
継承する
実際のRESTサービス処理を⾏う
Camelルートの実装。
便利上、⽅式1で実装した
DummyOrderServiceをBeanとして
再利⽤しているが、本当はどんな
Camelルートでも可能。
Camel-cxfrsでリクエストを受付し
て、個々のCamel Routeへ振り分け
するルートの実装。
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コーディング必要
JVM
l 仕組み
REST実装⽅式5. Camel REST DSL
<10.2 The Camel Rest DSL>
201934
Camelルート
REST
Client REST DSL
getOrder
<Camel Route>
createOrder
<Camel Route>
updateOrder
<Camel Route>
cancelOrder
<Camel Route>
Direct:xxx
例:
<rest path="/orders">
<get uri="{id}" outType="camelinaction.Order">
<to uri=”direct:xxx"/>
</get>
</rest>
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

More Related Content

Similar to 10.1 res tful services

Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会Kazuya Sugimoto
 
SilverlightとSharePoint2010の紹介
SilverlightとSharePoint2010の紹介SilverlightとSharePoint2010の紹介
SilverlightとSharePoint2010の紹介Tadahiro Higuchi
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 Takakiyo Tanaka
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますfukuoka.ex
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」Kohsuke Kawaguchi
 
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」fukuoka.ex
 
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧Daisuke Nishino
 
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしいIBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしいK Kimura
 
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_studyBeginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_studyMasato Kawamura
 
Beginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_studyBeginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_studyGeorge Okada
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51Takakiyo Tanaka
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devKazuhiro Sera
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionGoh Matsumoto
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Kikunaga Taishi
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseMikio Hirabayashi
 

Similar to 10.1 res tful services (20)

Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会Web API(Dynamics 365 )勉強会
Web API(Dynamics 365 )勉強会
 
SilverlightとSharePoint2010の紹介
SilverlightとSharePoint2010の紹介SilverlightとSharePoint2010の紹介
SilverlightとSharePoint2010の紹介
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
 
PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
 
20120423 hbase勉強会
20120423 hbase勉強会20120423 hbase勉強会
20120423 hbase勉強会
 
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしいIBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
IBM Cloudant の細かすぎて伝わりにくい機能(その2) データの変更履歴が自動管理できるらしい
 
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_studyBeginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
 
Beginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_studyBeginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_study
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
 

More from Jian Feng

19. camel tooling
19. camel tooling19. camel tooling
19. camel toolingJian Feng
 
17. camel clustering
17. camel clustering17. camel clustering
17. camel clusteringJian Feng
 
15. running deploying camel
15. running deploying camel15. running deploying camel
15. running deploying camelJian Feng
 
13. parallel processing
13. parallel processing13. parallel processing
13. parallel processingJian Feng
 
11.6 camel error handling summary
11.6 camel error handling summary11.6 camel error handling summary
11.6 camel error handling summaryJian Feng
 
11.4 camel on exception
11.4 camel on exception11.4 camel on exception
11.4 camel on exceptionJian Feng
 
11.2 camel error handler
11.2 camel error handler11.2 camel error handler
11.2 camel error handlerJian Feng
 
10.2 camel rest dsl
10.2 camel rest dsl10.2 camel rest dsl
10.2 camel rest dslJian Feng
 

More from Jian Feng (8)

19. camel tooling
19. camel tooling19. camel tooling
19. camel tooling
 
17. camel clustering
17. camel clustering17. camel clustering
17. camel clustering
 
15. running deploying camel
15. running deploying camel15. running deploying camel
15. running deploying camel
 
13. parallel processing
13. parallel processing13. parallel processing
13. parallel processing
 
11.6 camel error handling summary
11.6 camel error handling summary11.6 camel error handling summary
11.6 camel error handling summary
 
11.4 camel on exception
11.4 camel on exception11.4 camel on exception
11.4 camel on exception
 
11.2 camel error handler
11.2 camel error handler11.2 camel error handler
11.2 camel error handler
 
10.2 camel rest dsl
10.2 camel rest dsl10.2 camel rest dsl
10.2 camel rest dsl
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

10.1 res tful services

  • 1. Camel In Action 2nd edition 読書会 10.1 RESTful services 2019年11⽉19⽇
  • 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
  • 3. l アドレス指定可能なURIで公開されていること l インターフェース(HTTPメソッドの利⽤)の統⼀がされていること l ステートレスであること l 処理結果がHTTPステータスコードで通知されること l サーバが処理結果のキャッシュできること(オプション) RESTサービスの設計原則 20193 ファーストステップ、設計結果の例: (The RESTful API for the Rider Auto Parts order web service )
  • 4. l RESTサービスの実装は、多くな⽅法があるが、本書では以下の5つ の⽅式を使って説明している RESTサービスの実装⽅式 20194 # 実装⽅式 概要 1 Apache CXF <10.1.2 Using JAX-RS with REST services> Camelコンポーネントを使わず、CXFのみ で実装する⽅法 2 Apache CXF with Camel <10.1.3 Using Camel in an existing JAX-RS application> CXFでREST送受信を⾏い、処理ロジックの 部分はCamelルートに任せる⽅法 3 Camel Restlet component <10.1.4 Using camel-restlet with REST services> 最も簡易なCamelコンポーネントcamel- restletを使って実装する⽅法 4 Camel CXF REST component <10.1.5 Using camel-cxf with REST services> Camelコンポーネントcamel-cxfを使った 実装する⽅法 5 Camel REST DSL **こっちが推奨** <10.2 The Camel Rest DSL> Camel DSLを使って、REST専⽤⾔語 (REST DSL)で定義及び実装する⽅法
  • 5. JVM l 仕組み REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 20195 CXF REST Client REST Order Service getOrder() <Method>http createOrder() <Method> updateOrder() <Method> cancelOrder() <Method>
  • 6. l プロジェクトの構成 REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 20196 1. 依存ライブラリの定義 2. データモデルの定義 3. RESTサービスのJava Interfaceの定義 4. RESTサービスのの定義 6. RESTサービス起動するmainクラス (番号は開発順) 5. サービス中⾝(処理ロジック)の実装
  • 7. 1. 依存ライブラリ(pom.xml) REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 20197 • 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
  • 8. 2. データモデルの定義(Order.java) REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 20198 このサンプルはXMLを扱うため、JAXB のアノテーションで定義している
  • 9. 3. RESTサービスのJava Interfaceの定義(OrderService.java) REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 20199 標準なJava InterfaceでRESTサービス のOperationを羅列する
  • 10. 4. RESTサービスの定義(RestOrderService.java) REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 201910 RESTサービスのベースパス 応答のコンテンツタイプ - XML サービス中⾝(処理ロジック)実装の注⼊
  • 11. REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 201911 個々のOperationの定義 4. RESTサービスの定義(RestOrderService.java) HTTPメソッド – GET/PUT/POST/DELETE パスパラメータ –実⾏時idが⾃動 的にorderIdにマップされる パスパラメータ –実⾏時idが⾃動 的にorderIdにマップされる サービス実装を呼び出し Orderを⾒つかった場合、okステータ ス(200)、及びOrderを返す Orderを⾒つからなかった場合、not foundステータス(404) を返す
  • 12. 5. サービス中⾝(処理ロジック)の実装 (DummyOrderService.java) REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 201912 RESTサービスのJava Interfaceを実装 CXF, JAX-RSなど依存しないのPOJOで 実装可能
  • 13. 6. RESTサービス起動するmainクラス(RestOrderServer.java) REST実装⽅式1. Apache CXFのみの実装⽅法 <10.1.2 Using JAX-RS with REST services> 201913 サービス中⾝(処理ロジック)の初期化 RESTサービス定義の初期化 CXF関連の初期化 CXFサーバの起動
  • 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ルートでも可能。
  • 21. 6. RESTサービス起動するmainクラス(RestOrderServer.java) REST実装⽅式2. Apache CXF with Camelの実装⽅法 <10.1.3 Using Camel in an existing JAX-RS application> 201921 CamelのProducerTemplateをRESTサービスに 注⼊する CXF及びRESTサービスの初期化の前に、 CamelコンテキストとProducerTemplateを 初期化する
  • 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同様)
  • 25. 1. 依存ライブラリ(pom.xml) REST実装⽅式3. Camel Restlet component <10.1.4 Using camel-restlet with REST services> 201925 • Camel • org.apache.camel:camel-core • org.apache.camel:camel-restlet • org.apache.camel:camel-jaxb (XML扱う場合) • org.apache.camel:camel-Jackson (JSON扱う場合)
  • 26. 4. サービス中⾝(Camelルート)の実装(Camelルートで処理ロジックを実装) REST実装⽅式3. Camel Restlet component <10.1.4 Using camel-restlet with REST services> 201926 Java DSLの実装のため、RouteBuilderを 継承する Camelルートの実装。 便利上、⽅式1で実装した DummyOrderServiceをBeanとして 再利⽤しているが、本当はどんな Camelルートでも可能。
  • 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)がないこと
  • 28. JVM l 仕組み REST実装⽅式4. Camel CXF REST component <10.1.5 Using camel-cxf with REST services> 201928 Camelルート REST Client 振分⽤ルート <Camel Route> getOrder <Camel Route> createOrder <Camel Route> updateOrder <Camel Route> cancelOrder <Camel Route> Direct:xxx 例: <from uri=“cxfrs:…”/> <toD uri=“direct:${header.operationName}”>
  • 29. l プロジェクトの構成 REST実装⽅式4. Camel CXF REST component <10.1.5 Using camel-cxf with REST services> 201929 1. 依存ライブラリの定義 (Camelの依存ライブラリを追加) 2. データモデルの定義(⽅法1同様) (番号は開発順) 5. サービス中⾝(Camelルート)の実装 (Camelルートで処理ロジックを実装) 3. RESTサービスのJava Interfaceの定義(⽅法1と同様) 4. RESTサービスのの定義
  • 30. 1. 依存ライブラリ(pom.xml) REST実装⽅式4. Camel CXF REST component <10.1.5 Using camel-cxf with REST services> 201930 • 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 • org.apache.camel:camel-cxf
  • 31. 4. RESTサービスの定義(RestOrderService.java) REST実装⽅式4. Camel CXF REST component <10.1.5 Using camel-cxf with REST services> 201931 JAX-RS準拠のRESTサービスの定義 • ベースパス情報 • 要求メッセージのコンテンツタイプ • 応答メッセージのコンテンツタイプ JAX-RS準拠のRESTサービスの定義 • Operation別の定義 • パラメータ情報
  • 32. 5. サービス中⾝(Camelルート)の実装(Camelルートで処理ロジックを実装) REST実装⽅式4. Camel CXF REST component <10.1.5 Using camel-cxf with REST services> 201932 Java DSLの実装のため、RouteBuilderを 継承する 実際のRESTサービス処理を⾏う Camelルートの実装。 便利上、⽅式1で実装した DummyOrderServiceをBeanとして 再利⽤しているが、本当はどんな Camelルートでも可能。 Camel-cxfrsでリクエストを受付し て、個々のCamel Routeへ振り分け するルートの実装。
  • 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コーディング必要
  • 34. JVM l 仕組み REST実装⽅式5. Camel REST DSL <10.2 The Camel Rest DSL> 201934 Camelルート REST Client REST DSL getOrder <Camel Route> createOrder <Camel Route> updateOrder <Camel Route> cancelOrder <Camel Route> Direct:xxx 例: <rest path="/orders"> <get uri="{id}" outType="camelinaction.Order"> <to uri=”direct:xxx"/> </get> </rest>
  • 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