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/d5f4997ddf40d70c8eef9a9ee0e9e98d767eb586...26b63f99654c90ba39c0601ee0d7c9397e1c629c

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 <
[email protected]>:

> I am currently trying to implement the multiple spaces proposal to see if
> it is doable.
>
> 2015-07-03 11:52 GMT+02:00 [email protected] <[email protected]>:
>
>>
>>
>>
>>
>>
>> On 3 Jul 2015 at 11:48:24, [email protected] ([email protected](mailto:
>> [email protected])) 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=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-87137
>> )
>> >
>> > 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 ([email protected]
>> (mailto:[email protected])) 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, [email protected]
>> > > > 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 (
>> > > >> [email protected](mailto:[email protected])) 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
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>>
>
>
>
> --
> Guillaume Delhumeau ([email protected])
> Research & Development Engineer at XWiki SAS
> Committer on the XWiki.org project
>



-- 
Guillaume Delhumeau ([email protected])
Research & Development Engineer at XWiki SAS
Committer on the XWiki.org project
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to