code: def similar_artists(self, artist_id: str) -> List[NameExternalIDPair]:
          
          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
docs: 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.