docs: def _rest_request_to_json(self, instance, url, object_path, query_params, tags=None):
          """
          Query the given URL and return the JSON response
          """
          if object_path:
              url = self._join_url_dir(url, object_path)
  
          # Add query_params as arguments
          if query_params:
              query = '&'.join(['{}={}'.format(key, value) for key, value in iteritems(query_params)])
              url = urljoin(url, '?' + query)
  
          auth = None
  
          # Authenticate our connection to JMX endpoint if required
          kerberos = instance.get('kerberos')
          username = instance.get('username')
          password = instance.get('password')
          if username is not None and password is not None:
              auth = (username, password)
          elif kerberos is not None:
              if kerberos not in KERBEROS_STRATEGIES:
                  raise Exception('Invalid Kerberos strategy `{}`'.format(kerberos))
  
              auth = requests_kerberos.HTTPKerberosAuth(
                  mutual_authentication=KERBEROS_STRATEGIES[kerberos],
                  delegate=is_affirmative(instance.get('kerberos_delegate', False)),
                  force_preemptive=is_affirmative(instance.get('kerberos_force_initiate', False)),
                  hostname_override=instance.get('kerberos_hostname'),
                  principal=instance.get('kerberos_principal'),
              )
  
          disable_ssl_validation = instance.get('disable_ssl_validation', False)
  
          old_keytab_path = None
          if 'kerberos_keytab' in instance:
              old_keytab_path = os.getenv('KRB5_CLIENT_KTNAME')
              os.environ['KRB5_CLIENT_KTNAME'] = instance['kerberos_keytab']
  
          self.log.debug('Attempting to connect to "{}"'.format(url))
  
          try:
              response = requests.get(
                  url, auth=auth, timeout=self.default_integration_http_timeout, verify=not disable_ssl_validation
              )
              response.raise_for_status()
              response_json = response.json()
  
          except Timeout as e:
              self.service_check(
                  self.JMX_SERVICE_CHECK, AgentCheck.CRITICAL, tags=tags, message="Request timeout: {}, {}".format(url, e)
              )
              raise
  
          except (HTTPError, InvalidURL, ConnectionError) as e:
              self.service_check(
                  self.JMX_SERVICE_CHECK, AgentCheck.CRITICAL, tags=tags, message="Request failed: {}, {}".format(url, e)
              )
              raise
  
          except JSONDecodeError as e:
              self.service_check(
                  self.JMX_SERVICE_CHECK,
                  AgentCheck.CRITICAL,
                  tags=tags,
                  message='JSON Parse failed: {}, {}'.format(url, e),
              )
              raise
  
          except ValueError as e:
              self.service_check(self.JMX_SERVICE_CHECK, AgentCheck.CRITICAL, tags=tags, message=str(e))
              raise
  
          else:
              return response_json
  
          finally:
              if old_keytab_path is not None:
                  os.environ['KRB5_CLIENT_KTNAME'] = old_keytab_path