Restful Objects is a standard covering RESTful interfaces to ___domain object models. The specification is published under a Creative Commons license.
Representations and resources defined by the standard
editThe standard defines a small set of JSON representations covering the generic constructs in a ___domain object model including the following:
- A list of links to ___domain objects
- A single ___domain object
- A property, collection, belonging to a ___domain object
- An action that may be invoked on a ___domain object
- An action result (which will typically include a ___domain object or list)
- A ___domain service (essentially a stateless ___domain object)
- A small number of very specific representations such as Home, Version, and User.
Restful Objects also defines a standard set of resources for accessing or manipulating these representations. The specification defines which HTTP methods may be used with each resource, and their meaning. The table below shows a partial summary:
HTTP method | Object | Property | Collection | Action[clarify] | Action Invoke[clarify] |
---|---|---|---|---|---|
GET | Object summary, member summary, property values | Property, details and value | Collection details and content | Action prompt | Invoke (if query only) |
PUT | Update or clear multiple property values | Update or clear value | Add object (if set semantics) | — – 405 error | Invoke (if idempotent) |
DELETE | Delete object | Clear value | Remove object | — – 405 error | — – 405 error |
POST | — – 405 error | — – 405 error | Add object (if list semantics) | — – 405 error | Invoke (any) |
Taken together the resources and representations allow the complete functionality of a ___domain object model to be accessed over HTTP. The following diagram, taken from the specification, illustrates the relationship between the most commonly used resources and representations:
History and status
editThe Restful Objects specification version 1.0.0 was released in June 2012.
Framework implementations
editThere are three known implementations of the Restful Objects specification, all open source:
- Apache Causeway (for the Java platform)
- Naked Objects for .NET (for the .NET platform)
- Restful Objects for Ruby (for the Ruby platform)
Relationship to other ideas
editThe Restful Objects specification states that it operates at a higher-level of abstraction than other restful standards such as the JAX-RS specifications for Java platform, or the WCF specification on .NET. There are some conceptual similarities to Odata - though Restful Objects places much more emphasis on exposing the behaviour of ___domain objects, not just their data.
There is an overlap with the naked objects pattern, in that both are concerned with creating generic interfaces to ___domain objects models. But while the latter creates some kind of user interface, Restful Objects creates an API - specifically a Restful API. The first two frameworks to implement the Restful Objects standard were both built on top of existing frameworks that implement the Naked Objects pattern.