鉴于一个已知有点“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/rocket
和http://www.example.com/products/ufo
)。
这真的只是努力说,“鉴于这些网址,我已经通过删除我认为他是'变量'ID网址的一部分来对它们进行分组。”
答案 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/3
和http://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开始