def _execute(self, method_function, method_name, resource, **params):
        """
        Generic TeleSign REST API request handler.

        :param method_function: The Requests HTTP request function to perform the request.
        :param method_name: The HTTP method name, as an upper case string.
        :param resource: The partial resource URI to perform the request against, as a string.
        :param params: Body params to perform the HTTP request with, as a dictionary.
        :return: The RestClient Response object.
        """
        resource_uri = "{api_host}{resource}".format(api_host=self.api_host, resource=resource)

        url_encoded_fields = self._encode_params(params)

        headers = RestClient.generate_telesign_headers(self.customer_id,
                                                       self.api_key,
                                                       method_name,
                                                       resource,
                                                       url_encoded_fields,
                                                       user_agent=self.user_agent)

        if method_name in ['POST', 'PUT']:
            payload = {'data': url_encoded_fields}
        else:
            payload = {'params': url_encoded_fields}

        response = self.Response(method_function(resource_uri,
                                                 headers=headers,
                                                 timeout=self.timeout,
                                                 **payload))

        return response
Generic TeleSign REST API request handler.

        :param method_function: The Requests HTTP request function to perform the request.
        :param method_name: The HTTP method name, as an upper case string.
        :param resource: The partial resource URI to perform the request against, as a string.
        :param params: Body params to perform the HTTP request with, as a dictionary.
        :return: The RestClient Response object.