blob: 74a66893d2fe3f9ccc73fabf9599def5381f9fb3 [file] [log] [blame]
---
layout: post
title: Restful Objects
date: '2011-08-03T13:02:38+00:00'
permalink: restful_objects
---
<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; ">
<p>Now that we have our <a title="Apache Isis 0.1.2 (incubating)&nbsp;Released" href="http://danhaywood.com/2011/07/18/apache-isis-0-1-2-incubating-released/" data-mce-href="http://danhaywood.com/2011/07/18/apache-isis-0-1-2-incubating-released/">first release of Apache Isis</a> out of the door, I've been spending some time on&nbsp;<a title="Restful Objects" href="http://restfulobjects.org/" data-mce-href="http://restfulobjects.org/">Restful Objects</a>, which forms the basis of the <a title="Apache Isis JSON Viewer" href="http://incubator.apache.org/isis/viewer/json/index.html" data-mce-href="http://incubator.apache.org/isis/viewer/json/index.html">JSON viewer</a> within Isis.</p>
<p>The idea of Restful Objects&nbsp;is to provide a standard, generic RESTful interface for domain object models, exposing representations of their structure using JSON and enabling interactions with domain object instances using HTTP GET, POST, PUT and DELETE.</p>
<p><img class="mceWPmore mceItemNoResize" title="More..." src="http://danhaywood.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" data-mce-src="http://danhaywood.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" style="border-top-width: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-top-style: dotted; border-top-color: #cccccc; display: block; width: 792px; height: 12px; margin-top: 15px; margin-right: auto; margin-bottom: 0px; margin-left: auto; background-image: url(http://danhaywood.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/more_bug.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: 100% 0%; background-repeat: no-repeat no-repeat; " />The <a title="Restful Objects" href="http://restfulobjects.org/" data-mce-href="http://restfulobjects.org/">Restful Objects</a> website is a place where the specification will be documented as it evolves, and if you take a look through the spec as it stands you may realize that it's very much based on the idea of a domain model as envisaged by naked objects. &nbsp; That is:</p>
<ul>
<li>the start page provides links to the set of registered services/repositories</li>
<li>from these services, references to domain object instances can be obtained</li>
<li>each domain object has properties, collections and actions</li>
<li>the usual business rules (hiding, disabling and validating) are supported</li>
<li>actions (idempotent or non-idempotent) can be invoked</li>
</ul>
<p>More generally, you'll see that all the representations are fully self-describing, opening up the possibility of generic viewers to be implemented if required, eg in languages such as HTML5/Ajax, Flex, Silverlight etc etc.</p>
<p>Alternatively, the representations can be consumed directly by a bespoke application.</p>
<p>One of the nice things about this specification is that it is completely language-independent. &nbsp;As you might expect, I'll be implementing this specification through the Isis JSON viewer, and using that implementation to refine the spec. &nbsp;In addition Richard Pawson is hoping to commit to working on a similar implementation for <a title="Naked Objects MVC" href="http://nakedobjects.net/" data-mce-href="http://nakedobjects.net">Naked Objects MVC</a> (he's a co-author on the Restful Objects site).</p>
<p>And, if you know of or are the author of another naked objects-style framework, eg written in Ruby or Python, and the idea of Restful Objects interests you, then I'd love to hear from you.</p></span>