abstract request controller