(一)JIRA API 对接

摘要:
系统应与JIRA接口,将系统数据发送给JIRA,并将JIRA数据返回给系统。经过长时间的研究,我们发现,实际上,我们只需要将原始数据作为json数据提供给jira接口,而jira接口就会产生问题。jira的API中存在许多项目创建和创建问题。我们在网上找到了6.1 API。根据这个文档,我们可以检查它是get还是post,需要什么类型的json文件,以及返回值是什么。Prokey=“+Prokey,”。

系统要跟JIRA对接,将本系统数据发送给jira,jira数据返回给本系统。

开始一头雾水怎么让数据传过去已什么形式存在,是存数据库呢还是怎么显示呢。研究半天发现其实只要将原数据作为json数据提供给jira接口,jira接口进行创建issue。

但前提在于要先创建项目。

jira的API 有很多有创建项目的,创建问题等。在线找到了6.1版本的API,根据这个文档可以查看是get还是post,需要哪种类型的json文件,返回值是什么。https://docs.atlassian.com/DAC/rest/jira/6.1.html

了解了jira的api开始写本系统的接口,jira使用的是restful的接口,所以很好调用。

第一步使用了soapui将数据格式先调通,而在工具下发现了很多问题,但都有一定的返回值,详细描述了错误。原因1:json文件的错误;原因2:没有给定权限。

怎么解决呢?1.json格式先查看json格式在看内容。2.返回权限问题时,想到添加个header然后加个cookies。

所以在调用接口是先调用取cookies的接口,添加到header中,然后创建issue。

string seesionsjson =HttpPost("Post","xxxxx:8080/rest/auth/1/session", postuser, "");

string issueNumber = HttpPost("Post", "xxxxxx/rest/api/2/issue", postBody, seesionsjson);

public string HttpPost(string type, string url, string body, stringheader)
{
try{
Encoding encoding =Encoding.UTF8;
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.ProtocolVersion =HttpVersion.Version10;
request.Method =type;
request.Accept = "text/html, application/xhtml+xml, */*";
request.ContentType = "application/json";
if (header != "")
{
JObject obj =(JObject)JsonConvert.DeserializeObject(header);
string ss = obj["session"]["name"].ToString() + "=" + obj["session"]["value"].ToString();
request.Headers.Add("Cookie", ss);

}
byte[] buffer =encoding.GetBytes(body);
request.ContentLength =buffer.Length;

request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response =(HttpWebResponse)request.GetResponse();

using (StreamReader reader = newStreamReader(response.GetResponseStream(), Encoding.UTF8))
{
returnreader.ReadToEnd();
}
}
catch(Exception ex)
{
return "";
}
}

在调通接口之后,jira中会创建相关的问题,问题类型为story或者task或者自定义的类型。

再说一下自定义的问题类型如何通过接口来创建该问题类型的问题。

首先要先在jira中创建问题类型,再分配给项目。然后通过 xxx/rest/api/2/issuetype 接口查看自定义问题类型的id,找到id即可。

从jira拿数据返回给本系统:

使用httpget方法与post类似,若需要登录后取值给定header值。

public string HttpGet(string Url, stringheader)
{
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
if (header != "")
{
JObject obj =(JObject)JsonConvert.DeserializeObject(header);
string ss = obj["session"]["name"].ToString() + "=" + obj["session"]["value"].ToString();
request.Headers.Add("Cookie", ss);
}
HttpWebResponse response =(HttpWebResponse)request.GetResponse();

Stream myResponseStream =response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString =myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
returnretString;
}

在使用类中

string IssueJson= a.HttpGet("xxx:8008/jira/getissue?prokey=" + prokey, "");该接口是自己开发,大量数据已整理。(jira自带的接口可用/rest/api/2/search?jql=project=prokey  取相应的值)

通过将json数据反序列化成对象,json中有数组为list,对象与json数据的字段相同。json如{"a":"1","b":"2","c":[{"d":"3"},{"e":"4","f":[{"g":"5"}]}]}

var jo = JsonConvert.DeserializeObject<T>(IssueJson);
List<T> aa= new List<T>();

for (int k = 0; k < jo.Issues.Count; k++)
{ 
for (int i = 0; i < jo.Issues[k].Moduls.Count; i++)
{ 
for (int j = 0; j < jo.Issues[k].Moduls[i].Functions.Count; j++)
{
T ad = newT();
ad.ChildSystem =jo.Issues[k].ChildSystem;
ad.ModulName =jo.Issues[k].Moduls[i].ModulName;
ad.FunctionName =jo.Issues[k].Moduls[i].Functions[j].FunctionName;
ad.ARID =ARID;
ad.IsDelete = 0;
aa.Add(ad);
}
}
}
returnaa;

 

public classT
{
public List<T> Issue { get; set; }
public string code { get; set; }
public string message { get; set; }
}

另一种json格式:[{"d":"3"},{"e":"4","f":[{"g":"5"}]}]

var jo = JsonConvert.DeserializeObject<List<T>>(IssueJson);

ps:jira插件的研究

在jira中创建成功后,jira中的展示。

研究了下jira的插件structure,可以将需求以下拉的形式展示,下载插件版本,然后在jira的插件中add-to插件的jar包,之后添加license,否则无法出现插件。还有一个情况如果版本过高或过低会导致页面刷不出来,再去下载个版本一致的即可,就会出现此页面。

(一)JIRA API 对接第1张

可进行自动也可以手动添加。手动添加使用add-》search&add拖动即可。

自动则点automation,添加规则。添加

(一)JIRA API 对接第2张

一个小错误:在开发完成后部署到测试环境,发现永远调不通,咋回事,报500错,原来是环境没部署全。全量发布一版正常了。

免责声明:文章转载自《(一)JIRA API 对接》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何设置CentOS 7开机自动获取IP地址详解flowable流程中心设计之会签(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spring装配bean的三种方式及其混合装配

在spring容器中装配bean有三种基本方式和混合装配方式: 隐式的bean自动发现机制和自动装配 在java中进行显式配置 在xml中配置 混合装配(在多个java文件中配置、在JavaConfig中引用XML配置、在XML中引用JavaConfig配置) 一、使用自动化方式装配bean示例: 1:创建maven项目并引入依赖: <?xml...

hadoop26----netty,多个handler

k客户端: package cn.itcast_03_netty.sendorder.client; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; im...

20、Windows内核函数(1)Windows驱动开发详解笔记,字符串

1、字符串 1)两种字符串,一种是char型,记录ansi字符集。每个字符一个字节。以0标志结束。在KdPrint中用%s输出。 宽字符型,wchar_t,描述unicode字符集的字符串,每个字符两个字节,以0标志结束。通过L来体现。在KdPrint中用%S输出。 如CHAR *string = "Hello"; WCHAR *string2 = L"...

Switch重构处理

public class Fun{         public void IFNumberid(int flag)          {               switch (flag)          {         case 1:...

在asp.net webform中的 gridview 里面的一些基本操作

<body> <form runat="server"> <table cellspacing="0" cellpadding="0" border="0"> <tr> <td> <asp:Panel runat="server" CssClass="buttonContainer" Wr...

Web前端开发工程师编程能力飞升之路

【背景】 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧;如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧;如果你是四五年的前端开发高手,没有难题能难得住你的寂寞高手,来看这篇文章吧; web前端研发工程师,在国内是一个朝阳职业,自07-08年正式有这个职业以来,也不过三四年的时间。这个领域没有学校的正规教育,没有...