'Returns a `Zone` object.
:param domain: Zone domain name, (e.g. example.com).
:type domain: ``str``
:param type: Zone type (master / slave).
:type  type: ``str``
:param ttl: TTL for new records. (optional)
:type  ttl: ``int``
:param extra: (optional) Extra attributes (driver specific).
(e.g. {\'serverip\':\'127.0.0.1\'})'

def create_zone(self, domain, type='master', ttl=None, extra=None):

    extra = (extra or {})
    if (extra and extra.get('serverip')):
        serverip = extra['serverip']
    params = {'api_key': self.key}
    data = urlencode({'domain': domain, 'serverip': serverip})
    action = '/v1/dns/create_domain'
    zones = self.list_zones()
    if self.ex_zone_exists(domain, zones):
        raise ZoneAlreadyExistsError(value='', driver=self, zone_id=domain)
    self.connection.request(params=params, action=action, data=data, method='POST')
    zone = Zone(id=domain, domain=domain, type=type, ttl=ttl, driver=self, extra=extra)
    return zone
