/**
  *	Request
  *	@param requestMethod
  *	@param requestEndpoint
  *	@param requestBody
  *	@return VOID
  */
 public function request($requestMethod, $requestEndpoint, $requestBody = NULL, $requestHeaders = [])
 {
     if (!$requestMethod || !$requestEndpoint) {
         throw new \InvalidArgumentException("Missing Arguments");
     }
     $this->addHeaders($requestHeaders);
     if (Router::isDev()) {
         ob_start();
         \pre_r($requestMethod, $requestEndpoint, $requestBody, $this->getAllHeaders());
         $apiLog = ob_get_contents();
         ob_end_clean();
         error_log($apiLog);
     }
     $c = curl_init();
     curl_setopt($c, CURLOPT_URL, $requestEndpoint);
     curl_setopt($c, CURLOPT_TIMEOUT, 30);
     curl_setopt($c, CURLOPT_USERAGENT, 'touchbase-php-library/2.0');
     curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($c, CURLINFO_HEADER_OUT, true);
     curl_setopt($c, CURLOPT_HTTPHEADER, $this->getAllHeaders());
     curl_setopt($c, CURLOPT_CUSTOMREQUEST, strtoupper($requestMethod));
     curl_setopt($c, CURLOPT_POSTFIELDS, $requestBody);
     curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
     $this->_lastResponse = curl_exec($c);
     $this->_lastResponseStatus = curl_getinfo($c, CURLINFO_HTTP_CODE);
     $this->_lastResponseContentType = curl_getinfo($c, CURLINFO_CONTENT_TYPE);
     $curlError = curl_error($c);
     if ($curlError) {
         throw new \RuntimeException(is_string($curlError) ? $curlError : "Something Terrible Happened!");
     }
     return $this->_lastResponse;
 }