Note: I am personally for 1).
2015-07-06 17:38 GMT+02:00 Thomas Mortagne <thomas.mortagne(a)xwiki.com>om>:
On Mon, Jul 6, 2015 at 5:11 PM, Guillaume
"Louis-Marie" Delhumeau
<gdelhumeau(a)xwiki.com> wrote:
Let me resume everything.
It seems that jax-rs does not have a solution for handling list
parameters
[1] (except by using a query string, or matrix
parameters, which we don't
want). But, thanks to some hacks (example there:
https://github.com/xwiki/xwiki-platform/compare/d5f4997ddf40d70c8eef9a9ee0e…
)
we can manage to do it. We might find better
solution afterwards.
So we have several choices:
1 - /xwiki/rest/wikis/xwiki/spaces/Europe/France/Paris/pages/WebHome -
"/"
as separator for nested spaces
2 - Edouard's proposition:
/xwiki/rest/wikis/xwiki/spaces/Europe/spaces/France/spaces/Paris/pages/WebHome
- with multiple "spaces/" prefix
3 - Vincent's proposition -
/xwiki/rest/v2/type/page/ref/wiki:Europe.France.Paris.WebHome - the
reference version
If we want to have this in M1, options 1 and 2 are more realistic.
I don't think doing 3 is a good idea right now and this new concept
needs to be discussed more.
1 looks easier to implements and write but 2 is probably more
consistent with what we have today (plus it adds the feature of
listing the nested spaces of some space) so I'm more for 2.
[1]
http://cxf.547215.n5.nabble.com/Passing-array-as-a-parameter-in-JAX-RS-td56…
Thanks,
Guillaume
2015-07-06 16:02 GMT+02:00 Thomas Mortagne <thomas.mortagne(a)xwiki.com>om>:
> On Mon, Jul 6, 2015 at 3:51 PM, Guillaume "Louis-Marie" Delhumeau
> <gdelhumeau(a)xwiki.com> wrote:
> > For the record, what we use in our REST api is JAX-RS, a Java API to
> handle
> > REST urls. We do not use Restlet directly.
>
> s/We do not/We are not supposed to/ ;)
>
> >
> > There are several implementations of this API: Jersey (by Oracle),
Apaxe
> > CXF, etc... From what I've
understood, Reslet is not a jax-rs
> > implementation, but it provides one. This is why I had some issues
while
> > browsing the Restlet documentation,
assuming it was only about JAX-RS.
> >
> > So actually the question is not "can Restlet handle this?" but
"can
> JAX-RS
> > handle it?".
>
> Yep.
>
> > If the answer is no, changing or upgrading our framework will
> > not solve anything, unless we decide to stop using JAX-RS too.
> >
> >
> >
> > 2015-07-06 14:11 GMT+02:00 Jean SIMARD <jean.simard(a)xwiki.com>om>:
> >
> >> Indeed, we may check. However, in the documentation of restlet,
there
> >> is still sentences like "Note
that this implementation is not final
> >> yet." (which seems here forever) and "This extension is the result
of a
> >> (german) master thesis." which
doesn't mean the work is bad but which
> >> usually mean no maintenance after the thesis [1]. It looks like
restlet
> >> is a bit risky.
> >>
> >> The implementation seems not very alive on the Github account [2].
> >>
> >> [1]
> >>
> >>
>
http://restlet.com/technical-resources/restlet-framework/guide/2.3/extensio…
> >> [2]
https://github.com/restlet/restlet-framework-java
> >>
> >> PS: Thanks to Fabio for some information about that
> >>
> >> On 06/07/2015 13:58, Thomas Mortagne wrote:
> >> > On Mon, Jul 6, 2015 at 1:57 PM, Thomas Mortagne
> >> > <thomas.mortagne(a)xwiki.com> wrote:
> >> >> Did you check in more recent versions of Restlet ? Ours is
tarting to
> >> >> be pretty old.
> >> >
> >> > (2.0.14 vs 2.3.3)
> >> >
> >> >> On Mon, Jul 6, 2015 at 1:26 PM, Guillaume "Louis-Marie"
Delhumeau
> >> >> <gdelhumeau(a)xwiki.com> wrote:
> >> >>> I've made some experiments with Restlet. It seems there is
no
> solution
> >> >>> out-of-the-box to handle multiple level of nesting in the URL
path.
> >> But we
> >> >>> can actually cheat.
> >> >>>
> >> >>> We can define a path with this syntax:
> >> >>> @Path("/wikis/{wikiName}/spaces/{spaceName:
.+}/pages/{pageName}")
> >> >>>
> >> >>> Here, {spaceName: .+} means that any character could be
present,
> >> including
> >> >>> a slash.
> >> >>>
> >> >>> So we can actually retrieve the spaces list as a string, like
> "A/B/C",
> >> that
> >> >>> we can manually converts to "A.B.C" in our REST
components.
> >> >>>
> >> >>> A working proof of concept of this (committed on a branch):
> >> >>>
> >>
>
https://github.com/xwiki/xwiki-platform/compare/d5f4997ddf40d70c8eef9a9ee0e…
> >> >>>
> >> >>> So we can use /xwiki/rest/wikis/xwiki/spaces/A/B/C as a valid
URL.
> >> >>>
> >> >>> With the same trick, we can implement the multiple
"spaces"
> proposal:
> >> >>>
https://github.com/xwiki/xwiki-platform/commit/3e83b6cf44e8
> >> >>> it actually delegates to the component the parsing of the
spaces
> >> segments.
> >> >>>
> >> >>> It might not be as clean as a proper custom router, but at
least
is
> >> >>> feasible without
rewriting everything.
> >> >>>
> >> >>> What do you think?
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> 2015-07-06 12:02 GMT+02:00 Guillaume "Louis-Marie"
Delhumeau <
> >> >>> gdelhumeau(a)xwiki.com>gt;:
> >> >>>
> >> >>>> I am currently trying to implement the multiple spaces
proposal
to
> >> see if
> >> >>>> it is doable.
> >> >>>>
> >> >>>> 2015-07-03 11:52 GMT+02:00 vincent(a)massol.net <
vincent(a)massol.net
> >:
> >> >>>>
> >> >>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>> On 3 Jul 2015 at 11:48:24, vincent(a)massol.net (
vincent(a)massol.net
> >> (mailto:
> >> >>>>> vincent(a)massol.net)) wrote:
> >> >>>>>
> >> >>>>>> Just for the record, I’m -1 for the dotted solution
just for
> spaces
> >> as
> >> >>>>> I mentioned in the JIRA issue (
> >> >>>>>
> >>
>
http://jira.xwiki.org/browse/XWIKI-12206?focusedCommentId=87137&page=co…
> >> >>>>> )
> >> >>>>>>
> >> >>>>>> If we want to use “dots” then I much prefer that we
use the
> >> serialized
> >> >>>>> reference as in:
> >> >>>>>>
> >> >>>>>> /rest/v2/type//ref/
> >> >>>>>>
> >> >>>>>> Examples:
> >> >>>>>>
> >> >>>>>>
/rest/v2/property/wiki:space1.space2.page^object.property
> >> >>>>>> /rest/v2/object/wiki:space1.space2.page^object
> >> >>>>>>
/rest/v2/attachment/wiki:space1.space2.page@filename
> >> >>>>>> /rest/v2/page/wiki:space1.space2.page
> >> >>>>>> /rest/v2/space/wiki:space1.space2
> >> >>>>>> /rest/v2/wiki/wiki
> >> >>>>>
> >> >>>>> I meant the following (to be self-describing):
> >> >>>>>
> >> >>>>>
/rest/v2/type/property/ref/wiki:space1.space2.page^object.property
> >> >>>>>
/rest/v2/type/object/ref/wiki:space1.space2.page^object
> >> >>>>>
/rest/v2/type/attachment/ref/wiki:space1.space2.page@filename
> >> >>>>> /rest/v2/type/page/ref/wiki:space1.space2.page
> >> >>>>> /rest/v2/type/space/ref/wiki:space1.space2
> >> >>>>> /rest/v2/type/wiki/ref/wiki
> >> >>>>>
> >> >>>>> Thanks
> >> >>>>> -Vincent
> >> >>>>>
> >> >>>>>> Note that this leads to shorter and simpler URLs.
> >> >>>>>>
> >> >>>>>> Thanks
> >> >>>>>> -Vincent
> >> >>>>>>
> >> >>>>>> On 3 Jul 2015 at 11:20:14, Fabio Mancinelli (
> >> fabio.mancinelli(a)xwiki.com
> >> >>>>> (mailto:fabio.mancinelli@xwiki.com)) wrote:
> >> >>>>>>
> >> >>>>>>> Hi,
> >> >>>>>>>
> >> >>>>>>> We should check how to declare a URI Template
of the form
> >> >>>>>>> /rest/wikis/xwiki/(spaces/SPACE)+/pages/PAGE in
JAX-RS... The
> Spec
> >> >>>>>>> allows regexs in the URI Template defintion in
@Path
annotations
> >> but
> >> >>>>>>> this is something to be checked. I am not sure
that it's that
> >> simple.
> >> >>>>>>>
> >> >>>>>>> Given the previous remark, maybe the dotted
solution might be
> >> easier
> >> >>>>> to handle.
> >> >>>>>>>
> >> >>>>>>> Of course API versioning is a very good thing
to have.
> >> >>>>>>>
> >> >>>>>>> Thanks,
> >> >>>>>>> Fabio
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>>
> >> >>>>>>> On Fri, Jul 3, 2015 at 12:55 AM, Eduard Moraru
wrote:
> >> >>>>>>>> Hi,
> >> >>>>>>>>
> >> >>>>>>>> Initially, I wanted to go with the dots,
however the
backwards
> >> >>>>>>>>
compatibility problem would force us to either use a
different
> key
> >> >>>>> than
> >> >>>>>>>> "spaces" and deprecate
"spaces" or to introduce versioning
> (i.e.
> >> >>>>> path
> >> >>>>>>>> prefix like /rest/v1/wikis...), as Vincent
said.
> >> >>>>>>>>
> >> >>>>>>>> However, the multiple "spaces" (I
think this is what you
meant,
> >> >>>>> Vincent)
> >> >>>>>>>> alternative has more (I`d say only)
advantages than
> disadvantages.
> >> >>>>> So the
> >> >>>>>>>> URL would be:
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>
> >>
>
/xwiki/rest/wikis/xwiki/spaces/Europe/spaces/France/spaces/Paris/pages/WebHome
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>> + is 100% backwards compatible
> >> >>>>>>>> ++ old apps will only be able to access the
first level, as
> they
> >> >>>>> were
> >> >>>>>>>> designed
> >> >>>>>>>> ++ No mixup between space name (unescaped)
vs space
reference
> >> >>>>> (escaped)
> >> >>>>>>>> ++ As a result, no need to introduce any
versioningjust yet
> >> >>>>>>>>
> >> >>>>>>>> + indeed is much more restful, since at
each step (e.g.
France)
> >> you
> >> >>>>> can
> >> >>>>>>>> have either subspaces (e.g. Paris) or pages
(e.g. WebHome or
> any
> >> >>>>> other
> >> >>>>>>>> terminal page)
> >> >>>>>>>> ++ in other words, the resource hierarchy
is better exposed
> >> >>>>>>>>
> >> >>>>>>>> + Bonus, we stick to the good old
"/" separator
> >> >>>>>>>>
> >> >>>>>>>> + Reflects perfectly the expansion of the
model that we are
> doing
> >> >>>>> through NS
> >> >>>>>>>>
> >> >>>>>>>> +1 for dots, i.e.
> >> >>>>>>>>
> /xwiki/rest/wikis/xwiki/spaces/Europe.France.Paris/pages/WebHome
> >> >>>>>>>>
> >> >>>>>>>> - longer URLs for long paths
> >> >>>>>>>>
> >> >>>>>>>> So I`m +1 for the "multiple
spaces" option.
> >> >>>>>>>>
> >> >>>>>>>> Thanks,
> >> >>>>>>>> Eduard
> >> >>>>>>>>
> >> >>>>>>>> On Thu, Jul 2, 2015 at 6:14 PM,
vincent(a)massol.net
> >> >>>>>>>> wrote:
> >> >>>>>>>>
> >> >>>>>>>>> I think we should decide what we want
independently of the
> REST
> >> >>>>> framework
> >> >>>>>>>>> impl, to be the most restful possible.
> >> >>>>>>>>>
> >> >>>>>>>>> Then we check how to do it in the REST
fwk we currently use
> >> >>>>> (restlet) and
> >> >>>>>>>>> if not possible then we should check if
it’s possible with
> some
> >> >>>>> other REST
> >> >>>>>>>>> fwk (jersey for example).
> >> >>>>>>>>>
> >> >>>>>>>>> At worse, if we don’t want to wait we
will need at least to
> >> >>>>> introduce API
> >> >>>>>>>>> versioning so that we can change it
later on easily.
> >> >>>>>>>>>
> >> >>>>>>>>> There’s also the suggestion I proposed
with several “pages”
> >> >>>>> elements which
> >> >>>>>>>>> seems potentially more restful than
dots to me (but leads
to
> >> >>>>> longer urls).
> >> >>>>>>>>>
> >> >>>>>>>>> So IMO you should research more about
what is the RESTful
> >> approach
> >> >>>>> to this
> >> >>>>>>>>> before we can decide anything.
> >> >>>>>>>>>
> >> >>>>>>>>> Thanks
> >> >>>>>>>>> -Vincent
> >> >>>>>>>>>
> >> >>>>>>>>> On 2 Jul 2015 at 15:57:53, Guillaume
Louis-Marie Delhumeau
(
> >> >>>>>>>>>
gdelhumeau@xwiki.com(mailto:gdelhumeau@xwiki.com)) wrote:
> >> >>>>>>>>>
> >> >>>>>>>>>> Hi.
> >> >>>>>>>>>>
> >> >>>>>>>>>> This proposal is already explained
in
> >> >>>>>>>>>>
http://jira.xwiki.org/browse/XWIKI-12206. I think it is
an
> >> >>>>> important
> >> >>>>>>>>> issue
> >> >>>>>>>>>> to fix because it blocks
> >> >>>>>
http://jira.xwiki.org/browse/XWIKI-12198
> >> >>>>>>>>> (Ensure
> >> >>>>>>>>>> annotations work on nested
spaces).
> >> >>>>>>>>>>
> >> >>>>>>>>>> The current REST URL for a space
is:
> >> >>>>>>>>>>
/xwiki/rest/wikis/xwiki/spaces/Europe
> >> >>>>>>>>>>
> >> >>>>>>>>>> and for a page:
> >> >>>>>>>>>>
/xwiki/rest/wikis/xwiki/spaces/Europe/pages/WebHome
> >> >>>>>>>>>>
> >> >>>>>>>>>> The idea is to use dots as space
separator in the REST
URLs
> in
> >> >>>>> the case
> >> >>>>>>>>> of
> >> >>>>>>>>>> nested spaces. Example:
> >> >>>>>>>>>>
/xwiki/rest/wikis/xwiki/spaces/Europe.France.Paris
> >> >>>>>>>>>>
> >> >>>>>>>>>> For spaces containing dots in their
name, we simply escape
> them
> >> >>>>> with \
> >> >>>>>>>>>> (%5C).
> >> >>>>>>>>>>
> >> >>>>>>>>>> It has the drawback to not have a
similar URL than the
> standard
> >> >>>>> action,
> >> >>>>>>>>> ie:
> >> >>>>>>>>>>
/xwiki/bin/view/Europe/France/Paris/WebHome - for view
action
> >>
>>>>>>>>>>
> /xwiki/rest/wikis/xwiki/spaces/Europe.France.Paris/pages/WebHome
> >> >>>>> - for
> >> >>>>>>>>> REST
> >> >>>>>>>>>> action
> >> >>>>>>>>>>
> >> >>>>>>>>>> But it does not seem possible to
handle "/" in path
> parameters
> >> >>>>> with
> >> >>>>>>>>> Restlet.
> >> >>>>>>>>>> ie:
> >> >>>>>>>>>>
> /xwiki/rest/wikis/xwiki/spaces/Europe/France/Paris/pages/WebHome
> >> >>>>>>>>>> is not supported by Restlet.
> >> >>>>>>>>>>
> >> >>>>>>>>>> After a talk with some Restlet
committers, they confirm me
> that
> >> >>>>> we have
> >> >>>>>>>>> to
> >> >>>>>>>>>> write our own URL router to handle
this. I don't know if
it
> >> >>>>> worth the
> >> >>>>>>>>> pain
> >> >>>>>>>>>> although I don't have evaluated
it.
> >> >>>>>>>>>>
> >> >>>>>>>>>> So I guess this proposal using dots
is the best option,
but
I'm
> >>>>> free to
> >>>>>>>>>> talk about this.
> >>>>>>>>>>
> >>>>>>>>>> Thanks,
> >>>>>>>>>> Guillaume
> >>>>>>>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> devs mailing list
> >>>>> devs(a)xwiki.org
> >>>>>
http://lists.xwiki.org/mailman/listinfo/devs
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Guillaume Delhumeau (gdelhumeau(a)xwiki.com)
> >>>> Research & Development Engineer at XWiki SAS
> >>>> Committer on the
XWiki.org project
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Guillaume Delhumeau (gdelhumeau(a)xwiki.com)
> >>> Research & Development Engineer at XWiki SAS
> >>> Committer on the
XWiki.org project
> >>> _______________________________________________
> >>> devs mailing list
> >>> devs(a)xwiki.org
> >>>
http://lists.xwiki.org/mailman/listinfo/devs
> >>
> >>
> >>
> >> --
> >> Thomas Mortagne
> >
> >
> >
>
> --
> Jean Simard
> jean.simard(a)xwiki.com
> Research engineer at XWiki SAS
>
http://www.xwiki.com
> Committer on the
XWiki.org project
>
http://www.xwiki.org
> _______________________________________________
> devs mailing list
> devs(a)xwiki.org
>
http://lists.xwiki.org/mailman/listinfo/devs
>
--
Guillaume Delhumeau (gdelhumeau(a)xwiki.com)
Research & Development Engineer at XWiki SAS
Committer on the
XWiki.org project
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Guillaume Delhumeau (gdelhumeau(a)xwiki.com)
Research & Development Engineer at XWiki SAS
Committer on the
XWiki.org project
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Guillaume Delhumeau (gdelhumeau(a)xwiki.com)
Research & Development Engineer at XWiki SAS
Committer on the