Morning all,<br><br>I'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'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're officially approved on Wednesday). In any case let me know if you think we'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 "standard" 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><?xml version="1.0" encoding="utf-8"?><br><feed xmlns="<a href="http://www.w3.org/2005/Atom">http://www.w3.org/2005/Atom</a>"><br> <br> <title>Open Cloud Computing Interface (OCCI)</title><br>
<subtitle>A virtual data center over OCCI.</subtitle><br> <link href="<a href="http://api.example.com/occi/">http://api.example.com/occi/</a>" rel="self"/><br> <link href="<a href="http://api.example.com/">http://api.example.com/</a>"/><br>
<updated>2003-12-13T18:30:02Z</updated><br> <author><br> <name>John Doe</name><br> <email><a href="mailto:johndoe@example.com">johndoe@example.com</a></email><br> </author><br>
<id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id><br><br> <entry><br> <id>tag:<a href="http://example.com">example.com</a>,2008-12-31:debian-linux-appliance</id><br> <title>Debian GNU/Linux 5.0 Virtual Appliance</title><br>
<summary>Base installation of Debian GNU/Linux 5.0</summary><br> <content type="application/ovf+xml"><br> <Envelope xmlns="<a href="http://schemas.dmtf.org/ovf/envelope/1">http://schemas.dmtf.org/ovf/envelope/1</a>"<br>
xmlns:ovf="<a href="http://schemas.dmtf.org/ovf/envelope/1">http://schemas.dmtf.org/ovf/envelope/1</a>" ><br> <References><br> <File ovf:id="file1" ovf:href="virtual-disk.vmdk" ovf:size="148251374"/><br>
<VirtualSystem ovf:id="Debian Virtual Appliance"><br> <VirtualHardwareSection ovf:transport="iso"><br> <Info>4Gb, 2 CPU, 1 disk, 2 nic virtual machine</Info><br>
...<br> </VirtualHardwareSection><br> </VirtualSystem><br> </References><br> </Envelope><br> </content><br> <updated>2008-12-31T23:59:59Z</updated><br>
</entry><br><br></feed><br></pre><br>