def METHOD_NAME(cls, **kwargs):
    super(BaseWebSocketHandler, cls).METHOD_NAME(**kwargs)
    cls._api_conf, cls._params, cls._transform = {}, {}, {}
    # url, key, max_history can be set as key: xxx or key: {function: handler.args.get('key')}
    for k, v in cls._api_conf_defaults.items():
        cls._set_default(k, kwargs.pop(k, v), lambda x: cls._api_conf.update({k: x}))
    # All API params can be set as as key: xxx or key: {function: handler.args.get('key')}
    for k, v in cls._params_defaults.items():
        cls._set_default(k, kwargs.pop(k, v), lambda x: cls._params.update({k: x}))
    # open, prepare and modify are specified directly as the functions
    for k, vars in cls._transform_vars.items():
        v = {'function': kwargs[k]} if k in kwargs else ''
        cls._set_default(k, v, lambda x: cls._transform.update({k: x}), vars=vars)