Monday, March 14, 2016

Consuming a Jira REST API

Leave a Comment

I would like to consume a Jira REST API, but have been unsuccessful.

The Jira site gives the following request URL:

curl -D- -u fred:fred -X POST --data {see below} -H "Content-Type: application/json" http://localhost:8090/rest/api/2/issue/  

And this is the json array, which is located on a file called collector.json:

"fields": [             {                 "project":                         {                             "key": "ATL"                         },                 "summary": "REST ye merry TEST.",                 "description": "Creating of an issue using project keys and issue type names using the REST API",                 "issuetype": {                                 "name": "Task"                              }             }         ] 

}

The following is the code:

<?php include_once "collector.php";  $jiraValues = jsonArray("collector.json"); $jira_url = "http://jira.howareyou.org:8091/rest/api/2/issue/createmeta"; $jiraString = json_encode($jiraValues);  $request = curl_init($jira_url); // initiate curl object curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1) curl_setopt($request, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);  curl_setopt($request, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($request, CURLOPT_ENCODING, ""); curl_setopt($request, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($request, CURLOPT_RETURNTRANSFER, true); curl_setopt($request, CURLOPT_POSTFIELDS, $jiraString); // use HTTP POST to send form data curl_setopt($request, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response. curl_setopt($request, CURLOPT_URL, $jira_url);  $json_raw = curl_exec($request); // execute curl post and store results in $json_raw  curl_close($request); // close curl object  // This line takes the response and breaks it into an array using the specified delimiting character $jira_response = json_decode($json_raw, TRUE);  print_r($jira_response); 

When I run it, Nothing happens. I get no feedback.

I found it here, and replaced the information with my valid information.

1 Answers

Answers 1

Firstly define some helpful globals to help :

define('JIRA_URL', 'http://jira.howareyou.org:8091'); define('USERNAME', ''); define('PASSWORD', ''); 

Then we need to define a post method :

function post_issue($data) {     $jdata = json_encode($data);     $ch = curl_init();     curl_setopt_array($ch, array(         CURLOPT_POST => 1,         CURLOPT_URL => JIRA_URL . '/rest/api/2/issue/createmeta' . $resource,         CURLOPT_USERPWD => USERNAME . ':' . PASSWORD,         CURLOPT_POSTFIELDS => $jdata,         CURLOPT_HTTPHEADER => array('Content-type: application/json'),         CURLOPT_RETURNTRANSFER => true     ));     $result = curl_exec($ch);     curl_close($ch);     return json_decode($result); } 

Then how we want to use it is like so :

Create a new issue

$new_issue = array(     'fields' => array(         'project' => array('key' => 'TIS'),         'summary' => 'Test via REST',         'description' => 'Description of issue goes here.',         'priority' => array('name' => 'Blocker'),         'issuetype' => array('name' => 'Task'),         'labels' => array('a','b')     ) ); 

Call our previously made function passing in the new issue :

$result = post_issue($new_issue); if (property_exists($result, 'errors')) {     echo "Error(s) creating issue:\n";     var_dump($result); } else {     echo "New issue created at " . JIRA_URL ."/browse/{$result->key}\n"; } 

A basic example of posting a new issue via REST

Note: The Jira API URL may need to be configured slightly

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment