<?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/"
		>
<channel>
	<title>Comments on: Why REST Failed</title>
	<atom:link href="http://cafe.elharo.com/web/why-rest-failed/feed/" rel="self" type="application/rss+xml" />
	<link>http://cafe.elharo.com/web/why-rest-failed/</link>
	<description>Longer than a blog; shorter than a book</description>
	<lastBuildDate>Tue, 09 Mar 2010 18:31:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Greg</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-454058</link>
		<dc:creator>Greg</dc:creator>
		<pubDate>Mon, 28 Dec 2009 15:34:06 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-454058</guid>
		<description>There was a little known open source project long ago that implemented a whole slew of secure HTTP methods in Java--each with their own specific semantics--as both a client and a server at every Web point to implement Groove type collaboration (OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK,  NOTIFY, PUBLISH, SUBSCRIBE, FILTER, SEARCH, LOGON, LOGOFF, CREATE, SETUP, RUN, INVOKE, HISTORY, COMPLETE, TERMINATE, ESTIMATE, EXAMINE, REGISTER, UNREGISTER, COMMIT, ROLLBACK, PROXY, BROKER).[1]  

It&#039;s true you can implement everything with GET and POST, but at some point there&#039;s no need to do yet another Web stack.   The more features that get adopted and technologies that support them, e.g. pub-sub, ajax, etc, the richer the overall experience.   

I agree REST is a plumbing technology, so the only thing slowing the adoption of REST is the clear value to the end user, instead of the app developer.  That sounds like a good blog post....


[1] http://web.archive.org/web/20001012075129/magi.endeavors.org/html/methodology.html</description>
		<content:encoded><![CDATA[<p>There was a little known open source project long ago that implemented a whole slew of secure HTTP methods in Java&#8211;each with their own specific semantics&#8211;as both a client and a server at every Web point to implement Groove type collaboration (OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK,  NOTIFY, PUBLISH, SUBSCRIBE, FILTER, SEARCH, LOGON, LOGOFF, CREATE, SETUP, RUN, INVOKE, HISTORY, COMPLETE, TERMINATE, ESTIMATE, EXAMINE, REGISTER, UNREGISTER, COMMIT, ROLLBACK, PROXY, BROKER).[1]  </p>
<p>It&#8217;s true you can implement everything with GET and POST, but at some point there&#8217;s no need to do yet another Web stack.   The more features that get adopted and technologies that support them, e.g. pub-sub, ajax, etc, the richer the overall experience.   </p>
<p>I agree REST is a plumbing technology, so the only thing slowing the adoption of REST is the clear value to the end user, instead of the app developer.  That sounds like a good blog post&#8230;.</p>
<p>[1] <a href="http://web.archive.org/web/20001012075129/magi.endeavors.org/html/methodology.html" rel="nofollow">http://web.archive.org/web/20001012075129/magi.endeavors.org/html/methodology.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mac</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-436044</link>
		<dc:creator>Mac</dc:creator>
		<pubDate>Sun, 06 Sep 2009 16:07:58 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-436044</guid>
		<description>Charlie posted: &quot;If you remove PUT and DELETE, how do I update and delete? I have to overload POST and then boom, you have to explain your API.&quot;

That&#039;s a pretty good argument, but nothing about POST is self-explanatory, so unfortunately I think there is a minor flaw in the argument in that respect. As for the rest of your comment, PUT isn&#039;t an update operation, PUT is more like CREATE... and so is POST. Comparisons to CRUD are commonplace but wrong. However, I do agree with your overall point that REST is more discoverable and self-describing, which isn&#039;t surprising as that&#039;s part of the stated goal.

I experimented with a REST setup that automatically mirrored XML data structures at deeper levels of the URI to match the PUT action&#039;s defined behavior of writing an *entire* resource at a given URI. So if you wanted to change a customer&#039;s address, but you didn&#039;t want to re-write the entire customer record, you&#039;d just PUT to this URI:

//site.com/customer/{customer_id}/address

There is no requirement that a resource be some unique atomic thing. A lot of developers seem to have a hard time with the idea that the URI doesn&#039;t necessarily directly map to anything physical (like a URL does). Designing a RESTful architecture is almost like defining a language, compared to building a typical API. Kevin&#039;s &quot;gauntlet&quot; challenge is a great example of how REST can quickly and easily expose a very natural-feeling solution to a problem:

//site.com/ticker/{client_id}/portfolio

There you go: a single URI that returns all fifty securities in the client&#039;s portfolio. &quot;One at a time&quot; was never part of the REST concept. Better yet, if the client decides to watch a new security, you can just POST that new security back to the same URI.

Sadly, three years later the article is still relevant. The major browsers still don&#039;t provide good support for PUT and DELETE, and even if they did, their support for security is so poor I&#039;m not sure it would matter.</description>
		<content:encoded><![CDATA[<p>Charlie posted: &#8220;If you remove PUT and DELETE, how do I update and delete? I have to overload POST and then boom, you have to explain your API.&#8221;</p>
<p>That&#8217;s a pretty good argument, but nothing about POST is self-explanatory, so unfortunately I think there is a minor flaw in the argument in that respect. As for the rest of your comment, PUT isn&#8217;t an update operation, PUT is more like CREATE&#8230; and so is POST. Comparisons to CRUD are commonplace but wrong. However, I do agree with your overall point that REST is more discoverable and self-describing, which isn&#8217;t surprising as that&#8217;s part of the stated goal.</p>
<p>I experimented with a REST setup that automatically mirrored XML data structures at deeper levels of the URI to match the PUT action&#8217;s defined behavior of writing an *entire* resource at a given URI. So if you wanted to change a customer&#8217;s address, but you didn&#8217;t want to re-write the entire customer record, you&#8217;d just PUT to this URI:</p>
<p>//site.com/customer/{customer_id}/address</p>
<p>There is no requirement that a resource be some unique atomic thing. A lot of developers seem to have a hard time with the idea that the URI doesn&#8217;t necessarily directly map to anything physical (like a URL does). Designing a RESTful architecture is almost like defining a language, compared to building a typical API. Kevin&#8217;s &#8220;gauntlet&#8221; challenge is a great example of how REST can quickly and easily expose a very natural-feeling solution to a problem:</p>
<p>//site.com/ticker/{client_id}/portfolio</p>
<p>There you go: a single URI that returns all fifty securities in the client&#8217;s portfolio. &#8220;One at a time&#8221; was never part of the REST concept. Better yet, if the client decides to watch a new security, you can just POST that new security back to the same URI.</p>
<p>Sadly, three years later the article is still relevant. The major browsers still don&#8217;t provide good support for PUT and DELETE, and even if they did, their support for security is so poor I&#8217;m not sure it would matter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rick O'Shay</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-428805</link>
		<dc:creator>Rick O'Shay</dc:creator>
		<pubDate>Wed, 05 Aug 2009 22:37:10 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-428805</guid>
		<description>Nice title although &quot;Naked Pictures&quot; would have worked equally well and been no less misleading. How about an article on how REST is crushing SOAP in real-world use. For example, what are Amazon&#039;s (the site) thoughts on why 85% of clients use REST despite having both SOAP and REST available? If you ask Amazonians (the river people) they will probably guess it&#039;s simpler but equally effective, and they&#039;d be right.</description>
		<content:encoded><![CDATA[<p>Nice title although &#8220;Naked Pictures&#8221; would have worked equally well and been no less misleading. How about an article on how REST is crushing SOAP in real-world use. For example, what are Amazon&#8217;s (the site) thoughts on why 85% of clients use REST despite having both SOAP and REST available? If you ask Amazonians (the river people) they will probably guess it&#8217;s simpler but equally effective, and they&#8217;d be right.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charlie</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-428368</link>
		<dc:creator>Charlie</dc:creator>
		<pubDate>Tue, 04 Aug 2009 15:45:00 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-428368</guid>
		<description>To all those wonding why PUT and DELETE are required, being RESTful is partly about having a self defining API to your system.
RESTful webapps are more like collections of database tables (resources) with triggers than they are a collection of services. The verbs mimick database verbs (CRUD).

POST = CREATE
GET = READ
PUT = UPDATE
DELETE = DELETE

If you remove PUT and DELETE, how do I update and delete? I have to overload POST and then boom, you have to explain your API.
If a webapp is RESTful, you require no documentation to immediately start using it. You operate on the resources just like database tables.
Any database that supports SQL is useable by anyone who understands SQL. Same applies to REST.

There are many other benefits to being RESTful, these benefits are brought about by being to make assumptions about the state of a system, and how it behaves in certain situations, and what responses from that system means.

You can not acheive this with SOA because ever single serivice is different (so we needs WSDL&#039;s etc etc). As more and more RESTful sites appear, we will see better and better interoperability between these sites, resulting in large gains in productivity and innovation as sites can &quot;mash up&quot; with one another.</description>
		<content:encoded><![CDATA[<p>To all those wonding why PUT and DELETE are required, being RESTful is partly about having a self defining API to your system.<br />
RESTful webapps are more like collections of database tables (resources) with triggers than they are a collection of services. The verbs mimick database verbs (CRUD).</p>
<p>POST = CREATE<br />
GET = READ<br />
PUT = UPDATE<br />
DELETE = DELETE</p>
<p>If you remove PUT and DELETE, how do I update and delete? I have to overload POST and then boom, you have to explain your API.<br />
If a webapp is RESTful, you require no documentation to immediately start using it. You operate on the resources just like database tables.<br />
Any database that supports SQL is useable by anyone who understands SQL. Same applies to REST.</p>
<p>There are many other benefits to being RESTful, these benefits are brought about by being to make assumptions about the state of a system, and how it behaves in certain situations, and what responses from that system means.</p>
<p>You can not acheive this with SOA because ever single serivice is different (so we needs WSDL&#8217;s etc etc). As more and more RESTful sites appear, we will see better and better interoperability between these sites, resulting in large gains in productivity and innovation as sites can &#8220;mash up&#8221; with one another.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Elliotte Rusty Harold</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-227589</link>
		<dc:creator>Elliotte Rusty Harold</dc:creator>
		<pubDate>Mon, 19 May 2008 00:21:36 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-227589</guid>
		<description>Kevin,

the scenario you describe is trivially handleable by basic HTTP GET. I&#039;m not sure why you think anything more is required. There&#039;s more than on way to do it, so there are several implementation details that can be worked out in the HTTP GET, but why you think this is hard is beyond me. Do a simple GET to request the data from the server, get back an XML document, use the results to fill in the page. What&#039;s hard about that?</description>
		<content:encoded><![CDATA[<p>Kevin,</p>
<p>the scenario you describe is trivially handleable by basic HTTP GET. I&#8217;m not sure why you think anything more is required. There&#8217;s more than on way to do it, so there are several implementation details that can be worked out in the HTTP GET, but why you think this is hard is beyond me. Do a simple GET to request the data from the server, get back an XML document, use the results to fill in the page. What&#8217;s hard about that?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Prichard</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-227490</link>
		<dc:creator>Kevin Prichard</dc:creator>
		<pubDate>Sun, 18 May 2008 09:08:28 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-227490</guid>
		<description>Another take on REST: providing easily implemented access to web services via parameterized URIs, it is an aesthetic attractor for developers.  Ease of implementation means reduced application complexity, and greater perceived productivity.  When it comes to software development, simplicity sells; you&#039;ll get more takers for your web service.  This is not a  endorsement, however, read on!

REST is particularly attractive when compared with SOAP, XML-RPC, WSDL and cousins, which have complex protocols, require relatively heavyweight clients, and need a correspondingly greater quantity of developer time.  In contrast, REST brings to mind command-line data retrieval: a method name (i.e. program pathname), optionally parameterized, returning data indicated by your parameters.

However: REST has become inextricably bound to the transport of choice, HTTP.  The concept of REST, that by presenting a resource identifier to a service, you&#039;ll receive the indicated resource in return, is simple and attractive.  By weaving REST out of HTTP, however, REST inherits HTTP&#039;s limitations, as you&#039;ve amply pointed out, ERH.  By definition, any request made RESTfully must be limited to your client and server&#039;s available set of HTTP verbs.  Working around that by creating additional verbs, you&#039;re venturing into RPC territory, the REST camp&#039;s declared natural enemy.

If you were to develop a traditional GUI application, with internal APIs to handle the front-end&#039;s needs, would you think to limit your choice of methods to just get(), set(), drop(), those methods provided by a particular transport&#039;s protocol?  Might you also want redraw(), clear(), zoom(), whatever&#039;s relevant to your app&#039;s needs?  I can&#039;t imagine any developer worth their salt would consciously design-in such limitations.

REST has its place, particularly in exposing lightweight data services to the public, but don&#039;t constrain yourselves unnecessarily.  As browser-based applications increase in complexity, you may find yourself outgrowing the limits of REST.

Here&#039;s a gauntlet thrown down to the REST camp: Consider an Ajax page presenting lots of information; say, a stock portfolio display of 50 tickers.  When the underlying Javascript code makes requests to the server, how efficient will REST be?

Will the 50 requests be sent serially, or in parallel?  If serial, your user waits while the requests pass through that one-at-a-time bottleneck.  If parallel, the burden is now on the server, which is now multitasking among 50 simultaneous HTTP requests.  Multiply that by simultaneous users - now you&#039;ve entered a new problem space.

Contrast with request batching, wherein the 50 requests are rolled into a single HTTP request, sent to the server.  Handling parallelism is now up to your data service implementation, and not constrained to the limits of the transport.  RPC is batch-friendly: a batch request is just like any other request.

To the strict REST adherents, please detail a RESTful solution.

In reality, REST and RPC live and work side-by-side.  While the REST camp struggles against RPC, the rest of us will apply either (or both) as the situation requires.</description>
		<content:encoded><![CDATA[<p>Another take on REST: providing easily implemented access to web services via parameterized URIs, it is an aesthetic attractor for developers.  Ease of implementation means reduced application complexity, and greater perceived productivity.  When it comes to software development, simplicity sells; you&#8217;ll get more takers for your web service.  This is not a  endorsement, however, read on!</p>
<p>REST is particularly attractive when compared with SOAP, XML-RPC, WSDL and cousins, which have complex protocols, require relatively heavyweight clients, and need a correspondingly greater quantity of developer time.  In contrast, REST brings to mind command-line data retrieval: a method name (i.e. program pathname), optionally parameterized, returning data indicated by your parameters.</p>
<p>However: REST has become inextricably bound to the transport of choice, HTTP.  The concept of REST, that by presenting a resource identifier to a service, you&#8217;ll receive the indicated resource in return, is simple and attractive.  By weaving REST out of HTTP, however, REST inherits HTTP&#8217;s limitations, as you&#8217;ve amply pointed out, ERH.  By definition, any request made RESTfully must be limited to your client and server&#8217;s available set of HTTP verbs.  Working around that by creating additional verbs, you&#8217;re venturing into RPC territory, the REST camp&#8217;s declared natural enemy.</p>
<p>If you were to develop a traditional GUI application, with internal APIs to handle the front-end&#8217;s needs, would you think to limit your choice of methods to just get(), set(), drop(), those methods provided by a particular transport&#8217;s protocol?  Might you also want redraw(), clear(), zoom(), whatever&#8217;s relevant to your app&#8217;s needs?  I can&#8217;t imagine any developer worth their salt would consciously design-in such limitations.</p>
<p>REST has its place, particularly in exposing lightweight data services to the public, but don&#8217;t constrain yourselves unnecessarily.  As browser-based applications increase in complexity, you may find yourself outgrowing the limits of REST.</p>
<p>Here&#8217;s a gauntlet thrown down to the REST camp: Consider an Ajax page presenting lots of information; say, a stock portfolio display of 50 tickers.  When the underlying Javascript code makes requests to the server, how efficient will REST be?</p>
<p>Will the 50 requests be sent serially, or in parallel?  If serial, your user waits while the requests pass through that one-at-a-time bottleneck.  If parallel, the burden is now on the server, which is now multitasking among 50 simultaneous HTTP requests.  Multiply that by simultaneous users &#8211; now you&#8217;ve entered a new problem space.</p>
<p>Contrast with request batching, wherein the 50 requests are rolled into a single HTTP request, sent to the server.  Handling parallelism is now up to your data service implementation, and not constrained to the limits of the transport.  RPC is batch-friendly: a batch request is just like any other request.</p>
<p>To the strict REST adherents, please detail a RESTful solution.</p>
<p>In reality, REST and RPC live and work side-by-side.  While the REST camp struggles against RPC, the rest of us will apply either (or both) as the situation requires.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jarrod Roberson</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-200438</link>
		<dc:creator>Jarrod Roberson</dc:creator>
		<pubDate>Tue, 04 Mar 2008 20:39:45 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-200438</guid>
		<description>with all this talk about REST why isn&#039;t the most obvious implementation of REST ever mentioned, WebDAV.
It supports GET, POST, PUT and DELETE along with server side methods like COPY, MOVE, MKCOL and also gives you free metadata storage / &quot;tagging&quot; as well as optional versioning and locking.
WebDAV is the ulimate &quot;RESTful&quot; interface.</description>
		<content:encoded><![CDATA[<p>with all this talk about REST why isn&#8217;t the most obvious implementation of REST ever mentioned, WebDAV.<br />
It supports GET, POST, PUT and DELETE along with server side methods like COPY, MOVE, MKCOL and also gives you free metadata storage / &#8220;tagging&#8221; as well as optional versioning and locking.<br />
WebDAV is the ulimate &#8220;RESTful&#8221; interface.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gregory Magarshak</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-134788</link>
		<dc:creator>Gregory Magarshak</dc:creator>
		<pubDate>Sat, 29 Sep 2007 14:32:09 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-134788</guid>
		<description>Okay, simple.

PUT and DELETE have the following use: to put files and delete files (resources, but really what other resources can be PUTed and DELETEted?)

So when you upload somethign to YouTube or Amazon, you aren&#039;t stuck with that STUPID upload box. The best upload box I know of today uses mootools and Flash, and is at http://digitarald.de/playground/uplooad.html . 

Now, with today&#039;s server security, not everyone wants to be exposing their internal uri structure to customers. YouTube might not want you to say PUT myvideo at /users/greg/coolvideo.mpghaha. However, you can still upload files to a well defined &quot;temporary&quot; place and then put them where they need to go. And it can be done better than with multipart post data!

Greg</description>
		<content:encoded><![CDATA[<p>Okay, simple.</p>
<p>PUT and DELETE have the following use: to put files and delete files (resources, but really what other resources can be PUTed and DELETEted?)</p>
<p>So when you upload somethign to YouTube or Amazon, you aren&#8217;t stuck with that STUPID upload box. The best upload box I know of today uses mootools and Flash, and is at <a href="http://digitarald.de/playground/uplooad.html" rel="nofollow">http://digitarald.de/playground/uplooad.html</a> . </p>
<p>Now, with today&#8217;s server security, not everyone wants to be exposing their internal uri structure to customers. YouTube might not want you to say PUT myvideo at /users/greg/coolvideo.mpghaha. However, you can still upload files to a well defined &#8220;temporary&#8221; place and then put them where they need to go. And it can be done better than with multipart post data!</p>
<p>Greg</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Une application Web Django (GET)&#8230; &#171; Le blog de patrick vergain</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-111211</link>
		<dc:creator>Une application Web Django (GET)&#8230; &#171; Le blog de patrick vergain</dc:creator>
		<pubDate>Tue, 17 Jul 2007 11:31:02 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-111211</guid>
		<description>[...] http://cafe.elharo.com/web/why-rest-failed/ (&#8220;The problem is that GET, PUT, POST, and DELETE really are a minimal set. You truly do need all four, and we only have two; and Iâ€™ve never understood why. In 2006 browser vendors still donâ€™t support PUT and DELETE. A few browsers over the years have tried to implement these as parts of editing functionality, but theyâ€™ve never allowed it in a real web application as opposed to a thick client GUI. The method of an HTML form is limited to GET and POST. PUT and DELETE are not allowed. This isnâ€™t some failure of browser vendors to properly implement the specification either. The HTML specification only allows GET and POST as form actions. XHTML and even XForms 1.0 donâ€™t change this. This means itâ€™s impossible to build a fully RESTful client application inside a web browser. Consequently everyone tunnels everything through POST, and simply ignores PUT and DELETE&#8221;) [...]</description>
		<content:encoded><![CDATA[<p>[...] <a href="http://cafe.elharo.com/web/why-rest-failed/" rel="nofollow">http://cafe.elharo.com/web/why-rest-failed/</a> (&#8220;The problem is that GET, PUT, POST, and DELETE really are a minimal set. You truly do need all four, and we only have two; and Iâ€™ve never understood why. In 2006 browser vendors still donâ€™t support PUT and DELETE. A few browsers over the years have tried to implement these as parts of editing functionality, but theyâ€™ve never allowed it in a real web application as opposed to a thick client GUI. The method of an HTML form is limited to GET and POST. PUT and DELETE are not allowed. This isnâ€™t some failure of browser vendors to properly implement the specification either. The HTML specification only allows GET and POST as form actions. XHTML and even XForms 1.0 donâ€™t change this. This means itâ€™s impossible to build a fully RESTful client application inside a web browser. Consequently everyone tunnels everything through POST, and simply ignores PUT and DELETE&#8221;) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marc de Graauw</title>
		<link>http://cafe.elharo.com/web/why-rest-failed/comment-page-1/#comment-98346</link>
		<dc:creator>Marc de Graauw</dc:creator>
		<pubDate>Wed, 06 Jun 2007 09:26:44 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/web/why-rest-failed/#comment-98346</guid>
		<description>I don&#039;t think there is a real use case for a separate PUT and DELETE - there is a use case for non-safe idempotent actions. The semantics of PUT/POST/DELETE often don&#039;t cover what&#039;s going on. It&#039;s easy to imagine a single HTTP request resulting in the deletion of some documents, updating of some rows in some database tables and creation of some other document. The important question for me is not whether the semantics of what&#039;s happening are best covered with PUT, POST or DELETE (that would be POST for this scenario according to RFC2616), but whether this request is idempotent or not. I&#039;d be happy using GET for safe operations, PUT for non-safe idempotent operations and POST for non-idempotent ones and never worry about the semantic niceties.

BTW, you write &quot;POST is used for unsafe operations&quot; whereas the examples after it are about (non)idempotency, not (un)safeness. Pushing a button twice is OK for unsafe actions as long as they are idempotent.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t think there is a real use case for a separate PUT and DELETE &#8211; there is a use case for non-safe idempotent actions. The semantics of PUT/POST/DELETE often don&#8217;t cover what&#8217;s going on. It&#8217;s easy to imagine a single HTTP request resulting in the deletion of some documents, updating of some rows in some database tables and creation of some other document. The important question for me is not whether the semantics of what&#8217;s happening are best covered with PUT, POST or DELETE (that would be POST for this scenario according to RFC2616), but whether this request is idempotent or not. I&#8217;d be happy using GET for safe operations, PUT for non-safe idempotent operations and POST for non-idempotent ones and never worry about the semantic niceties.</p>
<p>BTW, you write &#8220;POST is used for unsafe operations&#8221; whereas the examples after it are about (non)idempotency, not (un)safeness. Pushing a button twice is OK for unsafe actions as long as they are idempotent.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
