def _build_base_url(self, host, port):
        """Return the API base URL string based on ``host`` and ``port``.

        It returns a valid URL when ``host`` isn't. The endling slash is always
        removed so it always need to be added by the consumer.
        """
        parsed = urlparse(host)
        if not parsed.scheme:
            parsed = parsed._replace(scheme="http")
            parsed = parsed._replace(path="")
            netloc, parts = host, host.partition(":")
            if parts[1] == "" and port is not None:
                netloc = "{}:{}".format(parts[0], port)
            parsed = parsed._replace(netloc=netloc)
        parsed = parsed._replace(path=parsed.path.rstrip("/"))
        return parsed.geturl()
Return the API base URL string based on ``host`` and ``port``.

        It returns a valid URL when ``host`` isn't. The endling slash is always
        removed so it always need to be added by the consumer.