用于分组RESTful路由的算法

时间:2011-05-27 19:05:11

标签: algorithm text-processing

鉴于一个已知有点“RESTful”的URL列表,对于将它们分组以便映射到相同“控制器/操作/视图”的URL可能被组合在一起的合适算法是什么?

例如,给出以下列表:

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)。

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

2 个答案:

答案 0 :(得分:1)

将每个网址拆分为一个字符串数组,其分隔符为“/”

e.g。 http://www.example.com/foo/1/edit将为数组[http:,www.example.com,foo,1,edit]

如果两个数组(url)在除1之外的所有indecies中共享相同的值,则它们将位于同一组中。

e.g。 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等网址不属于同一群组。

答案 1 :(得分: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等的概率y等等。我必须考虑更多来确定系统地提取这些,但它似乎是一个promisign开始