This, the searchArtist, searchLyrics functions only differ by the last parameter in the last call (searchArtist, searchSong, etc.), while the get* functions have all the same structure (extract params from request, validate values, call internal method).

Have you guys looked into ways of avoiding all the duplication and boilerplate this approach adds?