docs: async def _make_request(self, method: str, url: str, url_vars: Dict[str, str],
                              data: Any, accept: str,
                              jwt: Opt[str] = None,
                              oauth_token: Opt[str] = None,
                              ) -> Tuple[bytes, Opt[str]]:
          """Construct and make an HTTP request."""
          if oauth_token is not None and jwt is not None:
              raise ValueError("Cannot pass both oauth_token and jwt.")
          filled_url = sansio.format_url(url, url_vars)
          if jwt is not None:
              request_headers = sansio.create_headers(
                  self.requester, accept=accept,
                  jwt=jwt)
          elif oauth_token is not None:
              request_headers = sansio.create_headers(
                  self.requester, accept=accept,
                  oauth_token=oauth_token)
          else:
              # fallback to using oauth_token
              request_headers = sansio.create_headers(
                  self.requester, accept=accept,
                  oauth_token=self.oauth_token)
          cached = cacheable = False
          # Can't use None as a "no body" sentinel as it's a legitimate JSON type.
          if data == b"":
              body = b""
              request_headers["content-length"] = "0"
              if method == "GET" and self._cache is not None:
                  cacheable = True
                  try:
                      etag, last_modified, data, more = self._cache[filled_url]
                      cached = True
                  except KeyError:
                      pass
                  else:
                      if etag is not None:
                          request_headers["if-none-match"] = etag
                      if last_modified is not None:
                          request_headers["if-modified-since"] = last_modified
          else:
              charset = "utf-8"
              body = json.dumps(data).encode(charset)
              request_headers['content-type'] = f"application/json; charset={charset}"
              request_headers['content-length'] = str(len(body))
          if self.rate_limit is not None:
              self.rate_limit.remaining -= 1
          response = await self._request(method, filled_url, request_headers, body)
          if not (response[0] == 304 and cached):
              data, self.rate_limit, more = sansio.decipher_response(*response)
              has_cache_details = ("etag" in response[1]
                                   or "last-modified" in response[1])
              if self._cache is not None and cacheable and has_cache_details:
                  etag = response[1].get("etag")
                  last_modified = response[1].get("last-modified")
                  self._cache[filled_url] = etag, last_modified, data, more
          return data, more