async def METHOD_NAME(self, client_uri: str,
                          request: Request,):
    try:
        request_data = await request.json()
        resource_handler = request_data.get('resource_handler')
        method_name = request_data.get('method_name')
        args = request_data.get('args')
        self._verify_resource_handler(resource_handler, client_uri)
        args = decode_tree(utils.unpack_args(base64.b64decode(args)))
        checked_args = []
        for arg in args:
            if isinstance(arg, utils.ResourceObject):
                handler = arg.storage['handler']
                self._verify_resource_handler(handler, client_uri)
                checked_args.append(self.resource_pool[handler][1].ref)
            else:
                checked_args.append(arg)
        resource = self.resource_pool[resource_handler][1].ref
        if method_name.endswith('.setter'):
            attr_name = method_name.split('.')[0]
            setattr(resource, attr_name, checked_args[0])
            result = None
        else:
            attr = getattr(resource, method_name)
            if callable(attr):
                result = attr(*checked_args)
            else:
                result = attr
        return StreamingResponse(utils.pack_stream(encode_tree(result)))
    except Exception as e:
        logger.debug(f'Caught exception {e}. Sending response 400.')
        return JSONResponse({
            'exception': utils.build_exception(e),
        }, status_code=400)