Split the runRequest logic in two with generateRequest

so that custom subclasses for `BaseRestTool` can easily plug there logic