devoxx 2008 - rest in peace

99
www.devoxx.com

Upload: stevenn

Post on 10-May-2015

4.363 views

Category:

Technology


2 download

DESCRIPTION

RESTful web application development with Java and Kauri - presented @ Devoxx University 2008

TRANSCRIPT

Page 2: Devoxx 2008 - REST in Peace

www.devoxx.com

REST In Peace:Javanian RESTfulness

Steven Noels Marc Portier

s

Page 3: Devoxx 2008 - REST in Peace

www.devoxx.com

Overall Presentation Goal

Learn how to architect, prototype and build RESTful Web Services and Interactive Web Sites

using appropriate Java frameworks.

s

Page 4: Devoxx 2008 - REST in Peace

www.devoxx.com4

Speaker’s qualificationsSteven and Marc combine 25+ years of Java and XML-based web development and co-founded Outerthought.

A involved history of application development with Apache Cocoon.

Outerthought has been building an open source Content Management System that follows REST-principles named “Daisy” for the past 4+ years.

Outerthought is currently building a REST-supporting development framework: “Kauri”.

We are an early REST adopter as we were with Java in 1996.

s

Page 5: Devoxx 2008 - REST in Peace

www.devoxx.com

Overall Presentation Goal

Learn how to architect, prototype and build RESTful Web Services and Interactive Web Sites

using appropriate Java frameworks.

Page 6: Devoxx 2008 - REST in Peace

www.devoxx.com

Underlying theme

• Help! My boss wants me to develop REST applications?

s

Page 7: Devoxx 2008 - REST in Peace

www.devoxx.com

What REST means ....

A pragmatical, no-nonsense approach and guiding set of ideas.

A way to think about Web Services!

• As in: ”Distributed Computing System Architectures”

• Sometimes leading to almost religious debates

A nostalgic 'return to the web movement'

Probably a prophecy about the Semantic Web

s

Page 8: Devoxx 2008 - REST in Peace

www.devoxx.com

The problem with REST

You can't just buy it. (tools, products,...)

Big words, theoretic, even esoteric guidance

Often negative advise:

• Do not do this or that.

Too little concrete tips, steps to follow, ...

An architectural style – not an architecture

• Lack of building plans

s

Page 9: Devoxx 2008 - REST in Peace

www.devoxx.com

Resource Oriented Architectures

aka ROA

Term coined in the RWS Book

More practical advise and groundwork

For

• A REST-style architecture

• For building services

• Tied to the Web

• And its main HTTP protocol

m

Page 10: Devoxx 2008 - REST in Peace

www.devoxx.com

Web Essence

Q1: Method Information

• How does the client convey its intentions to the server?

• HTTP method: GET, PUT, POST, DELETE

• URI: e.g. GET /path?method=removeThat

• Entity Body: Envelope with certain format (e.g. SOAP)

Q2: Scope Information

• How does the client tell the server which (part of the) data to operate on

• URI (path or request params)

• Entity Body: Envelope with certain format (e.g. SOAP)

m

Page 11: Devoxx 2008 - REST in Peace

www.devoxx.com

Different types of Web Services

I. RESTFul/Resource Oriented

• Method info in HTTP Method.

• Scoping info in URI.

II. RPC Style

• Entity Body holds Method and Scoping info.

• Single URI: the 'end-point' | Single Method: POST

III. Hybrid

• Method info in the URI, next to the scope info.

• Difficult to spot, only visible when not read-only.

• Often grown out of classic websites. m

Page 12: Devoxx 2008 - REST in Peace

www.devoxx.com

ROA Terminology

#1. Resources

#2. URI's

#3. Representations

#4. Links Between them

The four Concepts

~1. Addressability

~2. Statelessness

~3. Connectedness

~4. Uniform Interface

The four Properties

* as proposed by the RWS Book

m

Page 13: Devoxx 2008 - REST in Peace

www.devoxx.com

#1. A Resource

Something.

Anything.

• Idea, Concept

• Data record, Result, Answer, File,

• Physical item, Real world object.

As soon as it is important enough to

• Reference it by itself.

• Talk about it.

• Get representations from it.

• Perform operations on it.s

Page 14: Devoxx 2008 - REST in Peace

www.devoxx.com

Kinds Of Web Resources

Page 15: Devoxx 2008 - REST in Peace

www.devoxx.com

Kinds Of Web Resources

End-User Data – or 'library resources'

• Content (CMS like)

• Binary Downloads and 'attachments'

• Full Text Search-result-lists, linking to the above

• Almost directly consumed by End-Users

“Faceless” - or 'service resources'

• Manageable Data (json or XML) Items (CRUD)

• Query results – Algorithm results (GET only)

• Predefined one-off views/indexes (GET only)

• Consumed by Custom Applicationss

Page 16: Devoxx 2008 - REST in Peace

www.devoxx.com

Kinds Of Web Resources IIBrowser-Technology-Feeds – or 'site resources'

• Pages/Page Impressions

• (possibly also aggregated)

• Styling/Skinning (CSS / Images)

• Functional Applications

• Forms

• JavaScript logic (or other RIA approach)

• Consumed by web-browsers, supporting the end-user experience.

s

Page 17: Devoxx 2008 - REST in Peace

www.devoxx.com

#2. URI

Universal Resource Identifier

It is the name

And the address of a resource

The existential property of the resource

• If it doesn't have a URI, it isn't a resource

• All resources have (at least) one

http://www.w3.org/DesignIssues/Axioms (TBL)m

Page 18: Devoxx 2008 - REST in Peace

www.devoxx.com

Good URI's Are...

Descriptive

• Reading the URI gives a good idea what to expect.

No surprise / Natural

Following some pattern / structure (Hackable)

• Similar resources have similar URI's, eg

• http://library.org/search/REST

• http://library.org/articles-about/SOAP

Long lasting associated to the resource.

m

Page 19: Devoxx 2008 - REST in Peace

www.devoxx.com

URI to Resource Relation

Can two resources be the same? Can two resources share the same URI?

• No.

• URI's are UNIVERSAL (one for the resource in the whole universe)

• Still at any given time two distinct resources might point to the same data:

• http://project.org/releases/1.0.7.tar.gz

• http://project.org/releases/latest.tar.gz

• Note: two distinct concepts!

m

Page 20: Devoxx 2008 - REST in Peace

www.devoxx.com

URI to Resource Relation II

Can a URI be associated to another resource?

• No. The meaning should stick.

• Note though: Resources do have a live-cycle. They exist/don't-exist at any given time.

Can one resource have more then one URI?

• Yes. Alternatives make resource more accessible. But also dilutes the value of each one.

• Relates to: Are my car-keys in my normal spot(s)

• Make sure there is a canonical variant...

m

Page 21: Devoxx 2008 - REST in Peace

www.devoxx.com

Canonical URI's in Practice

Advised when 2 or more URI's exist for one resource

Solution 1:

• All URI's return 200 OK, and representation in body

• Together with special header:Content-Location: canonical URI

Solution 2:

• Only one URI serves the content (with 200 OK)

• All others return 303 See Also

• Together with the header:Location: canonical URI

m

Page 22: Devoxx 2008 - REST in Peace

www.devoxx.com

~1. Addressability

Question: How many URIs should you foresee?

• Answer: more!

• Increase the surface area of your application.Preference: URI or Description?

1) Goto homepage,

2) Then query for “criteria”

3) Take 3rd option...

Random Access Coordinates To All Resources

• URI's to resources are no accidents, but part of the design. m

Page 23: Devoxx 2008 - REST in Peace

www.devoxx.com

Addressability Matters

URIs can be published anywhere (email, paper, ...)

Addresses can be talked about (link love!)

• Bookmark- and tagging services.

True (addressable) Resources get Web Benefits:

• Caching

• Chaining & Aggregation

• Translation & Validation Services

• Scraping and Mash-up

m

Page 24: Devoxx 2008 - REST in Peace

www.devoxx.com

~2. Statelessness

Every HTTP request for a resource should happen in complete isolation.

• Server never relies on information from previous messages.

Logic Premises:

• Resources are pieces of info on a server

• Addressability says they all should have URI's

Then Statelessness means all server states have a distinct URI.

• e.g. page 2 from Google results about 'REST's

Page 25: Devoxx 2008 - REST in Peace

www.devoxx.com

Statelessness Matters

Superlative of Addressability

• Bookmark-able hooks into earlier conversations

• The 'boemboemboem' without the 'blablabla'

All benefits of addressability, Now for intermediate states:

• Caching, mash-up, aggregation, translation, direct referencing, ...

Most importantly: positive effect on scalability

• Easier distribution across load-balanced servers.

m

Page 26: Devoxx 2008 - REST in Peace

www.devoxx.com

Kinds of State

The bad kind: “Conversational State”

• Builds up a conversation/session.

• Introduces dependency across requests.

The good kind: “Application State”

• Cleanly kept up in the client, the process, the end-user interaction

• Grown by user interaction and received links.

The ugly (hard) kind: “Resource State”

• Server side. Conform the resource life-cycle.m

Page 27: Devoxx 2008 - REST in Peace

www.devoxx.com

#3. Representations

Plato-nic view on things

Resource = the concept, idea, or principle

Representation = what you really get

• The data, The bytes

• a COPY

• Physical resources often have disappointing representations (often status info or metadata)

Note: representations can travel upstream.

• Write operations via PUTs

Page 28: Devoxx 2008 - REST in Peace

www.devoxx.com

Representation Variants

Representations have specific format and language (the resource often has not)

Clients can 'negotiate' preferred variant:

• Request headers: Accept: (mime-types)Accept-language: (iso codes)

Server can describe in which ways representations can vary:

• Response header: Vary: Accept, Accept-language

• Important for caches!Vary: * //can not be cached

s

Page 29: Devoxx 2008 - REST in Peace

www.devoxx.com

On Content Negotiation

1 URI per resource is Good™

1 URI per representation is practical

• More visible and clear

• Still a canonical negotiation URI is possible

• Increased “Addressability”

• Passing URI to translation and validation services

Options

• Through request parameter (@google: ?hl=nl )

• In the /path/resource-name.nl.htmlm

Page 30: Devoxx 2008 - REST in Peace

www.devoxx.com

#4. Links

Ehrm? Not URI's?

Link = fact that the URI gets encoded in the representation

Wow. WOW! (Let it sip through!)

Note: soft-referencing by nature.

(Imagine being 12 and )Getting an SMS with the number

of a new buddy to be SMS-ing with...

s+m

Page 31: Devoxx 2008 - REST in Peace

www.devoxx.com

~3. Connectedness

URI = name-addressing scheme

• Then designing to use them is to ensure Addressability

Links = having representations hold URIs

• Then designing to use them wisely is to ensureConnectedness.

The end-goal is to achieve self-learning behaviour upon the clients

• Publish only one entry URI

• cfr. REST-paper: Hypermedia as the engine of application state

m+s

Page 32: Devoxx 2008 - REST in Peace

www.devoxx.com

~4. The uniform interface

Limited set of resource interactions

• GET, PUT, DELETE (allow for crud-like operations)

• POST

• The escape for the pragmatics

• The Danger zone (breaking ROA properties)

• HEAD: same as GET without the payload

• OPTIONS: self-description of the resource

• Underused.

•Answer in response header:Allow: GET HEAD PUT DELETE

s

Page 33: Devoxx 2008 - REST in Peace

www.devoxx.com

The uniform Interface

The various methods are expected to work in a certain way (Reason: resilience to unreliable networks)

• GET (and HEAD) should be SAFE

• No changes to server-state.

• No side-effects intended by the client.

• Mild side-effects accepted (log, counters, ...)

• PUT and DELETE should be IDEMPOTENT

• Replay/Duplicate of the message does not change the server-state again.

m

Page 34: Devoxx 2008 - REST in Peace

www.devoxx.com

The uniform Interface

• POST, no restrictions. The Sky is the limit

• Design and document for safety and idempotence!

• e.g. uuid for operation, optimistic locking, ...

m

Page 35: Devoxx 2008 - REST in Peace

www.devoxx.com

More Uniform Interfacing!

NOT only about the request-method

• Response Code! (no error-code hiding please!)

• Request Headers (e.g. content negotiation)

• Response Headers

• Mainly Location, Content-Location

• Don't overdo it though: stay away of subtle nuances and unused/unknown concepts

Essence: Principle of least surprise.

• So avoid custom X-Headers and cookiesm

Page 36: Devoxx 2008 - REST in Peace

www.devoxx.com

Caching

Caching is a solution for

• Latency and network traffic.

Critical success factor of the web.

• Don't fight it for 'control' of your website.

• Don't see it as a danger or problem.

The opportunity in “stale”

• Design to help caches do what you think is best

• Buzzphrase: stale and scale

s

Page 37: Devoxx 2008 - REST in Peace

www.devoxx.com

Recap: Resource Oriented Architectures

#1. Resources

#2. URI's

#3. Representations

#4. Links Between them

The four Concepts

~1. Addressability

~2. Statelessness

~3. Connectedness

~4. Uniform Interface

The four Properties

* as proposed by the RWS Book

m

Page 38: Devoxx 2008 - REST in Peace

www.devoxx.com

Recap: Why REST?

•Increased contact surface and deep linking

•Scaling out over stateless servers.

•Safe operations over unreliable networks.

•Benefitting from the web delivery infrastructure.

•A more balanced distribution of code and responsabilities across client and server

•Cut the crap: less layers for the same (no WS-*)

•Blending machine and human Internets:

•One filosophy for building web-sites and -servicess

Page 39: Devoxx 2008 - REST in Peace

www.devoxx.com

Going practical

RESTful webapp development

s

Page 40: Devoxx 2008 - REST in Peace

www.devoxx.com

Analysis and design

Questions to be asked

• what are my resources and their URIs

• mapping services/methods to resources

• optionally: UI – screens and flow

• managing application state

Things to build

• a service: API (i.e. REST), runtime environment, persistency

• a client: custom or browser-baseds

Page 41: Devoxx 2008 - REST in Peace

www.devoxx.com

RESTful web applications

The (web/browser) client needs all the usual stuff

• templates for dynamic behaviour

• forms (!) for interactive behaviour

• skinning

• navigation

• aggregation

Kauri offers all this RIA stuff and more

s

Page 42: Devoxx 2008 - REST in Peace

www.devoxx.com

From entities to resources1. Define the data-set.

2. Split the data-set into resources.

For each resource

3.Name the resource (URI)

4.Supported request methods.

5.Design exchanged representations

1.Integrate (link) the resources

2.Consider typical/normal flow and interaction.

6.Handle error-conditions and

7.Decide upon error-codes.m

Page 43: Devoxx 2008 - REST in Peace

www.devoxx.com

From object models to resources

•OK, so persistent objects/CRUD are easy

/data/{entity}[?q=] GET > list

/data/{entity} POST > create

/data/{entity}/{id} GET mani- PUT > pul- DELETE ate

•But what about the hard stuff?

● Service methods

● Transactions (locks)

● Sessionss

Page 44: Devoxx 2008 - REST in Peace

www.devoxx.com

Acceptable POSTs: the obvious

Creating subordinate resources

• when resource location is under client control

• request = PUT + representation

• response = 200 OK

• when server decides on URI

• request = POST + representation

• response = 201 Created + location header

m

Page 45: Devoxx 2008 - REST in Peace

www.devoxx.com

Less obvious POSTs

Appending resource state (e.g. log entries, audit, chat)

• i.o. to avoid full rewrite of resource state

• PUT should be safe, i.e. cannot be incremental

Be pragmatic:

• POST uri?method=put|delete

• Batch of PUTs

Avoid: anything that will introduce the RPC style

• one endpoint URI

m

Page 46: Devoxx 2008 - REST in Peace

www.devoxx.com

Sessions and State

NOTE: Statelessness means the client is in control

When the statelessness theory ends: unreliable, untrustworthy clients

• e.g. Temptation to go beyond agreed service contract (size, speed, ...)

Keeping state on the server is hard

• Solution1: State Replication

• Solution2: Session Affinity

• Both conflict with scalability needs (clusters)

m

Page 47: Devoxx 2008 - REST in Peace

www.devoxx.com

About cookies...

No problem! (Like custom X-Request-Headers)

The kind of state they contain is the issue!

• Session-id? BOO! (== conversation state)

• application state = OK. But why not use the URI?

Cookies introduce 'special/non standard' use.

Less 'uniform' interface. More surprise.

Breaks back-button behaviour.

m

Page 48: Devoxx 2008 - REST in Peace

www.devoxx.com

Pragmatic with state

Temporary Resources

• Resources are acceptable server-state containers.

• Side-effect creation is acceptable.

• Lease-expire deletion is acceptable.

• Loading resources in memory (cache) is acceptable (cfr. LinkedIn)

Distributed Server State is still an (ugly) issue.

• Server-state == Resource State (hence persistent).

• Resource updates must be known across the cluster!

• Solution easier if non-real-time allowed. (latency)

m

Page 49: Devoxx 2008 - REST in Peace

www.devoxx.com

Temporary Resources

Create the resource

Put subordinate resources in there

Client should keep references

POST /temp/upload HTTP/1.1Host: example.com

201 CreatedLocation: /temp/upload/223

PUT /temp/upload/223/resume/cv-mpo.pdf HTTP/1.1Host: example.com

<data>

PUT /application/20080923/mpo HTTP/1.1Host: example.com

{name:”Marc Portier”, mugshot: “/temp/upload/223/mugshot/mpo.gif”, resume: “/temp/upload/223/resume/cv-mpo.pdf” }

PUT /temp/upload/223/mugshot/mpo.gif HTTP/1.1Host: example.com

<data>

m

Page 50: Devoxx 2008 - REST in Peace

www.devoxx.com

Transactions

Atomic operations across resources?

Insanely difficult in distributed environments

• In principle HTTP is miles away from XA.

• Practical solutions in relaxing your expectations.

• Still a single server transaction should be achievable.

Old Style:

• Escape into POST: batch-handling

• Request scope matches transaction.

The smart trick:

• Call it a resource.m

Page 51: Devoxx 2008 - REST in Peace

www.devoxx.com

Transaction Resources

Create the transaction

Put resources in the transaction

Put the transaction

POST /tx/transfer HTTP/1.1Host: example.com

201 CreatedLocation: /tx/transfer/738

PUT /tx/transfer/738/account/938-883 HTTP/1.1Host: example.com

balance=300PUT /tx/transfer/738/account/553-213 HTTP/1.1Host: example.com

balance=710

PUT /tx/transfer/738 HTTP/1.1Host: example.com

committed=true

m

Page 52: Devoxx 2008 - REST in Peace

www.devoxx.com

Queueing

Caches work well on the read-end

• “Read Cache” Proxy

On the upstream side

• “Write Accept” Proxy

• 202 Accepted

• Client request not handled in real time.

• Location: can point to resource for status-checking

• Only fights latency. Spread load over time.

• Use cases: classic media driven “vote now” m

Page 53: Devoxx 2008 - REST in Peace

www.devoxx.com

Onto tooling

We've got all issues covered.Except the real one:

How to do it?

s

Page 54: Devoxx 2008 - REST in Peace

www.devoxx.com

Lightweight REST Framework for Java

Clear API : ROA concepts• Request-Response• Representations/Entities• Resource and Reference

Symmetric client-server use!

Routing with parsed URI Templates

Many modules under development, a.o.• GWT• JAX-RS

m

Page 55: Devoxx 2008 - REST in Peace

www.devoxx.com

Website

• http://www.restlet.org

Developer Wiki & Documentation

• http://wiki.restlet.org

Mailing List

• http://restlet.tigris.org/servlets/ProjectMailingListList

SVN

• http://restlet.tigris.org/source/browse/restlet/

Issues

• http://restlet.tigris.org/servlets/ProjectIssues

m

Page 56: Devoxx 2008 - REST in Peace

www.devoxx.com

JAX-RS

Annotations for Java coded 'Resource'-POJOS

• Uses URITemplates for mapping

JSR-311

• http://jcp.org/en/jsr/detail?id=311

• Released Oct. 10th 2008

Reference Implementation in Jersey

• https://jersey.dev.java.net/, version 1.0.1 (Dec 1st)

• Subproject of Glassfish

m

Page 57: Devoxx 2008 - REST in Peace

www.devoxx.com

Samplepackage com.mycompany.module1;

import javax.ws.rs.Path;import javax.ws.rs.GET;import javax.ws.rs.ProduceMime;import javax.ws.rs.PathParam;

@Path("helloworld-from-java/{name}")public class HelloWorldResource {

@GET @ProduceMime("text/html") public String foo(@PathParam("name") String name) { return "<html><body>Hello <b>" + name + "</b> Here is my fully " +

"qualified class name: " + getClass().getName() + "</body></html>"; }}

m

Page 58: Devoxx 2008 - REST in Peace

www.devoxx.com

More JAXRS @ Devoxx

Thursday 17:50-18:50

Room 5

by Paul Sandoz

s

Page 59: Devoxx 2008 - REST in Peace

www.devoxx.com

BREAK

s

Page 60: Devoxx 2008 - REST in Peace

www.devoxx.com

On your marks...

We've got all issues covered.Except the real one:

How to do it with Kauri?

s

Page 61: Devoxx 2008 - REST in Peace

www.devoxx.com

Setting the context

BBC Live Services

Social Services back-end for high-impact websites

• tags, annotations, ratings, votes

• to be called from a PHP front-end

The challenges

• MUST: REST

• MUST: XML

• MUST: scale (load, volume, availability)

s

Page 62: Devoxx 2008 - REST in Peace

www.devoxx.com

Requests Minute

Requests Hour

Peak Hours

Peak Requests

Offpeak Share

Offpeak Hours

Offpeak Requests

Total Daily

Total Monthly

(m)

Caching

put Messaging 50 3000 2 6000 20% 22 13200 19200 0.576 queueput Tagging 100 6000 2 12000 20% 22 26400 38400 1.152put Rating/Voting 500 30000 1 30000 20% 23 138000 168000 5.040 queueget tags/page/plain 200 12000 2 24000 20% 22 52800 76800 2.304 shortget tags/page/histogram 500 30000 2 60000 20% 22 132000 192000 5.760 longget tags/user/plain 50 3000 1 3000 20% 23 13800 16800 0.504 shortget tags/user/histogram 500 30000 2 60000 10% 22 66000 126000 3.780 longreplace tags 1 60 2 120 10% 22 132 252 0.008 longadd comment 100 6000 2 12000 20% 22 26400 38400 1.152 queueupdate comment 1 60 2 120 20% 22 264 384 0.012get comments/page 500 30000 2 60000 20% 22 132000 192000 5.760 mediumget comment/user 10 600 2 1200 20% 22 2640 3840 0.115 mediumget rating/voting/page/histogram 500 30000 2 60000 20% 22 132000 192000 5.760 longget rating/voting/user/histogram 10 600 2 1200 20% 22 2640 3840 0.115 long

Total Requests/Month 32.037

Expected load

s

Page 63: Devoxx 2008 - REST in Peace

www.devoxx.com

Architecture

s

Page 64: Devoxx 2008 - REST in Peace

www.devoxx.com

Weight-watcher version

A simple annotation service

s

Page 65: Devoxx 2008 - REST in Peace

www.devoxx.com

How to start?

Install Kauri

• Java 5+

• Maven 2.0.9

• Kauri (0.3)

Get Kauri from www.kauriproject.org

Deploy Kauri libraries to local development repository (M2)

s

Page 66: Devoxx 2008 - REST in Peace

www.devoxx.com

Kauri schematics

Kauri runtime + Maven 2 + Spring + bunch of modules

s

Page 67: Devoxx 2008 - REST in Peace

www.devoxx.com

Supplied Kauri modules

routing

templating

forms

archetype(-prototyping)

dbresources (JPA)

dbmock (json as a data tier for prototyping)

representationbuilder

forms

jQuery

blueprint css

s

Page 68: Devoxx 2008 - REST in Peace

www.devoxx.com

Why Maven (2) ?

dependency management

build system

repository layout (jars + naming convention)

useful @ dev-time, but also:alternative for .war packaging @run-time

m

Page 69: Devoxx 2008 - REST in Peace

www.devoxx.com

DEMO

[1a.] Build hello-world from maven-archetype

s

Page 70: Devoxx 2008 - REST in Peace

www.devoxx.com

What have we done:

Run archetype

~/local/kauri/bin/kauri-project-template.sh

Provide a Page, RUN & Test

• serving static resources

• JaxRS + representation + simple template

s

Page 71: Devoxx 2008 - REST in Peace

www.devoxx.com

kauri.xml

deployment descriptor• modules used in project• java & rest service wiring

m

Page 72: Devoxx 2008 - REST in Peace

www.devoxx.com

Kauri modules

deployed as a JAR in a Maven repo layout

• i.e. unit of reuse – self-contained component

• as opposed to WAR:

• no jar layout

• only reuse possible at the app level

offers Java and/or REST services

m

Page 73: Devoxx 2008 - REST in Peace

www.devoxx.com

DEMO

[1b.] Give our first module a more meaningful name and see how Eclipse development works.

s

Page 74: Devoxx 2008 - REST in Peace

www.devoxx.com

Steps

new general project

mvn eclipse:eclipse & import

search for module1

rename all matches to something else

refactor / move using Eclipse

run with -s option for live modifications

s

Page 75: Devoxx 2008 - REST in Peace

www.devoxx.com

DEMO

[1c.] Templating, routing and REST service wiring.

s

Page 76: Devoxx 2008 - REST in Peace

www.devoxx.com

Steps

Add logo route to router.groovy

Change 'mountpoint' in kauri.xml and change links to use publicUri service

• module can be mounted anywhere now

Add 'search' (rest-)service

• using Google search as a REST service

• with request param passing in router.groovy

s

Page 78: Devoxx 2008 - REST in Peace

www.devoxx.com

About services and URIs

kauri.xml mounts services in the (public) URI space

• use relative (local) URIs !

• rest services have a known interface:

• method support, request params

• returned formats

• content negotiation ...

Within Kauri, rest-services are Restlets

Globally: anything URI accessible (http(s)://, file:// ... various Restlet goodies ...)

m

Page 79: Devoxx 2008 - REST in Peace

www.devoxx.com

DEMO

[2.] Build a RESTful data service via JPA annotated persistent objects.

m

Page 80: Devoxx 2008 - REST in Peace

www.devoxx.com

Steps

Use JPA service (dbresources) to create rest-service/data/annotation GET > list/data/annotation POST > create /data/annotation/{id} GET, PUT, DELETE > manipulation

Annotation resource class – create PO

id, URI, text, creation date

add mapping in kauri.xml

test and manipulate with Poster (Firefox extension)

just a web-service, no site yet

m

Page 82: Devoxx 2008 - REST in Peace

www.devoxx.com

DEMO

[3.] Make it real: the simple annotation tool.

m

Page 83: Devoxx 2008 - REST in Peace

www.devoxx.com

Weight-watcher version

A simple annotation service

m

Page 84: Devoxx 2008 - REST in Peace

www.devoxx.com

The feed

m

Page 85: Devoxx 2008 - REST in Peace

www.devoxx.com

DEMO

[3.] Build the simple annotation tool.

m

Page 86: Devoxx 2008 - REST in Peace

www.devoxx.com

Steps

Steven, teh friendly html ui wizard joins me with his USB stickie

Demo of his work

• build, mvn install, run in prototype mode

• explain dbMock

s

Page 90: Devoxx 2008 - REST in Peace

www.devoxx.com

Before

m

Page 91: Devoxx 2008 - REST in Peace

www.devoxx.com

After

m

Page 92: Devoxx 2008 - REST in Peace

www.devoxx.com

Beyond demoware

For BBC Live Services, the front-end tier (with Kauri) was actually quite easy

• JaxRS, ≈ 4 resource classes

• Kauri template engine for representation generation

Most of work went in the persistence

• partitioning in Java code (DAO)

• mysqlproxy: master/slave setup

s

Page 93: Devoxx 2008 - REST in Peace

www.devoxx.com

BBC Live Services

s

Page 94: Devoxx 2008 - REST in Peace

www.devoxx.com

Kauri Conclusions

Holistic design and collaboration

• from early prototyping to full deployment

• From web-sites to web-services and back (integrated)

Modular construction + wiring

• Choose Routing models for best fit

Standing on the shoulders of

Maven - Spring – JPA – Restlet – jQuery – Blueprint CSS - ...

mhttp://www.flickr.com/photos/mushon/282287572/

Page 95: Devoxx 2008 - REST in Peace

www.devoxx.com

More about Kauri ...

Things we didn't show! (a lot)

• Most notably: forms framework(client-side RIA framework)

• widget library

• Upcoming; rewriting Daisy on top of Kauri

You're all invited @ http://kauriproject.org/

m

Page 96: Devoxx 2008 - REST in Peace

www.devoxx.com

Concluding statement

Insert concluding statement or quote here. Remember, this is the final take-away that will challenge your audience with a call to action.x

m

Page 97: Devoxx 2008 - REST in Peace

www.devoxx.com

We're out to get you!

m

Page 99: Devoxx 2008 - REST in Peace

www.devoxx.com

Thanks for your attention!