allow user to return used http.ResponseWriter
add supported media type check
show unsupported media type error
seperate user provider to another file
add some tests