SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Semelhante a 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
 
20120423 hbase勉強会
20120423 hbase勉強会20120423 hbase勉強会
20120423 hbase勉強会
Toshiaki Toyama
 
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
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
Monstar Lab Inc.
 
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Open棟梁 v1 の対応アプリケーション・アーキテクチャ一覧
Daisuke Nishino
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
Hiroshi Okunushi
 
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_study
Masato 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_r51
Takakiyo Tanaka
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
Kazuhiro Sera
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh 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
 

Semelhante a 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
 

Mais de Jian Feng

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

Mais de 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
 

Último

「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 

Último (12)

「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

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