# File lib/fog/softlayer/slapi.rb, line 27
      def self.slapi_request(service, path, options)
        # default HTTP method to get if not passed
        http_method = options[:http_method] || :get
        # set the target base url
        @request_url = options[:softlayer_api_url] || Fog::Softlayer::SL_API_URL
        # tack on the username and password
        credentialize_url(options[:username], options[:api_key])
        # set the SoftLayer Service name
        set_sl_service(service)
        # set the request path (known as the "method" in SL docs)
        set_sl_path(path)
        # set the query params if any


        # build request params
        params = { :headers => user_agent_header }
        params[:headers]['Content-Type'] = 'application/json'
        params[:expects] = options[:expected] || [200,201]
        params[:query] = options[:query] unless options[:query].nil?
        unless options[:body].nil?
          options[:body] = [options[:body]] unless options[:body].kind_of?(Array)
          params[:body] = Fog::JSON.encode({:parameters => options[:body]})
        end

        # initialize connection object
        @connection = Fog::Core::Connection.new(@request_url, false, params)

        # send it
        response = @connection.request(:method => http_method)

        # decode it
        response.body = Fog::JSON.decode(response.body)
        response
      end