Как спроектировать RESTful с кросс-моделью? - PullRequest
0 голосов
/ 27 января 2012

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

Вот моя модель:

  • Пользователь: включает имя, адрес электронной почты, номер телефона…etc
  • Продукт: включает его название, теги и категорию, к которой он относится.(Я разработал два типа категорий: MainCategory и SubCategory, где подкатегория принадлежит MainCategory).

Теперь у меня есть следующие потребности относительно продукта:

  1. Список всех продуктов вГлавнаяКатегория M
  2. Список всех продуктов в Главной категории M и подкатегории S
  3. Список всех продуктов, принадлежащих пользователю A
  4. CRUD с продуктом с product_id

Вот мой вопрос о ситуации выше:

  1. Перечислите все товары в MainCategory M
    • , я должен использовать / products / M или / MainCategory / M, чтобы перечислить все товары?
  2. Перечислите все продукты в основной категории M и подкатегории S
    • я должен использовать / products / M / S или другими способами?
  3. Список всех продуктов, принадлежащих пользователю A
    • мне следует использовать / user / A / products или / products /? User = A или другими способами?
  4. CRUDс продуктом с pid (product_id)
    • это правильно?/ product / pid

Кроме того, что делать, если мне нужно отсортировать или добавить некоторые ограничения?Например:

  • Перечислите все товары в главной категории M, упорядочите по времени
    • Это / products / M? Order = time_asc?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 27 января 2012

Прежде всего, у вас есть основные ресурсы:

/users/{id}
/products/{id}

Отношения между этими двумя должны быть по ссылкам, так как имеет смысл подумать либо без ссылки на другое (пользователи не принадлежат продуктам, либо наоборот ). Используйте обычные методы CRUD для работы с этими ресурсами и учитывайте подресурсы для сложных атрибутов.

Тогда у вас есть система категоризации. Это также хорошо смоделировано как ресурс:

/category/{name}
/category/{name}/{subname}

Ключевым отличием здесь является то, что вам не нужно поддерживать никакие операции, кроме GET для категорий; информация там (список членов категории) действительно синтезируется из окончательной информации о продуктах. Там, где вы хотите разрешить людям ограничивать набор информации, возвращаемой списком (например, ограниченный диапазон, другой порядок), который выполняется с помощью параметров в GET. Список членов категории должен быть списком ссылок на ресурсы соответствующего продукта.

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

...