Refactor different request types into separate classes and implement ability to POST