Сопоставление ресурсов в URL-адресе Ruby on Rails (RESTful API) - PullRequest
6 голосов
/ 11 апреля 2010

Мне трудно найти правильный ответ на этот вопрос, поэтому я решу свою проблему здесь. Я работаю над RESTFul API. Естественно, у меня есть несколько ресурсов, некоторые из которых состоят из родительских и дочерних отношений, некоторые из которых являются автономными ресурсами. Где у меня возникли некоторые трудности, так это выяснить, как сделать вещи проще для людей, которые будут создавать клиентов на основе моего API.

Ситуация такая. Гипотетически у меня есть ресурс «Улица». На каждой улице несколько домов. Итак, улица: имеет множество домов и домов: принадлежит улице. Если пользователь хочет запросить HTTP GET для определенного домашнего ресурса, должно работать следующее:

http://mymap/streets/5/homes/10

Это позволяет пользователю получать информацию для дома с идентификатором 10. Прямо вперед. У меня вопрос, нарушаю ли я правила книги, предоставляя пользователю доступ к:

http://mymap/homes/10

Технически, этот домашний ресурс существует сам по себе без улицы. имеет смысл , что он существует как его собственная сущность без инкапсулирующей улицы, хотя бизнес-логика говорит об обратном.

Какой лучший способ справиться с этим?

EDIT! В духе того, чтобы стать хорошим гражданином StackOverflow, я вернулся с поддерживаемым блоком кода для того, как реализовать их выше.

map.resources :streets,
              :has_many => :homes
              :shallow => true

Это создаст оба типа маршрутов, которые я искал.

Ответы [ 3 ]

5 голосов
/ 11 апреля 2010

Если ваши Домашние записи могут принадлежать только одной Улице, тогда отношения не будут перепутаны, когда вы проверяете Дом индивидуально. Вы по-прежнему сможете вернуться к соответствующей записи Street по любой причине.

Это в ситуациях, когда у вас есть отношения многие-ко-многим, когда определение вашей структуры REST может привести к неприятностям. Если конкретная запись имеет смысл только в определенном контексте, и вы удаляете этот контекст, очевидно, существует путаница.

Я думаю, что в вашем конкретном случае вам, возможно, не нужно реализовывать оба подхода, вместо этого используйте более «плоский» подход, который уменьшает сложность URL.

0 голосов
/ 11 апреля 2010

Мне действительно нравится этот подход. Я рекомендую прочитать это. Вкратце, в этой статье говорится, что вы не должны вкладывать свои ресурсы более чем на 1 уровень. И если возможно, что вложенный ресурс может быть очищен, то сделайте это.

В одном из моих приложений я действительно испортил вложенные ресурсы. Я иду на глубину 3 или 4, и это становится кошмаром ...

Вложение действительно хорошо, если оно делает вещи проще. Если нет, откажись!

0 голосов
/ 11 апреля 2010

Нет, именно так работают и используются мелкие маршруты.

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