request abstraction