Алгоритм группировки RESTful маршрутов - PullRequest
2 голосов
/ 27 мая 2011

Учитывая список URL-адресов, которые, как известно, являются несколько «RESTful», какой будет приемлемый алгоритм их группировки, чтобы 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-адресов заранее ничего не известно. В моем примере это было бы несколько легко, поскольку идентификаторы явно числовые. В идеале я хотел бы, чтобы алгоритм работал хорошо, даже если идентификаторы не числовые (как в http://www.example.com/products/rocket и http://www.example.com/products/ufo).

Это просто попытка сказать: «Учитывая эти URL-адреса, я сгруппировал их, удалив, как мне кажется,« переменную »часть идентификатора URL».

Ответы [ 2 ]

1 голос
/ 01 августа 2011

У Ализы правильная идея, вы хотите искать «точки сочленения» (в 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.Это действительно сводится к вопросу об этом - это часть URL-адреса дескриптора REST или параметр.Если мы знаем, что представляют собой все дескрипторы, остальные являются параметрами, и все готово.

Дайте достаточно большой набор данных, мы бы хотели посмотреть статистику всех URL на каждой глубине.например, / x / y / z / t /.Мы будем подсчитывать количество вхождений в каждом слоте и генерировать большую общую таблицу распределения вероятностей.

Теперь мы можем посмотреть на распределение символов.Высокий счет в слоте означает, что это скорее всего параметр.Мы начинаем снизу, ищем события условной вероятности, т. Е. Какова вероятность того, что x будет foo, тогда какова вероятность того, что y будет чем-то заданным x, и т. Д. И т. Д.систематический способ их извлечения, но это похоже на многообещающее начало

1 голос
/ 01 августа 2011

разделить каждый URL на массив строк с разделителем '/'

например. http://www.example.com/foo/1/edit даст массив [http:,www.example.com,foo,1,edit]

если два массива (URL-адреса) имеют одинаковое значение во всех индексах, кроме одного, они будут в одной группе.

например. 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 во втором массиве. Поэтому URL-адреса принадлежат к одной группе.

Легко видеть, что URL, такие как http://www.example.com/foo/3 и http://www.example.com/foo/1/edit, не будут принадлежать к той же группе в соответствии с этим алгоритмом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...