Skip to end of banner
Go to start of banner

Generic HTTP request

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

A function that combines multiple HTTP request functions into a single, reusable function that can be used with any request.

This function is best used as a include file so it can be reused across multiple SIL script files. The _httpResult struct is used to return all the info/data needed about the call including, if the call was successful or if it failed, what the failure message is, and any data returned from the call.

Note: This script stores the username and passwords being called by this function in a global variable so that this sensitive data is not stored in the script. For more information about these global variables call Persistent Variables see this page.

struct _httpResult {
    boolean success;
    string message;
    string data;
}

string serverUser = getPersistentVar("serverUser");
string serverPass = getPersistentVar("serverPass");

string cloudUser= getPersistentVar("cloudUser");
string cloudPass = getPersistentVar("cloudApiToken");

string authString = "Basic " + base64Encode(cloudUser + ":" + cloudPass);

function generateRequest(string type) {
    HttpRequest request;
    HttpHeader header = httpCreateHeader("Content-Type", "application/json");
    request.headers += header;
    
    if(type == "SERVER") {
        HttpHeader authHeader = httpBasicAuthHeader(serverUser, serverPass);
        request.headers += authHeader;
    } else {
        HttpHeader header2 = httpCreateHeader("Authorization", authString);
        request.headers += header2;
    }
    return request;
}

function genericRestCall(string url, string method, string data, HttpRequest request) {
    
    _httpResult result;
    
    if(method == "GET") {
        result.data = httpGet(url, request);
    } else if (method == "PUT") {
        result.data = httpPut(url, request, data);
    } else if (method == "DELETE") {
        result.data = httpDelete(url, request, data);
    } else if (method == "PATCH") {
        result.data = httpPatch(url, request, data);
    } else {
        result.data = httpPost(url, request, data);
    }
    
    number statusCode = httpGetStatusCode();
    if (statusCode >= 200 && statusCode < 300) {
        result.success = true;
    }
    else {
        string msg = "URL: " + url + " <br /> {" + trim(statusCode) + " : " + httpGetErrorMessage() + " : " + httpGetReasonPhrase() + "}";
        result.success = false;
        result.message = msg;
    }
    return result;
}

Example Use

include "Includes/genericRest.incl";

_httpResult result = genericRestCall(jiraUrl+"/rest/api/3/issue/"+key+"/properties", "GET", "", generateRequest("CLOUD"));

if(result.success == true) {
    myCustomStruct = fromJson(result.data);
    //do something with the returned data
} else {
    runnerLog(data.message);
    //call failed, initiate self destruct sequence
}
  • No labels