2011-05-27 43 views
2

给出已知有点“RESTful”的URL列表,对于将它们分组以使映射到相同“控制器/操作/视图”的URL可能被分组在一起?用于对RESTful路由进行分组的算法

例如,给定以下列表:

http://www.example.com/foo 
http://www.example.com/foo/1 
http://www.example.com/foo/2 
http://www.example.com/foo/3 
http://www.example.com/foo/1/edit 
http://www.example.com/foo/2/edit 
http://www.example.com/foo/3/edit 

它将它们分组如下:

http://www.example.com/foo 

http://www.example.com/foo/1 
http://www.example.com/foo/2 
http://www.example.com/foo/3 

http://www.example.com/foo/1/edit 
http://www.example.com/foo/2/edit 
http://www.example.com/foo/3/edit 

一无所知提前URL的顺序或结构。在我的例子中,这很容易,因为ID显然是数字。理想情况下,我想要一个算法,即使ID是非数字的也能很好地工作(如http://www.example.com/products/rockethttp://www.example.com/products/ufo)。

这真的只是一个努力,说:“鉴于这些网址,我已经通过删除我认为它是'变量'URL的ID部分来对它们进行分组。

+0

如果你对URL的结构一无所知,那么这是不可能的。该算法应该如何确定是否用'a/d/c'或'a/b/e'来组合'a/b/c'? – svick 2011-05-28 21:28:41

+0

是的,只有很小的样本量,您无法猜测。但是,我认为你做出合理猜测的几率应该随着更大的样本而改善。 – Larsenal 2011-05-29 04:59:46

回答

1

Aliza有正确的想法,你想寻找'清晰点'(在REST中,基本上是通过参数的地方)。寻找只为改变单点得到棘手

http://www.example.com/foo/1/new 
http://www.example.com/foo/1/edit 
http://www.example.com/foo/2/edit 
http://www.example.com/bar/1/new 

这些可以归纳几个同样很好的方法,因为我们没有在URL语义的想法。这真的归结为这个问题 - 这是REST描述符或参数的URL部分。如果我们知道所有的描述符是什么,其余的就是参数,我们就完成了。

给出一个足够大的数据集,我们希望查看每个深度的所有URL的统计数据。例如/ x/y/z/t /。我们将计算每个时隙中出现的次数并生成一个大的联合概率分布表。

我们现在可以看看符号的分布。插槽中的高计数意味着它可能是一个参数。我们将从底部开始,寻找条件概率事件,即,x是foo的概率是多少,那么给定x的概率是什么等,等等等等。我不得不考虑更多以确定系统的方式来提取这些,但它似乎是一个promisign开始

1

分裂每个URL到一个字符串数组与分隔符之中“/”

例如http://www.example.com/foo/1/edit会给阵列[http:,www.example.com,foo,1,edit]

如果两个阵列(URL)的共享除了一个所有indecies相同的值,它们将在同一组中。

例如http://www.example.com/foo/1/edit = [http:,www.example.com,foo,1,edit]http://www.example.com/foo/2/edit = [http:,www.example.com,foo,2,edit]。数组匹配除#3以外的所有索引,第一个数组为1,第二个数组为2。因此,这些网址属于同一组。

很容易看出,像http://www.example.com/foo/3http://www.example.com/foo/1/edit这样的网址根据此算法不属于同一组。