Прежде всего, у вас есть основные ресурсы:
/users/{id}
/products/{id}
Отношения между этими двумя должны быть по ссылкам, так как имеет смысл подумать либо без ссылки на другое (пользователи не принадлежат продуктам, либо наоборот ). Используйте обычные методы CRUD для работы с этими ресурсами и учитывайте подресурсы для сложных атрибутов.
Тогда у вас есть система категоризации. Это также хорошо смоделировано как ресурс:
/category/{name}
/category/{name}/{subname}
Ключевым отличием здесь является то, что вам не нужно поддерживать никакие операции, кроме GET для категорий; информация там (список членов категории) действительно синтезируется из окончательной информации о продуктах. Там, где вы хотите разрешить людям ограничивать набор информации, возвращаемой списком (например, ограниченный диапазон, другой порядок), который выполняется с помощью параметров в GET. Список членов категории должен быть списком ссылок на ресурсы соответствующего продукта.
Если вы поддерживаете категоризацию пользователей, выделите это как отдельный ресурс и позаботьтесь о том, чтобы добавить соответствующие ограничения безопасности; Только уполномоченные люди должны видеть подобные вещи.