Slide 1

Slide 1 text

Introduction to Dropwizard REST & HTTP made easy Thursday, June 20, 13

Slide 2

Slide 2 text

Lightweight collection of best-of-breed, stable, mature libraries for building REST HTTP services & applications Dropwizard Thursday, June 20, 13

Slide 3

Slide 3 text

“Dropwizard, as a project, exists exclusively to reduce the transactional cost of introducing a new service into a production environment.” Thursday, June 20, 13

Slide 4

Slide 4 text

Sane logging defaults, ops-friendly config, runtime health checks, default metrics Operationally sound Thursday, June 20, 13

Slide 5

Slide 5 text

10 minutes of work, great docs, rapid development Low barrier to entry Thursday, June 20, 13

Slide 6

Slide 6 text

Many common use cases covered Batteries included Thursday, June 20, 13

Slide 7

Slide 7 text

•dropwizard-auth for OAuth, Basic auth, custom •dropwizard-jdbi for JDBI DAO access •dropwizard-hibernate - Hibernate ORM •dropwizard-views - Freemarker, Mustache •dropwizard-guice (Hubspot) - Guice injection •dropwizard-extras (DataSift) - Kafka, HBase goodies Batteries included Thursday, June 20, 13

Slide 8

Slide 8 text

The Details Thursday, June 20, 13

Slide 9

Slide 9 text

Core Libraries Thursday, June 20, 13

Slide 10

Slide 10 text

•Jetty for HTTP servin'. Core Libraries Thursday, June 20, 13

Slide 11

Slide 11 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. Core Libraries Thursday, June 20, 13

Slide 12

Slide 12 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. Core Libraries Thursday, June 20, 13

Slide 13

Slide 13 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. •Logback for loggin'. Core Libraries Thursday, June 20, 13

Slide 14

Slide 14 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. •Logback for loggin'. •Hibernate Validator for validatin'. Core Libraries Thursday, June 20, 13

Slide 15

Slide 15 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. •Logback for loggin'. •Hibernate Validator for validatin'. •Metrics for figurin' out what your application is doin' in production. Core Libraries Thursday, June 20, 13

Slide 16

Slide 16 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. •Logback for loggin'. •Hibernate Validator for validatin'. •Metrics for figurin' out what your application is doin' in production. •SnakeYAML for YAML parsin' and configuratin'. Core Libraries Thursday, June 20, 13

Slide 17

Slide 17 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. •Logback for loggin'. •Hibernate Validator for validatin'. •Metrics for figurin' out what your application is doin' in production. •SnakeYAML for YAML parsin' and configuratin'. •JDBI and Hibernate for databasin'. Core Libraries Thursday, June 20, 13

Slide 18

Slide 18 text

•Jetty for HTTP servin'. •Jersey for REST modelin'. •Jackson for JSON parsin' and generatin'. •Logback for loggin'. •Hibernate Validator for validatin'. •Metrics for figurin' out what your application is doin' in production. •SnakeYAML for YAML parsin' and configuratin'. •JDBI and Hibernate for databasin'. •Liquibase for migratin'. Core Libraries Thursday, June 20, 13

Slide 19

Slide 19 text

this is usually good Dropwizard is opinionated Thursday, June 20, 13

Slide 20

Slide 20 text

Code organization Thursday, June 20, 13

Slide 21

Slide 21 text

Sane recommendations for layout Code organization Thursday, June 20, 13

Slide 22

Slide 22 text

Sane recommendations for layout Code organization Thursday, June 20, 13

Slide 23

Slide 23 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* Thursday, June 20, 13

Slide 24

Slide 24 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api Thursday, June 20, 13

Slide 25

Slide 25 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client Thursday, June 20, 13

Slide 26

Slide 26 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service Thursday, June 20, 13

Slide 27

Slide 27 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service api service service service service service service service client Thursday, June 20, 13

Slide 28

Slide 28 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service POJOs api service service service service service service service client Thursday, June 20, 13

Slide 29

Slide 29 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service POJOs Jersey Resources api service service service service service service service client Thursday, June 20, 13

Slide 30

Slide 30 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service POJOs Jersey Resources api service service service service service service service client Your App Thursday, June 20, 13

Slide 31

Slide 31 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service POJOs Jersey Resources api service service service service service service service client Your App DAOs Thursday, June 20, 13

Slide 32

Slide 32 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service POJOs Jersey Resources api service service service service service service service client Your App DAOs Representations go in api so they can be used in the client package too Thursday, June 20, 13

Slide 33

Slide 33 text

Sane recommendations for layout Code organization Across 3 maven/gradle subprojects* project-api project-client project-service POJOs Jersey Resources * - If you’re just doing a quick web service, just throw it all in one project if you even make a client api service service service service service service service client Your App DAOs Representations go in api so they can be used in the client package too Thursday, June 20, 13

Slide 34

Slide 34 text

Jersey (1.x) Thursday, June 20, 13

Slide 35

Slide 35 text

@Path specifies the relative path for a resource class or method. @GET, @PUT, @POST, @DELETE and @HEAD specify the HTTP request type of a resource. @Produces specifies the response Internet media types (used for content negotiation). @Consumes specifies the accepted request Internet media types. @PathParam binds the method parameter to a path segment. @QueryParam binds the method parameter to the value of an HTTP query parameter. more.. Jersey is the reference implementation of JAX-RS, spec for making RESTful webservices Class & method annotations Thursday, June 20, 13

Slide 36

Slide 36 text

Example: Result: [] .. automatic JSON serialization GET /v1/resource Thursday, June 20, 13

Slide 37

Slide 37 text

Lets build a service hands on! Thursday, June 20, 13

Slide 38

Slide 38 text

git clone [email protected]:fullcontact/dropwizard-techtalk.git I’ve prepared a skeleton project It’s Maven & Groovy based Aw yeah, who doesn’t love Groovy? Thursday, June 20, 13