I'm in San Francisco attending QCon 2008 this week.
5:15pm
Designing Enterprise IT Systems with REST: A (Cloudy) Case Study
presenter: Stuart Charlton, Chief Software Architect, Elastra
Web architecture helps to burst silos
Classical "Good SOA" interfaces
FEA - large dictionary for Canonical Semantics
Conway's Law: http://en.wikipedia.org/wiki/Conway%27s_law
"...organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations"
"Any piece of software reflects the organizational structure that produced it"
"It is a consequence of the fact that two software modules A and B cannot interface correctly with each other unless the designer and implementer of A communicates with the designer and implementer of B. Thus the interface structure of a software system necessarily will show a congruence with the social structure of the organization that produced it."
The Hypermedia Alternative
- create a document that describes a "state machine"
Problem Domain
(Elastra is a cloud computing vendor)
- IT Services Management & Provisioning
Architectural & Change Considerations
Designs: Architectural Views
- Lifecycle: birth, growth, failure, recovery, death
Organizational & Geographic Distribution
Governance Fallacy:
...Federation: there is a chief at the top that has the will and the control authority
versus
...Confederation
The Decentralized, Declarative Data Center
You don't need a registry in a RESTful collection of services - by definition, a REST request is self-describing (?)
Graph of Information and Interfaces
The agent (browser) surfs the graph of information and interfaces -- nodes of which may expose Dynamic Interfces - which results in a new or changed bit of information (and may modify the graph of information and interfaces).
Hypermedia is a mix of data and control
Data Out (GET)
Data In (PUT)
Interface Out (GET)
Process Something (POST)
==> returns Response Codes
What's a Dynamic Interface?
- Interaction port that is bound at runtime
-- CORBA Dynamic Invocation interface
-- java.lang.Reflect
-- capability to negotiate (e.g. TELNET)
- Agent matches what they know to what's available
- The Big Ddifference? Metadata over Methods
-- The semantics are in the context of the link
How can I describe my interfaces?
-Tightly Couples
-- XML Schema Definition with minOccurs > 0
- Looser Coupled
-- Dynamically generated XML Schema Definitions
-- Edit Link Relations (e.g. AtomPub Media Entries)
-- Forms (e.g. XForms, HTML)
-- Annotate each field with a Persisent URL
What about Versioning and Provenance?
- "Metabase" Intermediary
-- Annotation
---- Collections, Search, SPARQL Query
---- Shredded historical representations
Tooling is a bit sparse...
Security: Federated Identity
- SAML (very robust in a Java world) - complex
- WS-Federation (for Microsoft integration)
- OpenID (mind the phishing)
- Point-to-Point (sadly)
- OAuth has promise but is very young - the current flavor for RESTful implementations
Towards the Semantic Web
- Its not crazy - its just
-- layering logic on top of the web (an Open-World RDBMS)
-- enabling querying and mashing of web pages without neurosurgery
- SPARQL ("sparkle") is very big win for RESTful implementations
-- query database or the web of hypermedia
-- same syntax - nothing changes
-- declarative integrity enforcement for PUT and POST
- RDFa and GRDDL are easy to use (microformats?)
-- just annotate your HTML or write your own XSLT
Semantic Web Client Library - Query the web
-- http://www4.wiwiss.fu-berlin.de/bizer/ng4j/semwebclient
To Research: RDF serialization of JSON