<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: RESTful Email over HTTP</title>
	<atom:link href="http://blog.webhooks.org/2009/02/13/restful-email-over-http/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/</link>
	<description>User-defined HTTP callbacks for push, pipes and plugins</description>
	<lastBuildDate>Tue, 04 May 2010 19:35:11 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-174</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 09 Jul 2009 16:51:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-174</guid>
		<description>You could also spec out more advanced actions, requiring more than one request.

Like moving folders, et al.

But it would be just combining existing functionality.</description>
		<content:encoded><![CDATA[<p>You could also spec out more advanced actions, requiring more than one request.</p>
<p>Like moving folders, et al.</p>
<p>But it would be just combining existing functionality.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-173</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 09 Jul 2009 16:50:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-173</guid>
		<description>Email could be extended to include multiple servers.

Obviously, a files api looks just like email, with a few changes.

files
- main
- svr
- fol
- fil

files
- create a fil: POST /api/files/svr0/fol0 &amp; XML
- get a fil&#039;s binary: GET /api/files/svr0/fol0/fil0 &amp; query

If you wanna see the full thing.

main
- get entries: GET /api/files
- get svrs: GET /api/files &amp; query
- search: GET /api/files &amp; query

svr
- get a svr&#039;s entries: GET /api/files/svr0
- get a svr&#039;s subfols: GET /api/files/svr0 &amp; query
- search: GET /api/files/svr0 &amp; query

fol
- create a fol: POST /api/files/svr0 &amp; XML
- get a fol: GET /api/files/svr0/fol0
- get a fol&#039;s entries: GET /api/files/svr0/fol0 &amp; query
- get a fol&#039;s subfols: GET /api/files/svr0/fol0 &amp; query
- get a fol&#039;s fils: GET /api/files/svr0/fol0 &amp; query
- search in a fol: GET /api/files/svr0/fol0 &amp; query
- rename a fol: PUT /api/files/svr0/fol0 &amp; XML
- delete a fol: DELETE /api/files/svr0/fol0
- delete a fol&#039;s entries: DELETE /api/files/svr0/fol0 &amp; query
- delete a fol&#039;s subfols: DELETE /api/files/svr0/fol0 &amp; query
- delete a fol&#039;s fils: DELETE /api/files/svr0/fol0 &amp; query

fil
- create a fil: POST /api/files/svr0/fol0 &amp; XML
- get a fil: GET /api/files/svr0/fol0/fil0
- get a fil&#039;s binary: GET /api/files/svr0/fol0/fil0 &amp; query
- edit a fil: PUT /api/files/svr0/fol0/fil0 &amp; XML
- move a fil: (2 requests)
   1. POST /api/files/svr0/fol0/fil1 &amp; XML
   2. DELETE /api/files/svr0/fol0/fil0
- copy a fil: POST /api/files/svr0/fol0/fil1 &amp; XML
- delete a fil: DELETE /api/files/svr0/fol0/fil0</description>
		<content:encoded><![CDATA[<p>Email could be extended to include multiple servers.</p>
<p>Obviously, a files api looks just like email, with a few changes.</p>
<p>files<br />
- main<br />
- svr<br />
- fol<br />
- fil</p>
<p>files<br />
- create a fil: POST /api/files/svr0/fol0 &amp; XML<br />
- get a fil&#8217;s binary: GET /api/files/svr0/fol0/fil0 &amp; query</p>
<p>If you wanna see the full thing.</p>
<p>main<br />
- get entries: GET /api/files<br />
- get svrs: GET /api/files &amp; query<br />
- search: GET /api/files &amp; query</p>
<p>svr<br />
- get a svr&#8217;s entries: GET /api/files/svr0<br />
- get a svr&#8217;s subfols: GET /api/files/svr0 &amp; query<br />
- search: GET /api/files/svr0 &amp; query</p>
<p>fol<br />
- create a fol: POST /api/files/svr0 &amp; XML<br />
- get a fol: GET /api/files/svr0/fol0<br />
- get a fol&#8217;s entries: GET /api/files/svr0/fol0 &amp; query<br />
- get a fol&#8217;s subfols: GET /api/files/svr0/fol0 &amp; query<br />
- get a fol&#8217;s fils: GET /api/files/svr0/fol0 &amp; query<br />
- search in a fol: GET /api/files/svr0/fol0 &amp; query<br />
- rename a fol: PUT /api/files/svr0/fol0 &amp; XML<br />
- delete a fol: DELETE /api/files/svr0/fol0<br />
- delete a fol&#8217;s entries: DELETE /api/files/svr0/fol0 &amp; query<br />
- delete a fol&#8217;s subfols: DELETE /api/files/svr0/fol0 &amp; query<br />
- delete a fol&#8217;s fils: DELETE /api/files/svr0/fol0 &amp; query</p>
<p>fil<br />
- create a fil: POST /api/files/svr0/fol0 &amp; XML<br />
- get a fil: GET /api/files/svr0/fol0/fil0<br />
- get a fil&#8217;s binary: GET /api/files/svr0/fol0/fil0 &amp; query<br />
- edit a fil: PUT /api/files/svr0/fol0/fil0 &amp; XML<br />
- move a fil: (2 requests)<br />
   1. POST /api/files/svr0/fol0/fil1 &amp; XML<br />
   2. DELETE /api/files/svr0/fol0/fil0<br />
- copy a fil: POST /api/files/svr0/fol0/fil1 &amp; XML<br />
- delete a fil: DELETE /api/files/svr0/fol0/fil0</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Lindsay</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-172</link>
		<dc:creator>Jeff Lindsay</dc:creator>
		<pubDate>Thu, 09 Jul 2009 16:16:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-172</guid>
		<description>Cool stuff. You should put it up on GitHub. :)</description>
		<content:encoded><![CDATA[<p>Cool stuff. You should put it up on GitHub. :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-171</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 09 Jul 2009 16:01:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-171</guid>
		<description>Okay.
Here&#039;s a cleaned diagram of the email svc.
I&#039;ll post more later.

email
- svr
- mbx
- fol
- msg

svr
- get entries: GET /api/email
- get mbxs: GET /api/email &amp; query
- search: GET /api/email &amp; query

mbx
- get entries: GET /api/email/mbx0
- get subfols: GET /api/email/mbx0 &amp; query
- search: GET /api/email/mbx0 &amp; query

fol
- create a fol: POST /api/email/mbx0 &amp; XML
- get a fol: GET /api/email/mbx0/fol0
- get a fol&#039;s entries: GET /api/email/mbx0/fol0 &amp; query
- get a fol&#039;s subfols: GET /api/email/mbx0/fol0 &amp; query
- get a fol&#039;s msgs: GET /api/email/mbx0/fol0 &amp; query
- search in a fol: GET /api/email/mbx0/fol0 &amp; query
- rename a fol: PUT /api/email/mbx0/fol0 &amp; XML
- delete a fol: DELETE /api/email/mbx0/fol0
- delete a fol&#039;s entries: DELETE /api/email/mbx0/fol0 &amp; query
- delete a fol&#039;s subfols: DELETE /api/email/mbx0/fol0 &amp; query
- delete a fol&#039;s msgs: DELETE /api/email/mbx0/fol0 &amp; query

msg
- send a msg: POST /api/email &amp; XML
- get a msg: GET /api/email/mbx0/fol0/msg0
- get a msg&#039;s atts: GET /api/email/mbx0/fol0/msg0 &amp; query
- get a msg&#039;s att: GET /api/email/mbx0/fol0/msg0 &amp; query
- edit a msg: PUT /api/email/mbx0/fol0/msg0 &amp; XML
- move a msg: (2 requests)
   1. POST /api/email/mbx0/fol0/msg1 &amp; XML
   2. DELETE /api/email/mbx0/fol0/msg0
- copy a msg: POST /api/email/mbx0/fol0/msg1 &amp; XML
- delete a msg: DELETE /api/email/mbx0/fol0/msg0</description>
		<content:encoded><![CDATA[<p>Okay.<br />
Here&#8217;s a cleaned diagram of the email svc.<br />
I&#8217;ll post more later.</p>
<p>email<br />
- svr<br />
- mbx<br />
- fol<br />
- msg</p>
<p>svr<br />
- get entries: GET /api/email<br />
- get mbxs: GET /api/email &amp; query<br />
- search: GET /api/email &amp; query</p>
<p>mbx<br />
- get entries: GET /api/email/mbx0<br />
- get subfols: GET /api/email/mbx0 &amp; query<br />
- search: GET /api/email/mbx0 &amp; query</p>
<p>fol<br />
- create a fol: POST /api/email/mbx0 &amp; XML<br />
- get a fol: GET /api/email/mbx0/fol0<br />
- get a fol&#8217;s entries: GET /api/email/mbx0/fol0 &amp; query<br />
- get a fol&#8217;s subfols: GET /api/email/mbx0/fol0 &amp; query<br />
- get a fol&#8217;s msgs: GET /api/email/mbx0/fol0 &amp; query<br />
- search in a fol: GET /api/email/mbx0/fol0 &amp; query<br />
- rename a fol: PUT /api/email/mbx0/fol0 &amp; XML<br />
- delete a fol: DELETE /api/email/mbx0/fol0<br />
- delete a fol&#8217;s entries: DELETE /api/email/mbx0/fol0 &amp; query<br />
- delete a fol&#8217;s subfols: DELETE /api/email/mbx0/fol0 &amp; query<br />
- delete a fol&#8217;s msgs: DELETE /api/email/mbx0/fol0 &amp; query</p>
<p>msg<br />
- send a msg: POST /api/email &amp; XML<br />
- get a msg: GET /api/email/mbx0/fol0/msg0<br />
- get a msg&#8217;s atts: GET /api/email/mbx0/fol0/msg0 &amp; query<br />
- get a msg&#8217;s att: GET /api/email/mbx0/fol0/msg0 &amp; query<br />
- edit a msg: PUT /api/email/mbx0/fol0/msg0 &amp; XML<br />
- move a msg: (2 requests)<br />
   1. POST /api/email/mbx0/fol0/msg1 &amp; XML<br />
   2. DELETE /api/email/mbx0/fol0/msg0<br />
- copy a msg: POST /api/email/mbx0/fol0/msg1 &amp; XML<br />
- delete a msg: DELETE /api/email/mbx0/fol0/msg0</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-170</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 09 Jul 2009 12:54:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-170</guid>
		<description>&gt; I also translated the semantics of file attachments to file uploads, which let you take advantage of the existing support there.

BTW. My implementation creates email in just one request. Even with attachments.

To accomplish this from JavaScript on the client side was roundabout. JavaScript cannot access file uploads directly, only submit their parent form to the server. The attachments are uploaded via an IFrame, like Gmail, and their binary data returned to the client/JavaScript. This is a separate passthrough web service, leaving no trace on the server. That was the real sleight of hand.

The message is sent as a custom web service request containing the metadata (from, to, subject) and the message (text, html, attachments). 

Originally I built it to send inline base64 encode binary (like real email), but then later changed it to allow either inline or multipart.

This mimics the email read request. Can either opt for inline binary or link uri to binary.</description>
		<content:encoded><![CDATA[<p>&gt; I also translated the semantics of file attachments to file uploads, which let you take advantage of the existing support there.</p>
<p>BTW. My implementation creates email in just one request. Even with attachments.</p>
<p>To accomplish this from JavaScript on the client side was roundabout. JavaScript cannot access file uploads directly, only submit their parent form to the server. The attachments are uploaded via an IFrame, like Gmail, and their binary data returned to the client/JavaScript. This is a separate passthrough web service, leaving no trace on the server. That was the real sleight of hand.</p>
<p>The message is sent as a custom web service request containing the metadata (from, to, subject) and the message (text, html, attachments). </p>
<p>Originally I built it to send inline base64 encode binary (like real email), but then later changed it to allow either inline or multipart.</p>
<p>This mimics the email read request. Can either opt for inline binary or link uri to binary.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-169</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 02 Jul 2009 12:34:23 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-169</guid>
		<description>Okay.
I&#039;ll put something together.
Names changed (to protect the innocent), of course.</description>
		<content:encoded><![CDATA[<p>Okay.<br />
I&#8217;ll put something together.<br />
Names changed (to protect the innocent), of course.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Lindsay</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-168</link>
		<dc:creator>Jeff Lindsay</dc:creator>
		<pubDate>Thu, 02 Jul 2009 12:28:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-168</guid>
		<description>I know there&#039;s no secret, but there&#039;s still work in designing a proper REST API for these other services. If you&#039;re saying your implementation is public domain, let&#039;s see a link!</description>
		<content:encoded><![CDATA[<p>I know there&#8217;s no secret, but there&#8217;s still work in designing a proper REST API for these other services. If you&#8217;re saying your implementation is public domain, let&#8217;s see a link!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-167</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 02 Jul 2009 12:26:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-167</guid>
		<description>Open source? It&#039;s public domain. There&#039;s nothing secret here.

The api&#039;s weren&#039;t that hard. Once everything is on paper (Visio), it all falls into place.

The hardest part was going to be managing state/session, so I skipped it and went straight HTTP Basic. This let&#039;s the browser handle session/state.

I built it on Java/ColdFusion. (Barf! An organization policy.)

And like I said, it&#039;s a pretty standard Active Directory shop. So authN, authZ was already taken care of.

Like someone said, XML/JSON is direct relation, RSS is custom translation. I made XML first, then added JSON and RSS.</description>
		<content:encoded><![CDATA[<p>Open source? It&#8217;s public domain. There&#8217;s nothing secret here.</p>
<p>The api&#8217;s weren&#8217;t that hard. Once everything is on paper (Visio), it all falls into place.</p>
<p>The hardest part was going to be managing state/session, so I skipped it and went straight HTTP Basic. This let&#8217;s the browser handle session/state.</p>
<p>I built it on Java/ColdFusion. (Barf! An organization policy.)</p>
<p>And like I said, it&#8217;s a pretty standard Active Directory shop. So authN, authZ was already taken care of.</p>
<p>Like someone said, XML/JSON is direct relation, RSS is custom translation. I made XML first, then added JSON and RSS.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Lindsay</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-166</link>
		<dc:creator>Jeff Lindsay</dc:creator>
		<pubDate>Wed, 01 Jul 2009 21:39:28 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-166</guid>
		<description>Is this open source? Could it be? ;)</description>
		<content:encoded><![CDATA[<p>Is this open source? Could it be? ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://blog.webhooks.org/2009/02/13/restful-email-over-http/#comment-165</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Wed, 01 Jul 2009 20:27:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.webhooks.org/?p=111#comment-165</guid>
		<description>I&#039;ve been developing something similar for a intranet portal.

To make development easier, I created RESTful web services for IM (XMPP), email (Exchange, IMAP, POP, SMTP), files (MS/Samba/CIFS), and databases (MSSQL).

Then, all I had to do was authenticate a user and impersonate them for all those services. All these services used their same Active Directory domain credentials.

People used it mainly if they couldn&#039;t VPN/RDP to their machine. E.g., mobile access, other person&#039;s computer, et al.

Some people even started using feed readers to browse stuff directly.

I chose to use SSL and do HTTP Basic authentication on the portal application as well as the web services. It made everything easier (no session management).</description>
		<content:encoded><![CDATA[<p>I&#8217;ve been developing something similar for a intranet portal.</p>
<p>To make development easier, I created RESTful web services for IM (XMPP), email (Exchange, IMAP, POP, SMTP), files (MS/Samba/CIFS), and databases (MSSQL).</p>
<p>Then, all I had to do was authenticate a user and impersonate them for all those services. All these services used their same Active Directory domain credentials.</p>
<p>People used it mainly if they couldn&#8217;t VPN/RDP to their machine. E.g., mobile access, other person&#8217;s computer, et al.</p>
<p>Some people even started using feed readers to browse stuff directly.</p>
<p>I chose to use SSL and do HTTP Basic authentication on the portal application as well as the web services. It made everything easier (no session management).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
