Construct an url for the given parameters.

        Parameters
        ----------
        name: str
            Nested middleware's name separated by dots.
        base: :class:`.Middleware`
            Base middleware to start searching from.
        query: dict
            Query string data.
        match: dict
            Path parameters.

        Returns
        -------
        str
            Constructed url.

def url(self, name, *, base=None, query=None, **match):
        """Construct an url for the given parameters.

        Parameters
        ----------
        name: str
            Nested middleware's name separated by dots.
        base: :class:`.Middleware`
            Base middleware to start searching from.
        query: dict
            Query string data.
        match: dict
            Path parameters.

        Returns
        -------
        str
            Constructed url.
        """
        if base is None:
            base = self.service
        for name in name.split('.'):
            base = base[name]
        pattern = self.__get_pattern(base.path)
        url = pattern.format(**match)
        if query is not None:
            url += '?' + urlencode(query)
        return url