Morning all,<br><br>I&#39;ve spent a lot of today buried in RFCs and the like with a view to roughing up an API and getting this show on the road. Some of the design goals below are pretty obvious (HTTP based), others less so (WebDAV support). <br>
<br>My current line of thinking is around using Atom which would allow you to point browsers, newsreaders and a myriad other existing Atom clients directly at your cloud entry point (e.g. <a href="http://api.example.com/occi">http://api.example.com/occi</a>) and get a human readable list of virtual machines back, possibly with actionable links (e.g. start, stop, restart) and maybe even a pretty HTML interface. FWIW virtually all of Google&#39;s APIs are GData, which is an extension of Atom.<br>
<br>Anyway hopefully this small start will get the creative juices flowing - feel free to hack away (it is a wiki after all, at least until we&#39;re officially approved on Wednesday). In any case let me know if you think we&#39;re on the right track, or just feel like a religious debate over e.g. the merits of JSON over XML.<br>
<br>Have yourselves a good weekend,<br><br>Sam<br><br><a href="http://wiki.cloudcommunity.org/wiki/Open_Cloud_Computing_Interface_%28OCCI%29">http://wiki.cloudcommunity.org/wiki/Open_Cloud_Computing_Interface_(OCCI)</a><br>
<h2><span class="mw-headline">Overview </span></h2>
<p>The Open Cloud Computing Interface (OCCI) is an API being developed by an <a href="http://en.wikipedia.org/wiki/Open_Grid_Forum" class="extiw" title="w:Open_Grid_Forum">Open Grid Forum</a> working group.
</p>
<a name="Design_goals"></a><h2><span class="editsection"></span><span class="mw-headline">Design goals </span></h2>
<ul><li> Based on <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol" class="extiw" title="w:Hypertext_Transfer_Protocol">Hypertext Transfer Protocol (HTTP)</a>
</li><li> Using <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" class="extiw" title="w:Representational_State_Transfer">Representational State Transfer (REST)</a> (with <a href="http://www.stucharlton.com/blog/archives/000141.html" class="external text" title="http://www.stucharlton.com/blog/archives/000141.html" rel="nofollow">HATEOAS</a>?)
</li><li> Requires <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security" class="extiw" title="w:Transport_Layer_Security">Transport Layer Security (TLS)</a> for integrity and confidentiality
</li><li> Relies on HTTP for security (rather than signing requests which <a href="http://cloudsecurity.org/2008/12/18/whats-new-in-the-amazon-cloud-security-vulnerability-in-amazon-ec2-and-simpledb-fixed-75-months-after-notification/" class="external text" title="http://cloudsecurity.org/2008/12/18/whats-new-in-the-amazon-cloud-security-vulnerability-in-amazon-ec2-and-simpledb-fixed-75-months-after-notification/" rel="nofollow">caused problems</a> for Amazon):
<ul><li> <a href="http://en.wikipedia.org/wiki/Basic_access_authentication" class="extiw" title="w:Basic_access_authentication">HTTP Basic access authentication</a>
</li><li> <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake" class="extiw" title="w:Transport_Layer_Security">TLS Client certificate authentication</a>
</li><li> <a href="http://en.wikipedia.org/wiki/OAuth" class="extiw" title="w:OAuth">OAuth</a>
</li></ul>
</li><li> Single URL entry point for trivial client configuration and support of multiple different APIs (e.g. <a href="http://api.example.com/occi" class="external text" title="http://api.example.com/occi" rel="nofollow">http://api.example.com/<b>occi</b></a>)
</li><li> Single structured data format (e.g. <a href="http://en.wikipedia.org/wiki/XML" class="extiw" title="w:XML">XML</a> vs <a href="http://en.wikipedia.org/wiki/JSON" class="extiw" title="w:JSON">JSON</a> vs ???)
</li><li> Sensible, transparent versioning - only one API URL for all clients (perhaps using <a href="http://barelyenough.org/blog/2008/05/versioning-rest-web-services/" class="external text" title="http://barelyenough.org/blog/2008/05/versioning-rest-web-services/" rel="nofollow">HTTP content negotiation</a>)
</li><li> Random <a href="http://en.wikipedia.org/wiki/UUID#Version_4_.28random.29" class="extiw" title="w:UUID">UUIDs</a> (version 4) for internal object identification (opaque is good for security) e.g. {f47ac10b-58cc-<b>4</b>372-<b>a</b>567-0e02b2c3d479}
</li><li> <a href="http://en.wikipedia.org/wiki/WebDAV" class="extiw" title="w:WebDAV">WebDAV</a> interface for native OS GUI manipulation? (e.g. drag VM from library folder to cloud to start, delete to stop, etc.)
<ul><li> WebDAV adds collections et al in a &quot;standard&quot; fashion
</li><li> Interesting implications for getting files into and out of the cloud
</li></ul>
</li><li> <a href="http://en.wikipedia.org/wiki/XML" class="extiw" title="w:XML">XML</a> responses (with <a href="http://en.wikipedia.org/wiki/XML_namespace" class="extiw" title="w:XML_namespace">XML namespaces</a> for extensibility)
<ul><li> <a href="http://en.wikipedia.org/wiki/Atom_%28standard%29" class="extiw" title="w:Atom_(standard)">Atom</a> and/or AtomPub format (for extensive client library support?) ala <a href="http://code.google.com/apis/gdata/" class="external text" title="http://code.google.com/apis/gdata/" rel="nofollow">Google GData APIs</a>
</li></ul>
</li></ul>
<a name="Objects"></a><h3><span class="editsection"></span><span class="mw-headline">Objects</span></h3>
<ul><li> <b>Workload</b>: initially virtual machines (e.g. OVF), potentially later applications (e.g. Ruby gem, Python egg, Java WAR/EAR)
<ul><li> Can be identified by <a href="http://en.wikipedia.org/wiki/Internet_media_type" class="extiw" title="w:Internet_media_type">Internet media type</a> (e.g. application/ovf+xml)
</li></ul>
</li><li> <b>Container</b>: initially hypervisor (e.g.
Hyper-V/KVM/VMware/Xen), potentially later depending on workload (e.g.
Java app server for Java WAR/EAR)
</li></ul>
<a name="Sandbox"></a><h2><span class="editsection"></span><span class="mw-headline">Sandbox </span></h2>
<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br>&lt;feed xmlns=&quot;<a href="http://www.w3.org/2005/Atom">http://www.w3.org/2005/Atom</a>&quot;&gt;<br> <br>  &lt;title&gt;Open Cloud Computing Interface (OCCI)&lt;/title&gt;<br>
  &lt;subtitle&gt;A virtual data center over OCCI.&lt;/subtitle&gt;<br>  &lt;link href=&quot;<a href="http://api.example.com/occi/">http://api.example.com/occi/</a>&quot; rel=&quot;self&quot;/&gt;<br>  &lt;link href=&quot;<a href="http://api.example.com/">http://api.example.com/</a>&quot;/&gt;<br>
  &lt;updated&gt;2003-12-13T18:30:02Z&lt;/updated&gt;<br>  &lt;author&gt;<br>    &lt;name&gt;John Doe&lt;/name&gt;<br>    &lt;email&gt;<a href="mailto:johndoe@example.com">johndoe@example.com</a>&lt;/email&gt;<br>  &lt;/author&gt;<br>
  &lt;id&gt;urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6&lt;/id&gt;<br><br>  &lt;entry&gt;<br>    &lt;id&gt;tag:<a href="http://example.com">example.com</a>,2008-12-31:debian-linux-appliance&lt;/id&gt;<br>    &lt;title&gt;Debian GNU/Linux 5.0 Virtual Appliance&lt;/title&gt;<br>
    &lt;summary&gt;Base installation of Debian GNU/Linux 5.0&lt;/summary&gt;<br>    &lt;content type=&quot;application/ovf+xml&quot;&gt;<br>      &lt;Envelope xmlns=&quot;<a href="http://schemas.dmtf.org/ovf/envelope/1">http://schemas.dmtf.org/ovf/envelope/1</a>&quot;<br>
        xmlns:ovf=&quot;<a href="http://schemas.dmtf.org/ovf/envelope/1">http://schemas.dmtf.org/ovf/envelope/1</a>&quot; &gt;<br>        &lt;References&gt;<br>          &lt;File ovf:id=&quot;file1&quot; ovf:href=&quot;virtual-disk.vmdk&quot; ovf:size=&quot;148251374&quot;/&gt;<br>
          &lt;VirtualSystem ovf:id=&quot;Debian Virtual Appliance&quot;&gt;<br>            &lt;VirtualHardwareSection ovf:transport=&quot;iso&quot;&gt;<br>              &lt;Info&gt;4Gb, 2 CPU, 1 disk, 2 nic virtual machine&lt;/Info&gt;<br>
              ...<br>            &lt;/VirtualHardwareSection&gt;<br>          &lt;/VirtualSystem&gt;<br>        &lt;/References&gt;<br>      &lt;/Envelope&gt;<br>    &lt;/content&gt;<br>    &lt;updated&gt;2008-12-31T23:59:59Z&lt;/updated&gt;<br>
  &lt;/entry&gt;<br><br>&lt;/feed&gt;<br></pre><br>