Рестлет, маршрутизация, кошмар? - PullRequest
2 голосов
/ 16 апреля 2011

Хорошо, это смешно: (или, вероятно, мой дизайн:)

Вот URL-адреса, которые мы используем:


/{projectName}/{wallName}        - GET only: fetch all win conditions posted to the all
/{projectName}/WinCondition      - POST a new Win Condition
/{projectName}/WinCondition/{id} - GET, PUT & DELETE

Теперь забавная часть:

Если код указан выше, вызов POST: /myProject/WinCondition направляется на первый маршрут с помощью wallName!И, таким образом, получите 405.

Если я сдвину /{projectName}/{wallName} на дно, то он будет правильно маршрутизирован!

Теперь вот что я знаю:

  • режим маршрутизации по умолчанию в Restlet - MODE_FIRST_MATCH.Я установил это в MODE_BEST_MATCH, и порядок URL-адресов по-прежнему имеет значение!Я не могу получить доступ к баллу «сходство», чтобы проверить, в чем проблема / балл.Режим соответствия - Template.MODE_EQUALS.

Тогда возникает вопрос: нужно ли мне интересоваться, как я упорядочиваю URL-адреса в моем Java-файле ????Это будет страшно, даже с точки зрения обслуживания.

Есть предложения?Должен ли я изменить дизайн моих URL?Но «структура» все еще имеет тенденцию быть той же самой, приводя к той же самой проблеме

1 Ответ

4 голосов
/ 20 апреля 2011

"/ {projectName} / {wallName}" и "/ {projectName} / WinCondition" получат одинаковую оценку как для FIRST_MATCH, так и для BEST_MATCH, поэтому он по-прежнему будет первым в списке маршрутов, который победит.

Но это действительно побочный эффект, который вы не должны ввязываться вообще.Проблема в том, что, похоже, вы предлагаете два маршрута двум разным классам ресурсов для одного и того же URI (например, "/myProject/WindCondition").

. Вам действительно следует подумать о том, чтобы изменить URI, чтобы предотвратить такой конфликт.Вот предложение:

  • / {имя_проекта} / wall / {имя_стены}
  • / {имя_проекта} / winCondition
  • / {имя_проекта} / winCondition / {id]

В противном случае, если вас пугает использование порядка маршрутов, можно настроить логику маршрутизации по умолчанию для учета целевого метода для оценки.

...