use built-in query string parsing
move router to its own file
use built-in query parsing in router
make helper methods for router
split api response validation from header handling
split request code from router
more router refactoring
use partial application of arguments for responding