MVC: RESTful маршрутизация с вложенными URL, когда сущности не являются действительно вложенными - PullRequest
3 голосов
/ 02 декабря 2009

Мне действительно тяжело с RESTful-парадигмой + вложенные URL-адреса. Я задал вопрос, который привел меня туда, где я сейчас нахожусь здесь . Мой домен примерно такой: есть школы, курсы школы и учителя школ. Теперь школы, курсы и учителя не являются «вложенными» сущностями в том смысле, что вы можете ссылаться на любой из них с одним идентификатором. Сайт представляет собой набор «микросайтов» для каждой школы с указанием курсов и учителей каждого из них. Курс или учитель могут существовать только в одной школе.

скажем, у нас есть URL-адрес типа / schools / 1 / courses / 10. Курс 10 из школы 1. Это отлично работает. Скажем, что пользователь вручную меняет 10 на 11, что, по-видимому, существует, но это курс для школы 2. Сейчас это приводит к путанице, мой сайт все еще «думает», что пользователь находится в школе 1, но показывает курс 3 как часть это.

Должен ли я сделать детальные действия параметрическими как для запрашиваемого идентификатора, так и для «родительского» объекта (в данном случае школы), к которому оно относится? Получить из репозиториев не только по идентификатору, но и по школьным ограничениям?

Или есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Должен ли я сделать подробные действия Параметрический для обоих Id спрашивается для И "родительской" сущности ( школа в данном случае) что в ней задействовано? Получить из репозиториев не только по id но с школьным ограничением?

Да.

Or is there any better way to do this?

Ничего плохого в том, что вы описали выше.

1 голос
/ 03 февраля 2011

Я бы подумал об этом так; даже если к вашим услугам может быть курс 11, в URI /hools / 1 / courses / 11 нет ресурса. Поскольку в этом URI нет ресурса, я бы возвратил ответ HTTP 404 на запросы для URI.

Одним из способов улучшения обслуживания является замена значений целочисленного идентификатора именами объектов (для этого необходимо, чтобы имена были уникальными). Это сделает ваши URI более удобными для пользователя. Примером может быть /schools/Hogwarts/courses/Potions.

Чтобы еще больше улучшить свой сервис, вам нужно предоставить пользователям возможность перемещаться по сервису ко всем доступным ресурсам. Например, вы, вероятно, захотите позволить им получить список всех курсов, предлагаемых определенной школой. Для этого вы должны предоставить ресурс в /hools / Hogwarts / courses /, тип возврата которого будет список всех курсов, предлагаемых школой. Представлением этого списка может быть XML-документ, подобный следующему фрагменту:

<courses>
    <course uri="/schools/hogwarts/courses/defense+against+the+dark+arts">Defense against the dark arts</course>
    <course uri="/schools/hogwarts/courses/potions">Potions</course>
</courses>
0 голосов
/ 20 июня 2011

Вы можете сделать это с помощью универсального маршрута, а затем самостоятельно проанализировать элементы url.

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