zoukankan      html  css  js  c++  java
  • (一)JIRA API 对接

    系统要跟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, string header)
    {
    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 = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
    {
    return reader.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, string header)
    {
    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();
    return retString;
    }

    在使用类中

      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 = new T();
    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);
    }
    }
    }
    return aa;
    
     
    
    public class T
    {
    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,否则无法出现插件。还有一个情况如果版本过高或过低会导致页面刷不出来,再去下载个版本一致的即可,就会出现此页面。

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

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

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

  • 相关阅读:
    POJ 1426 Find The Multiple (DFS / BFS)
    C++的class的样例
    HDU 5063 Operation the Sequence(暴力 数学)
    VmWare 与 宿主主机通信 STEP BY STEP (适用于刚開始学习的人)
    Pig源代码分析: 简析运行计划的生成
    Extjs, 使用GridPanel出现 Layout run failed
    Codeforces #258 Div.2 E Devu and Flowers
    pat(A) 2-06. 数列求和(模拟摆竖式相加)
    javaWeb Cache技术――OSCache(转-全)
    108句个性搞笑签名 (转)
  • 原文地址:https://www.cnblogs.com/yokiblogs/p/10653342.html
Copyright © 2011-2022 走看看