+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

