Recommended
PDF
PPTX
PDF
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
PDF
PDF
初心者向けWebinar AWS上でのファイルサーバ構築
PPT
PDF
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
PDF
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
PDF
PPT
OSC2008 Tokyo/Spring REST勉強夜会
PDF
PDF
JavaOne2015報告またはこれからのJava
PDF
PDF
PDF
PDF
Beginning Java EE 6 勉強会(7) #bje_study
PDF
PDF
PDF
PDF
PDF
PPTX
Talend StudioでAPIを開発 - SOAP/RESTのサービス開発手法
PDF
PDF
ゆるべん Webアプリ開発概要 20130127
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
PPTX
PPTX
Workflow, container, and beyond
More Related Content
PDF
PPTX
PDF
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
PDF
PDF
初心者向けWebinar AWS上でのファイルサーバ構築
PPT
PDF
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
PDF
Similar to ホット・トピック・セミナー「Metro」
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
PDF
PPT
OSC2008 Tokyo/Spring REST勉強夜会
PDF
PDF
JavaOne2015報告またはこれからのJava
PDF
PDF
PDF
PDF
Beginning Java EE 6 勉強会(7) #bje_study
PDF
PDF
PDF
PDF
PDF
PPTX
Talend StudioでAPIを開発 - SOAP/RESTのサービス開発手法
PDF
PDF
ゆるべん Webアプリ開発概要 20130127
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
More from Kohsuke Kawaguchi
PPTX
PPTX
Workflow, container, and beyond
PPTX
Jenkins User Conference 東京 2015
PPTX
JavaOne 2014: Next Step in Automation: Elastic Build Environment
PPTX
On sharing ideas & sharing code
PPTX
PPTX
Jenkins User Conference 2013: Literate, multi-branch, mobile and more
PPTX
Jenkins User Conference 2013 Palo Alto: Keynote
PPTX
Jenkins State of union 2013
PPTX
How we made jenkins community
PPTX
PPTX
Large scale automation with jenkins
PPTX
Jenkins User Conference 2012 San Francisco
PPTX
Jenkins+Gitによる検証済みマージ(30分版)
PPTX
PPTX
Jenkins user conference 東京
PPTX
PPTX
Developer summit continuous deliveryとjenkins
PPTX
Creating a Developer Community
PPTX
Jenkins user conference 2011
ホット・トピック・セミナー「Metro」 1. 2. 3. 4. Metro とは? GlassFish の一翼を担う SOAP ウェブ・サービス・フレームワーク 主に JAX-WS RI + WSIT JAX-WS が基盤部分と API WSIT が付加機能と .NET 相互運用性 高性能・高い拡張性 再利用性の高い部品プロジェクトから構築 個別に利用可能 5. Metro の中身 XML 処理 セキュリティ Metro – GlassFish Web Services Stack metro.dev.java.net JAXB JAXP SAAJ コア部分 トラン ザクション WS-RM 拡張機能 SOAP SMTP Spring JSON HTTP . . . . . . 6. パイプライン処理 クライアント サーバ HTTP Security WS-A Reliability TX Stub Invoker Z Y X W TubeHead Message Message invoke 01010001... 11001010... return Message Message invoke return 7. 8. 9. JAX-WS 2.1 API Metro プログラミングモデルの柱 WS を インターフェース越しのメソッド呼出として扱う WSDL を隠蔽 POJO プログラミング デスクリプタなし プロトコル・トランスポートに非依存 10. JAXB 2.1 API XML スキーマを Java ビーンにマッピング XML 入出力を簡単に XML Schema 1.0 の全てをサポート 高性能 面白い拡張が色々 11. 付加機能部分 : WSIT End-to-end セキュリティ トランスポートのセキュリティ メッセージのセキュリティ 暗号・署名等の関連規格 アイデンティティの連携の関連規格 (WS-Trust) リライアビリティ マルチホップ環境での再送・順序制御 分散トランザクション EJB/RMI のような事を WS 上で .NET も含めて 12. 13. 14. 15. 相互運用性 業界標準を色々サポート SOAP 1.1/1.2, WSDL 1.1, WS-Addressing, MTOM, WS-I Basic Profile 1.x, SOAP Attachment Profile WS-ReliableMessaging, WS-SecureConversation, WS-Trust, WS-Security, WS-Policy, WS-AtomicTransaction, … Microsoft と共同で .NET 相互運用性を検証 テスト、テスト、テスト… 定例ミーティング 「 plugfest 」イベント きちんと動く事を地道に検証しました 16. Metro / .NET 相互運用性 Client Endpoint Client Endpoint Metro .NET 3.0 17. 動作環境 GlassFish v2, v3 には最初から入ってます 他の多くのコンテナにも JBoss WS 2.1.0 BEA WebLogic 10 TmaxSoft JEUS 任意のサーブレットコンテナで 但し一部機能制限あり コンテナがなくても OK JavaSE6 light-weight HTTP server 18. 19. 20. 21. 22. 23. パフォーマンス Axis2 1.1.1 と比較して、 30%-100% 高速 詳細: http://weblogs.java.net/blog/kohsuke/archive/2007/02/jaxws_ri_21_ben.html 24. 25. コミュニティ Java.net 上で「見える」開発 ソースコード , ML, デザインディスカッション Hudson による継続的インテグレーション オープンソース CDDL と GPLv2 のデュアルライセンス コミッタになるのも簡単です SCA にサインするだけ ユーザー・コミュニティ主導の機能開発 Spring や JSON サポートなど 26. Metro 世界制覇計画 Sun 以外のアプリケーションサーバでも使われています BEA WebLogic Server 10 JBoss WS 2.1.0 IBM JDK6 Salesforce.com APEX8.0 toolkit 27. 28. Reference Metro metro.dev.java.net [email_address] https://forums.java.net/jive/forum.jspa?forumID=46 http://feeds.feedburner.com/MetroBlogs GlassFish (glassfish.java.net) The Aquarium (blogs.sun.com/theaquarium) 29. 30. 31. REST vs. SOAP : SOAP まとめ HTTP 上に別なプロトコル (SOAP) を載せる XML だけに絞ってデータモデルをリッチに 1からやり直すチャンスだった 高度なアドオンプロトコルが色々出来たがレイヤリングが複雑 人間が目で見てもわからない XML 縛りが思ったよりメリットなし フレームワークを作るのが大変 32. REST vs. SOAP: REST あれ? HTTP しか使ってないよ 新しい物を発明しないでもできる? ウェブサイトを作るようにウェブサービスを作る 昔からある仕様で使えそうなのを組み合わせる 誰も使ってなかった HTTP の仕様の一部とか 小さなフレームワークで済むようになった 良く言えば経済的、悪く言えば継ぎ接ぎ インターフェースが厳密ではない 相互運用とか煩いことは言わない 33. ウェブサイトを作るように HTTP URL の階層構造を素直に使う http://d.hatena.ne.jp/kkawa/20081012/p2 排除される例 : http://www.amazon.com/gp/-/x/15322209_a/:qri/ ウェブフレームワークの中には意外にこれが多い 34. 例 音楽サイト /music/artists /music/artists/{id} /music/recordings /music/recordings/{id} /music/artists/{id}/recordings /music/genre/{id} /music/format/{id} XML と JSON をサポートしよう 35. テストに出る REST RE presentational S tate T ransfer リソース URI で識別される、物 「表現」によって具体化される メソッド リソースによらず共通。 HTTP メソッド 「表現」をやりとりする 表現 リソースの状態を表す HTML,XML,JSON,… 多数のフォーマットが有り得る 36. 37. サーブレットでアーティストクラスを書く public class Artist extends HttpServlet { public enum SupportedOutputFormat {XML, JSON}; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String accept = request.getHeader("accept").toLowerCase(); String acceptableTypes[] = accept.split(","); SupportedOutputFormat outputType = null; for (String acceptableType: acceptableTypes) { if (acceptableType.contains("*/*") || acceptableType.contains("application/*") || acceptableType.contains("application/xml")) { outputType=SupportedOutputFormat.XML; break; } else if (acceptableType.contains("application/json")) { outputType=SupportedOutputFormat.JSON; break; } } if (outputType==null) response.sendError(415); String path = request.getPathInfo(); String pathSegments[] = path.split("/"); String artist = pathSegments[1]; if (pathSegments.length < 2 && pathSegments.length > 3) response.sendError(404); else if (pathSegments.length == 3 && pathSegments[2].equals("recordings")) { if (outputType == SupportedOutputFormat.XML) writeRecordingsForArtistAsXml(response, artist); else writeRecordingsForArtistAsJson(response, artist); } else { if (outputType == SupportedOutputFormat.XML) writeArtistAsXml(response, artist); else writeArtistAsJson(response, artist); } } private void writeRecordingsForArtistAsXml(HttpServletResponse response, String artist) { ... } private void writeRecordingsForArtistAsJson(HttpServletResponse response, String artist) { ... } private void writeArtistAsXml(HttpServletResponse response, String artist) { ... } private void writeArtistAsJson(HttpServletResponse response, String artist) { ... } } 38. これはちょっと… JSF 等は HTTP を独自にモデリングするので REST に向いてない でも 21 世紀にサーブレットを書くのは嫌だ もう少し抽象度の高い API が欲しい REST のイディオムを簡単に コードはできるだけ少なく Java5 の機能もどんどん使って 念のため HTTP も直接叩けるように 部品の組み合わせ方は今も模索中なので 39. 40. 41. メソッドの戻り値 HttpResponse HTTP プロトコルのイディオムに相当 30x リダイレクト、 201 リソース生成など Representation<T> 「表現」 (T) と付随する HTTP ヘッダ 裸の T 必須の HTTP ヘッダが T から自動で定まる場合 SPI によって拡張可能 XML や JSON 、画像など 42. メソッドのパラメータ アノーテーションを使ってパラメータを注入 @UriParam, @QueryParam, @MatrixParam, @HeaderParam 切り出しと型変換の手間が省ける Entity<T> もしくは裸の T リクエストボディに相当 @HttpMethod public Recording updateRecording( @UriParam("id") String id, Recording updatedRecording) 43. 44. 45. 46. 47. 効率のよい SOAP Message の内部表現 Message Packet Messages Headers AttachmentSet Payload Attachment Factories HeaderList Header