Returns zero or more similar artists (in the form of artist name - external ID pairs)
        to the one corresponding to the given artist ID.

        Arguments:
            artist_id ([str]): The Spotify ID of the artist for whom similar artists are requested.

        Returns:
            Zero or more artist name - external ID pairs.

        Raises:
            requests.HTTPError: If an HTTP error occurred during the request.
            SpotifyClientError: If an invalid item is found.

def similar_artists(self, artist_id: str) -> List[NameExternalIDPair]:
        """
        Returns zero or more similar artists (in the form of artist name - external ID pairs)
        to the one corresponding to the given artist ID.

        Arguments:
            artist_id ([str]): The Spotify ID of the artist for whom similar artists are requested.

        Returns:
            Zero or more artist name - external ID pairs.

        Raises:
            requests.HTTPError: If an HTTP error occurred during the request.
            SpotifyClientError: If an invalid item is found.
        """
        response: requests.Response = requests.get(
            self._API_URL_TEMPLATE.format("artists/{}/related-artists".format(artist_id)),
            headers={"Authorization": "Bearer {}".format(self._token.access_token)}
        )

        # TODO: handle API rate limiting

        response.raise_for_status()
        if not response.text:
            return []

        result: List[NameExternalIDPair] = []
        data: List[Dict] = response.json()["artists"]
        for artist in data:
            artist = NameExternalIDPair(artist["name"], artist["id"])
            if artist.name is None or artist.external_id is None:
                raise SpotifyClientError("Name or ID is missing")
            result.append(artist)

        return result