If a user wants to implement their own request object they should be able to use that to make a request. Right now the concrete class shipped with the package is required. Need to refactor request methods to require abstract classes to make this possible.