TAP Implementation Issues (cont'd)
Patrick Dowler
patrick.dowler at nrc-cnrc.gc.ca
Thu Oct 22 14:09:52 PDT 2009
On Thursday 22 October 2009 10:51:25 Doug Tody wrote:
> I missed this one in my previous posting. REQUEST is intended only for
> service operations (doQuery, getCapabilities, etc.). The UWS mechanism
> is a separate standard and is defined by the UWS specification.
> If we initiate an async doQuery using TAP we need to specify REQUEST
> and the various doQuery parameters when the job is first created,
> but after that the generic UWS mechanism is used to interact with an
> existing job identified by the UWS assigned job id, so there would
> seem to be no further need to specify any TAP-specific parameters.
> Basically once the UWS job is created we are no longer interacting
> with a TAP service, rather we are interacting with the UWS mechanism
> using the protocol specified by UWS.
A minor detail:
My interpretation of the UWS spec and how it applies to TAP specifically is
that you can post TAP-specific parameters as part of the job-creation and/or
you can POST them to the job after it is created. That is, you can fully
specify the job in one POST, then interact with it a la UWS as described
above, or you can create an empty job and then modify it with subsequent POSTs
to the job.
As with all UWS jobs, you can modify the job up to the point that you post
PHASE=RUN to the phase resource; after that, the job is more or less immutable
(except for killing the job by posting PHASE=ABORT) from the outside.
> What is the appropriate value of REQUEST for async requests that do
> not create the query? The document indicates:
> A TAP client must set this parameter correctly in every request
> (GET or POST) to /async or /sync web resources.
That text is misleading. It is supposed to mean that you must include a valid
REQUEST parameter in the job.
When using the /async endpoint, you must post REQUEST=<allowed value> sometime
before starting execution, as above. There are no GET operations on the /async
endpoint that take query strings: they just return representations of
resources. So that should say "every job" and not mention GET or POST at all
as far as async goes.
For /sync, the above is correct: you must specify the REQUEST parameter and it
must be one of the allowed values. Both GET and POST are intended to execute
and return query results.
> I take this as meaning that invoking something like
> http://mytap/async/phase
> needs a REQUEST.
Well, there is no phase resource on the async endpoint, so it would result in
a 404 (well: technically there is probably not a job with jobID = phase :-)
But I take your point: the requirement for a REQUEST parameter is limited to
being set for a job, not for every http interaction. The mention of GET and
POST makes it sound like every http request rather than every tap request (eg
every job).
--
Patrick Dowler
Tel/Tél: (250) 363-0044
Canadian Astronomy Data Centre
National Research Council Canada
5071 West Saanich Road
Victoria, BC V9E 2M7
Centre canadien de donnees astronomiques
Conseil national de recherches Canada
5071, chemin West Saanich
Victoria (C.-B.) V9E 2M7
More information about the dal
mailing list