Search the web
Sign In
New User? Sign Up
rest-discuss · REST Discussion Mailing List
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Want your group to be featured on the Yahoo! Groups website? Add a group photo to Flickr.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
What location to return on 202 (asynchronous process) and what polli   Message List  
Reply | Forward Message #11264 of 14020 |
Re: What location to return on 202 (asynchronous process) and what polling result?

* bierstuebl <bierstuebl@...> [2008-09-08 03:10]:
> I would like to use asynchronous REST by POSTing a request to
> e.g. /backups (for creating a new backup version), which will
> return me a 202 with a location in the header.

RFC 2616 does not specify a meaning for the Location header in
the context of a 202 response, so do not expect clients to know
what to do with your response.

Instead, the body of your response should be machine-readable and
should contain links to a) the eventual location of the resource
if you already know where it is going to be and b) the location
of a resource that can be polled for the status of the operation
in the meantime. These links should be annotated so that the
client knows which one is which.

Using hypermedia (put plainly, “stuff with links in it”) in this
fashion is the cornerstone of REST.

> What should this location look like? I think it should look
> like /backups/version_x and NOT be somewhere else like
> /queue/backups/version_x or the like. However, if a client
> starts polling now on /backups/version_x and the process hasn't
> finished yet, what should be returned? A 404 with a body until
> the process is finished an the real representation can be sent
> with 200?

Sending 404 while the target resource does not yet exist is fine.

Do not expect the client to poll the target resource though. For
one thing, this protocol gives you no way of signaling the client
that there was a problem with processing that you only discovered
later.

Worse, though, all this means you are overloading the meaning of
202, Location and 404 with semantics outside HTTP’s uniform
interface, implementing a private protocol. In REST, when you
need to provide semantics that aren’t directly available at the
protocol level, your first instinct should be to expose another
resource; and the way to make that all work together is to a)
provide links to clients, that b) have annotations saying what
semantics the client can expect that resource to expose.

> Using a new resource like /queue/backups/version I could return
> a 200 with some status information in it. However, the client
> initially requested a representation of a backup, but when it
> starts polling on the new resource it receives another
> representation, the a status representeation. How could a
> client adjust to this situation without knowing in advance that
> the action would be asynchronous??

It can’t. You want to do something that HTTP has no provision
for, so any client that is to successfully follow your protocol
will need special knowledge about it. However, by staying within
the confines of the uniform interface and hypermedia, you can
contain the spread of that special knowledge to a minimal amount
of code, and you maximise the amount of accidental usefulness
that clients without knowledge of your protocol can still get
out of the service.

And that is the goal of REST: minimising coupling.

Regards,
--
Aristotle Pagaltzis // <http://plasmasturm.org/>



Mon Sep 8, 2008 1:56 am

a22pag
Offline Offline
Send Email Send Email

Forward
Message #11264 of 14020 |
Expand Messages Author Sort by Date

Hi all, I'm new to this mailing list and to be honest: I've neve been on a mailing list before. So in case I'm doing things wrong, please be forgiving. ...
bierstuebl
Offline Send Email
Sep 8, 2008
1:05 am

... RFC 2616 does not specify a meaning for the Location header in the context of a 202 response, so do not expect clients to know what to do with your...
Aristotle Pagaltzis
a22pag
Offline Send Email
Sep 8, 2008
1:55 am

As Aristotle replied, Location header is unspecified for 202 (Accepted). Instead, provide a body such as the following: <status> <link...
Subbu Allamaraju
sallamar
Offline Send Email
Sep 8, 2008
5:11 pm

Rfc says: The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some...
Sebastien Lambla
serialseb
Offline Send Email
Sep 8, 2008
5:59 pm

... The fundamental problem with this approach is that the semantics of 202 Accepted are unspecified for a GET. Subbu...
Subbu Allamaraju
sallamar
Offline Send Email
Sep 8, 2008
6:54 pm

... What the spec says about 202 is this: The request has been accepted for processing, but the processing has not been completed. The request might or might ...
Aristotle Pagaltzis
a22pag
Offline Send Email
Sep 9, 2008
5:48 am

... By replacing: "The GET has been accepted for processing, but the processing has not been completed". I understand my interpretation is unconventional, but...
Sebastien Lambla
serialseb
Offline Send Email
Sep 9, 2008
4:45 pm

You may be mis-interpreting 2616. The behavior of 202 is defined for POST and DELETE only, and the behavior of the Location header is undefined for 202. It is...
Subbu Allamaraju
sallamar
Offline Send Email
Sep 9, 2008
5:51 pm

... If you interpret a 202 to a get as a non-defining response, then when the resource does become available that url would return a 200 or a 404. The entity...
Sebastien Lambla
serialseb
Offline Send Email
Sep 9, 2008
8:15 pm

... I see what you suggesting. Yes, this is certainly possible, but I would still question (a) overloading 202 in an unspecified manner, and (b) merging an...
Subbu Allamaraju
sallamar
Offline Send Email
Sep 9, 2008
8:34 pm

... I agree with (a) to a certain extent as it does extend ever so slightly the current definition. B however would seem to work fine: a 202's entity may ...
Sebastien Lambla
serialseb
Offline Send Email
Sep 9, 2008
9:41 pm

I'm reviving this thread from 3 months ago. I hope it's still relevant -- I encounter the use case every day. Sebastien is right that we should develop an...
Hugh Winkler
hwinkler99
Offline Send Email
Dec 24, 2008
11:44 pm

... 2616 defines it as having accepted the request for processing. Since GET returns an entity representing the current state of a resource, I don't think...
Jon Hanna
hack_poet
Offline Send Email
Dec 25, 2008
1:15 pm

... Agreed. Regards, -- Aristotle Pagaltzis // <http://plasmasturm.org/>...
Aristotle Pagaltzis
a22pag
Offline Send Email
Dec 27, 2008
3:45 am

... Yes, you can put the word “GET” in the sentence, but the sentence doesn’t make any sense that way. ... It’s meaningless to say “I got your GET,...
'Aristotle Pagaltzis'
a22pag
Offline Send Email
Sep 9, 2008
5:52 pm
Advanced

Copyright 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help