Object Oriented REST?

As mentioned in previous blog, REST is a style than a systematic way defining distributed interfaces. Given how it’s used today, there is a big gap between how it’s used and sophisticated software system development.

The gap between REST and OO

Bothered by SLOW Web UI to manage vSphere? Want to manage ALL your VMware vCenters, AWS, Azure, Openstack, container behind a SINGLE pane of glass? Want to search, analyze, report, visualize VMs, hosts, networks, datastores, events as easily as Google the Web? Find out more about vSearch 3.0: the search engine for all your private and public clouds.

We all know OOD/OOP dominate modern application software development today. The key value of OO is higher level of modularity so that developers can think at the object level rather than the function and data level in the procedural programming. It’s also much more natural to map the application domain to the programming domain while designing software than before. These benefits result in higher productivity of a development team, which make OO almost a default in application development today. Note that we only discuss application development, not system software like operating system. In the foreseeable future, procedural programming is still dominant there.

What is the idea?

Now let us see how we can fill the gap of REST and OOP. One of the key concepts in REST is resource, which can be created, read, updated, and deleted (CRUD, sounds like SQL?). These CRUD operations are then mapped to different HTTP methods like PUT, GET, POST, and DELETE correspondingly. All sounds good but a little complexity un-necessarily at the protocol level.

If we think of the different resources as objects, then the gap is filled in some way. Each resource type is defined as a class which has four methods, which correspond to CRUD. The object model built in this way is quite straight forward.

The problem is not all the object model fitting into this CRUD style. But people would like to use REST anyway given its popularity. Even complicated is the association of these resources, which can be a little difficult to define.

All the discussion and thinking are in one direction – how to create OO model from an existing REST? How about the other way – how to create a REST API that is OO friendly or OO ready? You will find the problem becomes easier all the sudden.

How it works?

The process has to start from an OO model. Assume you already have one. It has a type definition among others:

class Foo
  Attribute A1;
  Attribute A2;
  Method M1();
  Method M2();

Now you can easily design a URL that fits REST style:

GET http://<target_system_base_url>/obj=<obj_id>&attr=A1

This gets you a XML message of attribute A1.

POST http://<target_system_base_url>/obj=<obj_id>&method=M2

This activates the method M2 at the server side with the parameters in POST body which are not shown here.

Here you don’t need other methods other than GET and POST, or simply POST. Keeping GET method has a little benefit that you can use any browser to view the content of the resource. When using POST method and you have extra parameters to pass in, you have to include them inside the body of request message.

The obj_id should have two parts: the type name and the ID. Putting it in SQL way, they are the table name and the primary key value. Alternatively, you can flatten it out to have only one unique value for every object despite its type. In so doing, you have to have a look up table at server side to reverse the single value to type. Both work fine, but I think the former way works better.

What is more?

With the above object model to URL mapping, a systematic way is formed to handle the problem. It’s not fully done yet. It still lacks details on passing back and forth the attribute, parameter and return values. Fortunately it’s not a big deal. XML serialization can help here as it does for the SOAP with WSDL. Of course you don’t need all the WSDL schema here but the data type definition and the message definition. The reason why later is needed is to handle multiple parameters in a method, where you have to define the sequence and packaging. This part is however optional if we all agree to a convention for example, first parameter’s serialized XML message comes first with its parameter name as its enclosing tag.


With OO REST, you can focus on the object model design instead of URL syntax, which is in my opinion really wrong focus. For any design, the key element is the concept model. In software API design, the concept model is the object model. Focusing on the object model gets you better, not sure though, chance for easy to use API design.

Secondly, OO REST is friendly for code generation. Once you have a good object model, you can generate code and facilitate the underlying plumbing code for both the server and client. In today’s REST, you have to pretty much code everything manually. Unfortunately, we don’t have tools to support this but it’s not a big deal even if you do it by yourself. Ideally we should have some sort of standard tools for this.

Last, but not the least, OO REST is still REST even though not in the conventional way. If you like to code at REST level, you can easily guess the URL without looking up the spec for exact URL pattern as you have to do today. So it’s a relief for everyone.

This entry was posted in Software Development and tagged , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

One Comment

  1. David Rousseau
    Posted January 12, 2010 at 3:35 pm | Permalink

    Hi Steve,

    I’m happy to see that you’ve been converted to REST 😉
    Reading yesterday your previous post, I was convinced that you’ll stay w/ SOAP.

    Regarding REST & WSDL:


2 Trackbacks

Post a Comment

Your email is never published nor shared. Required fields are marked *


You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


    My company has created products like vSearch ("Super vCenter"), vijavaNG APIs, EAM APIs, ICE tool. We also help clients with virtualization and cloud computing on customized development, training. Should you, or someone you know, need these products and services, please feel free to contact me: steve __AT__ doublecloud.org.

    Me: Steve Jin, VMware vExpert who authored the VMware VI and vSphere SDK by Prentice Hall, and created the de factor open source vSphere Java API while working at VMware engineering. Companies like Cisco, EMC, NetApp, HP, Dell, VMware, are among the users of the API and other tools I developed for their products, internal IT orchestration, and test automation.