Successfully reported this slideshow.
Your SlideShare is downloading. ×

Rapid web application development with Groovy & Ratpack for GGX 2015

Rapid web application development with Groovy & Ratpack for GGX 2015

Download to read offline

This presentation gives a demo of how to quickly create a web application with Ratpack.

Ratpack is yet another kid on the block of web application development frameworks. Why is it different? It gives you the ability to rapidly prototype web Uis and APIs. Non-blocking implementation, which includes testing, dependency injection, monitoring and 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. The conciseness of Ratpack's Groovy DSL and its elegant API gives Ratpack 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.

Ratpack is yet another kid on the block of web application development frameworks. Why is it different? It gives you the ability to rapidly prototype web Uis and APIs. Non-blocking implementation, which includes testing, dependency injection, monitoring and 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. The conciseness of Ratpack's Groovy DSL and its elegant API gives Ratpack an outstanding charm that's worth a try for your next small or big project.

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Rapid web application development with Groovy & Ratpack for GGX 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.+ (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:1.1.1") 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 performing 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 simple abstractions (Handler and Registry) ... and few complex abstractions (Promise) Many additional modules exist and it's easy to develop new ones Modules are injected through DI (there is no 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 0.9.17 ­ June 02, 2015 0.9.18 ­ July 02, 2015 0.9.19 ­ Aug 02, 2015 1.0.0 ­ Sep 15, 2015 1.1.0 ­ Oct 19, 2015 1.1.1 ­ Oct 21, 2015 • • • • • • • • • 18
  19. 19. Commit history 19
  20. 20. Statistics 20
  21. 21. Team 21
  22. 22. Top contributor 22
  23. 23. Modules I Asynch: reactor, rx Authentication: pac4j Build/Packaging: gradle Common: config, session Database: h2, hikari • • • • • 23
  24. 24. 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 • • • • • • 24
  25. 25. IDE support IntelliJ IDEA recommended Eclipse has poor support for Groovy, @DelegatesTo and functional interfaces NetBeans ­ haven't even tried • • • 25
  26. 26. Diving deeper 26
  27. 27. 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. • • 27
  28. 28. 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. • • • • 28
  29. 29. Flow 29
  30. 30. Paths prefix('api') {   get('user/:id') {     render getUser(pathTokens.id)   }   get('friends') {     render getFriendList()   } } 01. 02. 03. 04. 05. 06. 07. 08. 30
  31. 31. Verbs path('user') {   byMethod {     get { ... }     post { ... }     put { ... }     delete { ... }   } } 01. 02. 03. 04. 05. 06. 07. 08. 31
  32. 32. Content types path('user') {   byContent {     json { ... }     xml { ... }     type("application/vnd.app.org+json;v=1") {       ...     }   } } 01. 02. 03. 04. 05. 06. 07. 08. 09. 32
  33. 33. Static content files {    dir "public"    file "index.html" } 01. 02. 03. 04. 33
  34. 34. Templates (ala JSP/GSP) Handler code: get ("admin") {   render groovyTemplate('admin.html', result: "") } 01. 02. 03. 34
  35. 35. Templates (ala JSP/GSP) admin.html : <% if (model?.result) { %>   <% model.result.each { %>     <li>${it}</li>   <% } %> <% } %> 01. 02. 03. 04. 05. 35
  36. 36. Templates (Groovy­way) Handler code: render groovyMarkupTemplate(   "update.gtpl",    "title: "Update Book",   ...   "price": book.price ) 01. 02. 03. 04. 05. 06. 36
  37. 37. 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. 37
  38. 38. Testing Test handler implementations with  RequestFixture Functional testing with  ApplicationUnderTest  and TestHttpClient Nobody canceled testing with Geb (Selenium)! • • • 38
  39. 39. Enough! 39
  40. 40. Demo 1: Date server 40
  41. 41. Demo 2: Groovy shop 41
  42. 42. Demo 3: Garage travel 42
  43. 43. Summary 43
  44. 44. 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. • • • • • 44
  45. 45. Reading material http://ratpack.io http://www.slideshare.net/search/slideshow?q=ratpack https://github.com/ratpack http://alvarosanchez.github.io/ratpack­101/ • • • • 45
  46. 46. Book 46
  47. 47. Contribute! 47
  48. 48. Demo code https://github.com/aestasit/talks2015­ggx­rapid­webapp­development­ with­ratpack­setup.git • 48
  49. 49. Let the force be with you! 49
  50. 50. Thank you! 50
  51. 51. Questions? 51

×