Почему пишут что лучше всего ограничиваться ресурсными контроллерами, и, мол, не желательно выходить за предел его стандартных методов? Как тогда писать что-либо кроме примитивного API, где каждый контроллер работает только с 1 сущностью/коллекцией? Как тогда описывать сложную логику приложения с участием множества сущностей?
Это тупо стандартизация. Чем больше в проекте стандарта - тем проще. Естественно, не стоит доходить до абсурда и вообще всё делать ресурсными контроллерами. Но если что-то можно делать стандартными методами - это лучше сделать стандартными методами.