Slide 1

Slide 1 text

Wir lösen das – persönlich! Resource-oriented Client Architecture Holger Kraus | Stefan Tilkov | innoQ Wednesday, November 7, 12

Slide 2

Slide 2 text

© 2012 innoQ Deutschland GmbH REST Wednesday, November 7, 12

Slide 3

Slide 3 text

© 2012 innoQ Deutschland GmbH RESTful HTTP Wednesday, November 7, 12

Slide 4

Slide 4 text

© 2012 innoQ Deutschland GmbH URIs Identi es Resources http://example.com/orders?year=2008 http://example.com/customers/1234 http://example.com/orders/2007/10/776654 http://example.com/products/4554 http://example.com/processes/sal-increase-234 Wednesday, November 7, 12

Slide 5

Slide 5 text

© 2012 innoQ Deutschland GmbH Resources are Linked Wednesday, November 7, 12

Slide 6

Slide 6 text

© 2012 innoQ Deutschland GmbH Representations in di erent Formats XML HTML XHTML JSON YAML Plain Text PDF Binary Wednesday, November 7, 12

Slide 7

Slide 7 text

© 2012 innoQ Deutschland GmbH Customer Order Delivery Product CustomerList ProductCatalog Rating «interface» Resource Wednesday, November 7, 12

Slide 8

Slide 8 text

© 2012 innoQ Deutschland GmbH RESTful Web Services Wednesday, November 7, 12

Slide 9

Slide 9 text

© 2012 innoQ Deutschland GmbH REST-APIs Wednesday, November 7, 12

Slide 10

Slide 10 text

© 2012 innoQ Deutschland GmbH REST = Architecture of Web Services? Wednesday, November 7, 12

Slide 11

Slide 11 text

© 2012 innoQ Deutschland GmbH Customer Order Delivery Product CustomerList ProductCatalog Rating «interface» Resource CustomerView OrderEntryForm ProductMaintenanceForm Wednesday, November 7, 12

Slide 12

Slide 12 text

© 2012 innoQ Deutschland GmbH REST = Architecture of the Web Wednesday, November 7, 12

Slide 13

Slide 13 text

© 2011 innoQ Deutschland GmbH Data Replication Backend Integration Frontend Integration Integrationsoptionen Data Logic UI Data Logic UI Wednesday, November 7, 12

Slide 14

Slide 14 text

© 2012 innoQ Deutschland GmbH Frontend integration Wednesday, November 7, 12

Slide 15

Slide 15 text

© 2012 innoQ Deutschland GmbH Frontend integration Data Logic UI Data Logic UI Wednesday, November 7, 12

Slide 16

Slide 16 text

© 2012 innoQ Deutschland GmbH Frontend integration UI Data Logic Data Logic UI Wednesday, November 7, 12

Slide 17

Slide 17 text

© 2012 innoQ Deutschland GmbH Browser HTML Page Backend 1 UI 1 Frontend Server UI 2 Server-side integration Backend 2 Examples: ESI-Caches SSI Portal Server Wednesday, November 7, 12

Slide 18

Slide 18 text

© 2012 innoQ Deutschland GmbH Browser HTML Page Backend 1 UI 1 UI 2 Client-side integration Backend 2 Examples: AJAX Proprietary Frameworks Wednesday, November 7, 12

Slide 19

Slide 19 text

© 2012 innoQ Deutschland GmbH Browser HTML Page 1 Links Backend 1 Backend 2 HTML Page 2 Asset Server CSS, JS, IMG, ... Wednesday, November 7, 12

Slide 20

Slide 20 text

© 2012 innoQ Deutschland GmbH “But what about stateful Web applications?” Wednesday, November 7, 12

Slide 21

Slide 21 text

© 2012 innoQ Deutschland GmbH Browser Server HTML Page Label Label Label Label Label Label Label Label Submit Wednesday, November 7, 12

Slide 22

Slide 22 text

© 2012 innoQ Deutschland GmbH Browser Server Label Label Label Next Label Label Label Next Label Label Finish Session State Wednesday, November 7, 12

Slide 23

Slide 23 text

© 2012 innoQ Deutschland GmbH Browser Server Label Label Label Next Label Label Label Next Label Label Finish HTML Page Label Label Label Label Label Label Label Label Submit Client State Wednesday, November 7, 12

Slide 24

Slide 24 text

© 2012 innoQ Deutschland GmbH JavaScript Wednesday, November 7, 12

Slide 25

Slide 25 text

© 2012 innoQ Deutschland GmbH JavaScript WTFs alert(111111111111111111111); // alerts 111111111111111110000 ("foo" + + "bar") === "fooNaN" // true // Reason: "foo" + (+"bar") === "foo" + NaN typeof NaN === 'number' // true Infinity === 1/0 // true 0.1 + 0.2 === 0.3 // false [] + [] // "" [] + {} // [object Object] {} + [] // 0 {} + {} // NaN https://www.destroyallsoftware.com/talks/wat http://oreilly.com/javascript/excerpts/javascript-good-parts/awful-parts.html http://oreilly.com/javascript/excerpts/javascript-good-parts/bad-parts.html http://wtfjs.com/ Wednesday, November 7, 12

Slide 26

Slide 26 text

© 2012 innoQ Deutschland GmbH Image by David Walsh http://oreilly.com/catalog/9780596517748 Wednesday, November 7, 12

Slide 27

Slide 27 text

© 2012 innoQ Deutschland GmbH 5.1.7 Code-On-Demand The final addition to our constraint set for REST comes from the code-on-demand style of Section 3.5.3 (Figure 5-8). REST allows client functionality to be extended by downloading and executing code in the form of applets or scripts. This simplifies clients by reducing the number of features required to be pre- implemented. Allowing features to be downloaded after deployment improves system extensibility. However, it also reduces visibility, and thus is only an optional constraint within REST. http://www.ics.uci.edu/~ elding/pubs/dissertation/rest_arch_style.htm#sec_5_1_7 Wednesday, November 7, 12

Slide 28

Slide 28 text

© 2012 innoQ Deutschland GmbH From server to client Server-side Components ROCA Single Page Apps Flash Silverlight Applets ... Most Web Apps Server Client Wednesday, November 7, 12

Slide 29

Slide 29 text

© 2012 innoQ Deutschland GmbH ROCA http://roca-style.org/ Wednesday, November 7, 12

Slide 30

Slide 30 text

© 2012 innoQ Deutschland GmbH Use URIs to identify a single meaningful concept Wednesday, November 7, 12

Slide 31

Slide 31 text

© 2012 innoQ Deutschland GmbH Browser HTML Page Main Content Header, Main Navigation Sidebar Sidebar Footer Wednesday, November 7, 12

Slide 32

Slide 32 text

© 2012 innoQ Deutschland GmbH Browser HTML Page Main Content Header, Main Navigation Footer Sidebar Content Sidebar Content Wednesday, November 7, 12

Slide 33

Slide 33 text

© 2012 innoQ Deutschland GmbH Browser HTML Page Main Content 1 Header, Main Navigation Footer Main Content 2 ✗ Wednesday, November 7, 12

Slide 34

Slide 34 text

© 2012 innoQ Deutschland GmbH Browser HTML Page Main Content 1 Header, Main Navigation Footer HTML Page Other Main Content Header, Main Navigation Footer Wednesday, November 7, 12

Slide 35

Slide 35 text

© 2012 innoQ Deutschland GmbH Don’t disable Browser Features – use them Wednesday, November 7, 12

Slide 36

Slide 36 text

© 2012 innoQ Deutschland GmbH Multiple tabs & windows Bookmarks Back/Forward/Refresh Personalization Menus Wednesday, November 7, 12

Slide 37

Slide 37 text

© 2012 innoQ Deutschland GmbH Put application logic on the server only Wednesday, November 7, 12

Slide 38

Slide 38 text

© 2012 innoQ Deutschland GmbH Don’t trust your clients RESTful APIs for free Non-browser clients (e.g. Google Crawler) Wednesday, November 7, 12

Slide 39

Slide 39 text

© 2012 innoQ Deutschland GmbH http://googlewebmastercentral.blogspot.com/2009/10/proposal-for-making-ajax-crawlable.html Wednesday, November 7, 12

Slide 40

Slide 40 text

© 2012 innoQ Deutschland GmbH YOU’RE DOING IT WRONG Wednesday, November 7, 12

Slide 41

Slide 41 text

© 2012 innoQ Deutschland GmbH Make your HTML semantic Wednesday, November 7, 12

Slide 42

Slide 42 text

© 2012 innoQ Deutschland GmbH Minimal load times API usage Accessibility Self-descriptiveness Readability Reusability Wednesday, November 7, 12

Slide 43

Slide 43 text

© 2012 innoQ Deutschland GmbH CSS HTML Content Layout Wednesday, November 7, 12

Slide 44

Slide 44 text

© 2012 innoQ Deutschland GmbH Use Javascript unobtrusively Wednesday, November 7, 12

Slide 45

Slide 45 text

© 2012 innoQ Deutschland GmbH Some Link Wednesday, November 7, 12

Slide 46

Slide 46 text

© 2012 innoQ Deutschland GmbH Some Link Wednesday, November 7, 12

Slide 47

Slide 47 text

© 2012 innoQ Deutschland GmbH Some Link Wednesday, November 7, 12

Slide 48

Slide 48 text

© 2012 innoQ Deutschland GmbH Some Link Wednesday, November 7, 12

Slide 49

Slide 49 text

© 2012 innoQ Deutschland GmbH $("a.whatever").click(function() { doSomething(this.href); }); + Some Link Wednesday, November 7, 12

Slide 50

Slide 50 text

© 2012 innoQ Deutschland GmbH

Proin elit arcu, rutrum commodo, vehicula ...

Morbi tincidunt, dui sit amet facilisis feugiat, odio ...

Mauris eleifend est et turpis. Duis id erat ...

$("#tabs").tabs(); + Wednesday, November 7, 12

Slide 51

Slide 51 text

© 2012 innoQ Deutschland GmbH Wednesday, November 7, 12

Slide 52

Slide 52 text

© 2012 innoQ Deutschland GmbH Parameters? Wednesday, November 7, 12

Slide 53

Slide 53 text

© 2012 innoQ Deutschland GmbH Some Link Some other Link Wednesday, November 7, 12

Slide 54

Slide 54 text

© 2012 innoQ Deutschland GmbH Some Link $("a.whatever").click(function() { doSomething(this.href, $(this).data("param1")); }); + Wednesday, November 7, 12

Slide 55

Slide 55 text

© 2012 innoQ Deutschland GmbH CSS HTML Content Layout Wednesday, November 7, 12

Slide 56

Slide 56 text

© 2012 innoQ Deutschland GmbH JavaScript CSS HTML Content Behavior Layout Wednesday, November 7, 12

Slide 57

Slide 57 text

© 2012 innoQ Deutschland GmbH What does it look like? Wednesday, November 7, 12

Slide 58

Slide 58 text

© 2012 innoQ Deutschland GmbH JS component JS glue code HTML Events Methods Component 2 Component 3 ... Layout/CSS styles styles Server / Backend Ajax initializes Base Markup responds with Wednesday, November 7, 12

Slide 59

Slide 59 text

© 2012 innoQ Deutschland GmbH Summary Wednesday, November 7, 12

Slide 60

Slide 60 text

© 2012 innoQ Deutschland GmbH Ensure you’re on the Web, not tunneling through it Wednesday, November 7, 12

Slide 61

Slide 61 text

© 2012 innoQ Deutschland GmbH “Classic” server model is not outdated Wednesday, November 7, 12

Slide 62

Slide 62 text

© 2012 innoQ Deutschland GmbH You can build fancy web apps unobtrusively Wednesday, November 7, 12

Slide 63

Slide 63 text

© 2012 innoQ Deutschland GmbH Thank you! Q&A Stefan Tilkov [email protected] @stilkov Phone: +49 170 471 2625 innoQ Deutschland GmbH http://www.innoq.com Krischerstr. 100 40789 Monheim am Rhein Germany Phone: +49 2173 3366-0 innoQ Schweiz GmbH [email protected] Gewerbestr. 11 CH-6330 Cham Switzerland Phone: +41 41 743 0116 Holger Kraus [email protected] Phone: +49 151 42656093 Wednesday, November 7, 12

Slide 64

Slide 64 text

© 2012 innoQ Deutschland GmbH Choosing a Web framework Wednesday, November 7, 12

Slide 65

Slide 65 text

© 2012 innoQ Deutschland GmbH How much HTTP would you like with that? Wednesday, November 7, 12

Slide 66

Slide 66 text

© 2012 innoQ Deutschland GmbH Server-side component-based JSF ASP.NET Wicket Tapestry Vaadin Wednesday, November 7, 12

Slide 67

Slide 67 text

© 2012 innoQ Deutschland GmbH Request/Response-oriented Struts Play Grails Rails ASP.NET MVC (Native) PHP Django Spring MVC Wednesday, November 7, 12

Slide 68

Slide 68 text

© 2012 innoQ Deutschland GmbH Rich-client Applets JavaFX GWT Silverlight Flash/Flex Echo ZK Meteor Backbone.js Wednesday, November 7, 12

Slide 69

Slide 69 text

© 2012 innoQ Deutschland GmbH Linkable and “pretty” URIs GET/POST di erentiation Support for caching Full control over HTML 1 Resource, n Views Request/Response Frameworks Wednesday, November 7, 12

Slide 70

Slide 70 text

© 2012 innoQ Deutschland GmbH # Wednesday, November 7, 12

Slide 71

Slide 71 text

© 2012 innoQ Deutschland GmbH # “When a URI reference is used to perform a retrieval action on the identi ed resource, the optional fragment identi er, separated from the URI by a crosshatch (“#”) character, consists of additional reference information to be interpreted by the user agent a er the retrieval action has been successfully completed. As such, it is not part of a URI, but is o en used in conjunction with a URI.” URI Speci cation, August 1998 Wednesday, November 7, 12

Slide 72

Slide 72 text

© 2012 innoQ Deutschland GmbH # The fragment identi er component of a URI allows indirect identi cation of a secondary resource by reference to a primary resource and additional identifying information. The identi ed secondary resource may be some portion or subset of the primary resource, some view on representations of the primary resource, or some other resource de ned or described by those representations. URI Speci cation, January 2005 Wednesday, November 7, 12

Slide 73

Slide 73 text

© 2012 innoQ Deutschland GmbH #! http://www.jenitennison.com/blog/node/154 Wednesday, November 7, 12

Slide 74

Slide 74 text

© 2012 innoQ Deutschland GmbH http://example.com/someapp#!state=234 http://example.com/someapp?_escaped_fragment=234 Wednesday, November 7, 12

Slide 75

Slide 75 text

© 2012 innoQ Deutschland GmbH Complex Inaccessible Brittle Invisible to search engines (#) # and #! Downsides Wednesday, November 7, 12

Slide 76

Slide 76 text

© 2012 innoQ Deutschland GmbH HTML 5 pushState() replaceState() Wednesday, November 7, 12