Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Rapid web application development with Groovy & Ratpack for GR8Conf EU 2015

2 233 vues

Publié le

Ratpack is yet another kid in the block of web application development frameworks. Why is it different? It gives you an ability of rapid prototyping of web UIs and APIs. Non-blocking implementation, which includes testing, dependency injection, monitoring, streaming are all (as well as many others) built-in features and are easy to use. You can start as small as a single script, or split your application into several source code files organically when it grows bigger. Also, the conciseness of Groovy programming language and elegant API gives it an outstanding charm that's worth a try for your next small or big project. This presentation gives a demo of how to quickly create a web application with Ratpack.

Publié dans : Technologie
  • Soyez le premier à commenter

Rapid web application development with Groovy & Ratpack for GR8Conf EU 2015

  1. 1. 01
  2. 2. About me 02
  3. 3. Andrey Adamovich Bio: Developer, coach, speaker, author Company: Aestas/IT (http://aestasit.com) E­mail: andrey@aestasit.com Linkedin: http://www.linkedin.com/in/andreyadamovich Lanyrd: http://lanyrd.com/profile/andrey­adamovich GitHub: https://github.com/aadamovich SO: http://stackoverflow.com/users/162792/andrey­adamovich Twitter: @codingandrey, @aestasit • • • • • • • • 03
  4. 4. Quick Start! 04
  5. 5. 0. Prerequisites Install Java 8+ Install Groovy 2.4+ (Optionally) install Gradle 2+ (or just use Gradle Wrapper) • • • 05
  6. 6. 1. Type in... @Grab("org.slf4j:slf4j‐simple:1.7.10") @Grab("io.ratpack:ratpack‐groovy:0.9.11") import static ratpack.groovy.Groovy.ratpack 01. 02. 03. 06
  7. 7. 1. Continue... ratpack {   handlers {     get {       response.send new Date().toString()     }   } } 01. 02. 03. 04. 05. 06. 07. 07
  8. 8. 2. Save as... ratpack.groovy01. 08
  9. 9. 3. Start! groovy ratpack.groovy 01. 09
  10. 10. 4. Enable some more logging JAVA_OPTS=‐Dgroovy.grape.report.downloads=true01. 10
  11. 11. Ratpack facts I Ratpack is a toolset that combines several Java libraries that allows efficiently developing performant and testable HTTP applications. 11
  12. 12. Ratpack facts II Inspired by Sinatra framework Requires Java 8 Does not require a container Does not implement Servlet API Goes under Apache 2.0 License • • • • • 12
  13. 13. Ratpack facts III Core is very minimal and is only based on few abstractions (Handler and Registry) Many additional modules exist and it's easily to develop new ones Modules are injected through DI (there is not specialized plugin system) Out­of­the­box integration with Guice and Spring • • • • 13
  14. 14. Stack 14
  15. 15. It's alive and very active! 15
  16. 16. Release history 0.5.2 ­ Jul 21, 2012 0.6.1 ­ Nov 29, 2012 0.9.0 ­ Jan 02, 2014 0.9.1 ­ Feb 01, 2014 0.9.2 ­ Mar 01, 2014 0.9.3 ­ Apr 01, 2014 0.9.4 ­ May 01, 2014 0.9.5 ­ Jun 01, 2014 0.9.6 ­ Jul 01, 2014 • • • • • • • • • 16
  17. 17. Release history 0.9.7 ­ Aug 01, 2014 0.9.8 ­ Sep 01, 2014 0.9.9 ­ Oct 01, 2014 0.9.10 ­ Nov 02, 2014 0.9.11 ­ Dec 01, 2014 0.9.12 ­ Jan 01, 2014 0.9.13 ­ Feb 01, 2015 0.9.14 ­ Mar 01, 2015 • • • • • • • • 17
  18. 18. Release history 0.9.15 ­ Apr 01, 2015 0.9.16 ­ May 02, 2015 0.9.17 ­ June 01, 2015 • • • 18
  19. 19. Commit history 19
  20. 20. Heroes 20
  21. 21. Modules I Asynch: reactor, rx Authentication: pac4j Build/Packaging: gradle Common: config, session Database: h2, hikari • • • • • 21
  22. 22. Modules II Dependency Injection: guice, spring­boot JSON: jackson Language: groovy, kotlin Reliability: hystrix, codehale­metrics, newrelic Templates: handlebars, thymeleaf, groovy Testing: test, groovy­test • • • • • • 22
  23. 23. Java + Groovy = ? Has similar performance to Java when using  invokeDynamic Supports static compilation and compile­time type checking Useful for defining rich DSLs with type checking via  Closure parameters and  @DelegatesTo  annotations • • • 23
  24. 24. IDE support IntelliJ IDEA recommended Eclipse has poor support for Groovy and @DelegatesTo NetBeans ­ haven't even tried • • • 24
  25. 25. Diving deeper 25
  26. 26. Handlers All request processing is done via composition of  Handler s. Each  Handler  in the  Chain  is asked to respond to a  Request  until one actually does. • • 26
  27. 27. A handler can Send a  Response  based on the  Request . Delegate to the next  Handler  in the  Chain . Insert  Handler s into the  Chain  and immediately delegate to them. Change  Context , which represents the current state of the Request  processing. • • • • 27
  28. 28. Flow 28
  29. 29. Paths prefix('api') {   get('user/:id') {     render getUser(pathTokens.id)   }   get('friends') {     render getFriendList()   } } 01. 02. 03. 04. 05. 06. 07. 08. 29
  30. 30. Verbs handler('user') {   byMethod {     get { ... }     post { ... }     put { ... }     delete { ... }   } } 01. 02. 03. 04. 05. 06. 07. 08. 30
  31. 31. Content types handler('user') {   byContent {     json { ... }     xml { ... }     type("application/vnd.app.org+json;v=1") {       ...     }   } } 01. 02. 03. 04. 05. 06. 07. 08. 09. 31
  32. 32. Static content assets "public" assets "index.html" 01. 02. 32
  33. 33. Templates (ala JSP/GSP) Handler code: get ("admin") {   render groovyTemplate('admin.html', result: "") } 01. 02. 03. 33
  34. 34. Templates (ala JSP/GSP) admin.html : <% if (model?.result) { %>   <% model.result.each { %>     <li>${it}</li>   <% } %> <% } %> 01. 02. 03. 04. 05. 34
  35. 35. Templates (Groovy­way) Handler code: render groovyMarkupTemplate(   "update.gtpl",    "title: "Update Book",   ...   "price": book.price ) 01. 02. 03. 04. 05. 06. 35
  36. 36. Templates (Groovy­way) update.gtpl : layout 'layout.gtpl', title: title, msg: msg, bodyContents: contents {   h1('Update Book')   includeGroovy '_book_form.gtpl' } 01. 02. 03. 04. 05. 06. 07. 36
  37. 37. Testing Test handler implementations with  RequestFixture Functional testing with  ApplicationUnderTest  and TestHttpClient Nobody canceled testing with Geb (Selenium)! • • • 37
  38. 38. Enough! 38
  39. 39. Demo 1 39
  40. 40. Demo 2 40
  41. 41. Summary 41
  42. 42. Take­aways Ratpack can be used to quickly prototype web APIs and applications. Learning curve is really small, you can start in seconds. It can be used to create high performance web applications due to non­blocking architecture. Ratpack does not lock you in the way you implement data access, session handling, logging, etc. Ratpack has vibrant community and actively evolving code base. • • • • • 42
  43. 43. Reading material http://ratpack.io http://www.slideshare.net/search/slideshow?q=ratpack https://github.com/ratpack http://alvarosanchez.github.io/ratpack­101/ • • • • 43
  44. 44. Contribute! 44
  45. 45. Questions? 45
  46. 46. Thank you! 46
  47. 47. Happy coding! 47

×