+1 for solution 2 (multiple /spaces/)

Thanks,
Marius

On Mon, Jul 6, 2015 at 6:38 PM, Thomas Mortagne
<[email protected]> wrote:
> On Mon, Jul 6, 2015 at 5:11 PM, Guillaume "Louis-Marie" Delhumeau
> <[email protected]> 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/d5f4997ddf40d70c8eef9a9ee0e9e98d767eb586...26b63f99654c90ba39c0601ee0d7c9397e1c629c)
>> 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-td563656.html
>>
>> Thanks,
>> Guillaume
>>
>> 2015-07-06 16:02 GMT+02:00 Thomas Mortagne <[email protected]>:
>>
>>> On Mon, Jul 6, 2015 at 3:51 PM, Guillaume "Louis-Marie" Delhumeau
>>> <[email protected]> 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 <[email protected]>:
>>> >
>>> >> 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/extensions/jaxrs
>>> >> [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
>>> >> > <[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
>>> >> >
>>> >> >
>>> >> >
>>> >>
>>> >> --
>>> >> Jean Simard
>>> >> [email protected]
>>> >> Research engineer at XWiki SAS
>>> >> http://www.xwiki.com
>>> >> Committer on the XWiki.org project
>>> >> http://www.xwiki.org
>>> >> _______________________________________________
>>> >> 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
>>> > _______________________________________________
>>> > devs mailing list
>>> > [email protected]
>>> > http://lists.xwiki.org/mailman/listinfo/devs
>>>
>>>
>>>
>>> --
>>> Thomas Mortagne
>>> _______________________________________________
>>> 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
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>
>
>
> --
> Thomas Mortagne
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to