Upload
andrey-adamovich
View
3.424
Download
0
Embed Size (px)
Citation preview
01
About me02
Andrey AdamovichBio: Developer, coach, speaker, author
Company: Aestas/IT (http://aestasit.com)
Email: [email protected]
Linkedin: http://www.linkedin.com/in/andreyadamovich
Lanyrd: http://lanyrd.com/profile/andreyadamovich
GitHub: https://github.com/aadamovich
SO: http://stackoverflow.com/users/162792/andreyadamovich
Twitter: @codingandrey, @aestasit
••••••••
03
Quick Start!04
0. PrerequisitesInstall Java 8+
Install Groovy 2.+
(Optionally) install Gradle 2+ (or just use Gradle Wrapper)
•••
05
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
1. Continue...ratpack {
handlers {
get {
response.send new Date().toString()
}
}
}
01.
02.
03.
04.
05.
06.
07.
07
2. Save as...ratpack.groovy01.
08
3. Start!groovy ratpack.groovy 01.
09
4. Enable some more loggingJAVA_OPTS=‐Dgroovy.grape.report.downloads=true01.
10
Ratpack facts IRatpack is a toolset that combines several Java libraries that allows
efficiently developing performing and testable HTTP applications.“11
Ratpack facts IIInspired by Sinatra framework
Requires Java 8
Does not require a container
Does not implement Servlet API
Goes under Apache 2.0 License
•••••
12
Ratpack facts IIICore 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)
Outofthebox integration with Guice and Spring
•
•••
•
13
Stack
14
It's alive andvery active!15
Release history0.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
Release history0.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
Release history0.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
Commit history
19
Statistics
20
Team
21
Top contributor
22
Modules IAsynch: reactor, rx
Authentication: pac4j
Build/Packaging: gradle
Common: config, session
Database: h2, hikari
•••••
23
Modules IIDependency Injection: guice, springboot
JSON: jackson
Language: groovy, kotlin
Reliability: hystrix, codehalemetrics, newrelic
Templates: handlebars, thymeleaf, groovy
Testing: test, groovytest
••••••
24
IDE supportIntelliJ IDEA recommended
Eclipse has poor support for Groovy, @DelegatesTo and functional
interfaces
NetBeans haven't even tried
••
•
25
Diving deeper26
HandlersAll 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
A handler canSend 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
Flow
29
Pathsprefix('api') {
get('user/:id') {
render getUser(pathTokens.id)
}
get('friends') {
render getFriendList()
}
}
01.
02.
03.
04.
05.
06.
07.
08.
30
Verbspath('user') {
byMethod {
get { ... }
post { ... }
put { ... }
delete { ... }
}
}
01.
02.
03.
04.
05.
06.
07.
08.
31
Content typespath('user') {
byContent {
json { ... }
xml { ... }
type("application/vnd.app.org+json;v=1") {
...
}
}
}
01.
02.
03.
04.
05.
06.
07.
08.
09. 32
Static contentfiles {
dir "public"
file "index.html"
}
01.
02.
03.
04.
33
Templates (ala JSP/GSP)Handler code:
get ("admin") {
render groovyTemplate('admin.html', result: "")
}
01.
02.
03.
34
Templates (ala JSP/GSP)admin.html :
<% if (model?.result) { %>
<% model.result.each { %>
<li>${it}</li>
<% } %>
<% } %>
01.
02.
03.
04.
05.
35
Templates (Groovyway)Handler code:
render groovyMarkupTemplate(
"update.gtpl",
"title: "Update Book",
...
"price": book.price
)
01.
02.
03.
04.
05.
06.
36
Templates (Groovyway)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
TestingTest handler implementations with RequestFixture
Functional testing with ApplicationUnderTest and
TestHttpClient
Nobody canceled testing with Geb (Selenium)!
••
•
38
Enough!39
Demo 1: Dateserver
40
Demo 2:Groovy shop
41
Demo 3:Garage travel
42
Summary43
TakeawaysRatpack 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
nonblocking 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
Reading materialhttp://ratpack.io
http://www.slideshare.net/search/slideshow?q=ratpack
https://github.com/ratpack
http://alvarosanchez.github.io/ratpack101/
••••
45
Book
46
Contribute!47
Demo codehttps://github.com/aestasit/talks2015ggxrapidwebappdevelopment
withratpacksetup.git•
48
Let the forcebe with you!
49
Thank you!50
Questions?51