Para o seu exemplo, eu criaria dois controladores:
- Sessions Controller para Login e Logout (criar e destruir sessão para REST como layout)
- Controlador de arquivos para tudo em arquivos (índice = search e create = upload)
Em geral, uma abordagem RESTful em que você pensa em tudo como um recurso que pode ser exibido, criado, editado e destruído, dá a você uma boa idéia de como estruturar as coisas. Como você pode ver nos meus exemplos, eu não fico muito perto de cada verbo no REST.
Você provavelmente precisaria de mais controladores para obter mais funcionalidades. Por exemplo, um controlador de usuários, onde os usuários podem criar novas contas. Além disso, você precisará de uma interface de administração na qual possa editar os recursos com privilégios mais altos. Nesse caso, é bastante comum ter quase todos os controladores duplicados.
Uma estimativa muito aproximada para obter uma ideia inicial pode ser um controlador para cada tabela em seu banco de dados que os usuários podem acessar. Mas isso é realmente apenas uma medida muito grosseira.