impl convenience methods
add on_request hook
add test case