On Mon, Jul 6, 2015 at 1:57 PM, Thomas Mortagne
<[email protected]> 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
> <[email protected]> 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/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
>
>
>
> --
> Thomas Mortagne



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to