Refactor Requests to builders

Use more polymorphism and manage special cases into the type instead of branching conditionally