Re: 202 Response to GET request

Glenn Block <[email protected]> Sun, 6 Oct 2013 22:35:06 -0700
Newsgroups gmane.comp.web.services.rest
Message-ID <CAEwD50CDaV2pQ=CoSbxPUz40wdUEK9kS+ouifv_OmhVNfiXLrg@mail.gmail.com>
No argument from me :-)


On Sun, Oct 6, 2013 at 10:01 PM, Unmesh Joshi <[email protected]> wrote:

> There are three things to consider.
>
> First, What is the reason for which 202 status code is added in HTTP?
>
> "Its purpose is to allow a server to accept a request for some other
> process. (perhaps a batch-oriented process that is only run once per day)
> without requiring that the user agent's connection to the server persist
> until the process is completed."
>
> Accepting the request for other process, most times wont be a GET.  If
> its modeled as a GET, the modelling of the HTTP GET handler on the server
> becomes non trivial, and extra care needs to be taken to make sure the
> handling is idempotent and safe. (e.g. multiple requests for the same
> resource are not causing multiple entries in queue to generate the
> resource).
>
> 202 response is generally used for making operations asynchronous if the
> resource construction  is too slow. e.g. if /search is too slow (not
> returning in say 5 minutes), because of resource constraints on the server
> side (whatever they might be).
> In these cases, by design, a new request resource is created on the server
> which is handled by a scheduled process.
>
> Using GET in these cases, seems wrong, from modelling point of view.
>
> Second thing to consider is if its valid according to HTTP standard to
> return 202 response code for a GET request.
> The answer is yes, as HTTP standard, does not put any constraint on the
> response codes returned for GET.
>
> Third thing to consider is, whats is the accepted idiom used for such
> designs in the community.  Some examples out there
> https://www.tbray.org/ongoing/When/200x/2009/07/02/Slow-REST and also
> http://www.amazon.com/REST-Practice-Hypermedia-Systems-Architecture/dp/0596805829.
> seem to suggest its POST - 202 polling, as an idiom that's generally used.
>
>  Thanks,
> Unmesh
>
> Thanks,
> Unmesh
>
>
>
>
>
>
> On Mon, Oct 7, 2013 at 12:10 AM, Glenn Block <[email protected]>wrote:
>
>> Yes I understand the GET is safe. My question / point, is 202 valid for a
>> safe method that is doing no work?
>>
>>
>> On Sun, Oct 6, 2013 at 11:34 AM, Jan Algermissen <
>> [email protected]> wrote:
>>
>>>
>>> On 05.10.2013, at 20:15, Glenn Block <[email protected]> wrote:
>>>
>>> > Yes on querying the resource but isn't that the entire reason for
>>> returning the monitor uri? ie 'go here to check the status' ?
>>>
>>> Hmm, yes. But I meant that the GET on the PDF-URI is still idempotent
>>> and safe from the POV of the client ... even if the first GET starts the
>>> generation and returns a 202.
>>>
>>> However, it was all just a remark in what case you *might* maybe uses a
>>> 202 for a GET :-)
>>>
>>> Jan
>>>
>>> >
>>> > On Saturday, October 5, 2013, Jan Algermissen wrote:
>>> >
>>> >
>>> > On 05.10.2013, at 20:01, Glenn Block <[email protected]> wrote:
>>> >
>>> > > Hmm, you are suggesting it is valid, I read as relating to an unsafe
>>> method ie that performs some work.
>>> >
>>> > Yes - that is why I wrote 'Maybe' :-) However, the GET would still be
>>> idempotent and safe - the client can safely call the GET on the pdf URL as
>>> often as it wants and the fact that a background process has been started
>>> for the first GET is not of concern to the client.
>>> >
>>> > All that with some caveat, I am not sure I'll agree with this in a
>>> couple of hours :-)
>>> >
>>> > Jan
>>> >
>>> >
>>> > > GET is always safe, I agree querying for a status is not causing a
>>> side effect but still.
>>> > >
>>> > > On Saturday, October 5, 2013, Jan Algermissen wrote:
>>> > >
>>> > > On 05.10.2013, at 19:21, Glenn Block <[email protected]> wrote:
>>> > >
>>> > > > Seems very odd for the reasons you cited, 202 says your request
>>> has not been processes. The spec also speaks about the location uri
>>> pointing to a monitor. I would not expect the status code of that monitor
>>> to be a 202 either.
>>> > >
>>> > > No, that resource provides you with information about the status of
>>> the processing of the other request.
>>> > >
>>> > >
>>> > > Maybe:
>>> > >
>>> > > GET /account/jim/downloads/someLargeBoolAsPdf.pdf
>>> > >
>>> > > 202 Accepted
>>> > > Location: /account/jim/downloads
>>> > > Content-Type: text/plain
>>> > >
>>> > > Thank you for requesting this download - you PDF is being created.
>>> Please visit your downloads overview page to check the status of the PDF
>>> generation.
>>> > >
>>> > >
>>> > >
>>> > > Jan
>>> > >
>>> > >
>>> > >
>>> > > >
>>> > > >
>>> > > > On Saturday, October 5, 2013, Unmesh Joshi wrote:
>>> > > >
>>> > > >
>>> > > > Hi,
>>> > > >
>>> > > > I recently came across an API which was returning '202 Accepted'
>>> response to GET request. It seemed a bit odd.
>>> > > > Most asynchronous operations on HTTP implemented with POST request
>>> and 202 response.
>>> > > > While HTTP does not mandate 202 response to be returned only to
>>> POST requests, following lines in RFC do indicate, its almost always going
>>> to POST.
>>> > > >
>>> > > > "The 202 response is intentionally non-committal. Its purpose is
>>> to allow a server to accept a request for some other process. (perhaps a
>>> batch-oriented process that is only run once per day) without requiring
>>> that the user agent's connection to the server persist until the process is
>>> completed. "
>>> > > >
>>> > > > Have anyone come across implementations using 202 response for GET?
>>> > > >
>>> > > > Thanks,
>>> > > > Unmesh
>>> > > >
>>> > > >
>>> > > >
>>> > >
>>> >
>>> >
>>> > 
>>>
>>>
>>
>