REST
REpresentational State Transfer
Roy T. Fielding‘s dissertation
Not a technology/standard/software
Set of architectural constraints
Optimized for common use-cases of the WWW
(based on experience)
REST in the WWW
HTML docs (representations) = states
Hyperlinks + forms = transitions
GET /products/lenya
/products/lenya
/products
/products/cocoon
POST /products/cocoon
title=Apache%20Cocoon
REST Constraints
Client-Server
Layered transport (firewalls, proxies, …)
Caching
Stateless server
Uniform interface
Code on demand
REST Data Elements
Resource (anything that can be addressed,
independent of a particular point in time)
URIs to identify resources
Resource metadata: source link, alternates, …
Representation = data (byte sequence)
Repr. metadata: media type, last modified, …
Uniform Interface
Representation of resources in one of an
emerging set of standard formats
Uniform resource identification mechanism
Messages are self-descriptive:
representation/resource/control metadata
Intermediaries can transform the messages,
e.g. compressing for optimized transport
Common Violations
Indirect application state:
Addressing and caching issues
Cookies (server-side state)
Frames
Incremental processing issues
Embedding metadata in HTML head
<img> without @width, @height
dynamically sized table columns
Apache Sling
Web application framework
JCR for content storage
Process HTTP requests in a RESTful way
Scripts (JSR-233) or Servlets for processing
OSGi for deploying modules at runtime
Application Scenarios
Everything (well, „everything is content“)
WCM, DAM, Wiki, Blog, ERP, …
Especially for content-oriented applications
Sling encourages REST
Thinking in resources (mapped to JCR nodes)
Representation selection (HTML, Atom, PDF,
…) via part of URI
Uniform interface for content handling:
GET + POST + PUT + DELETE
UnRESTful Addressing
/product .jsp ?id=13423
URI doesn't address Not part of URI:
the resource not cacheable
Request Processing in Sling
GET /news/today .atom PUT /news/today ?title=Today
Resource Resource
sling:resourceType sling:resourceType
feed feed
Servlet / Script Servlet / Script
/apps/feed/atom.esp /apps/feed/PUT.esp
Sling Demo
Start application
Connect via WebDAV
Connect via Eclipse Plug-In
Dojo Tree Example
0 comments
Post a comment