【问题标题】:Migrating from Rally API 1.43 to 2.0 - Object Model从 Rally API 1.43 迁移到 2.0 - 对象模型
【发布时间】:2014-02-28 18:29:50
【问题描述】:

我继承了一些使用 Rally Java API v1.43 来查询 Rally、创建和更新故事的自定义 Java 代码。据我了解,我们使用 Here 描述的 wsdl2java 为 Rally Object 模型创建了 Java 类。我们的代码自始至终大量使用这些类。

现在我必须升级到 Rally v2.0 API,我不明白我是否可以轻松利用基于这些具体类的已有代码,或者我是否需要重写所有内容以直接使用 JSON使用 JsonObject 之类的东西从 Rally 返回,或者按照 v2.0 API 文档中的说明直接生成 JSON 有效负载。

我找到了大量关于如何使用 v2.0 REST API 进行操作的示例,如果我从头开始,这些示例可能会有所帮助。有没有更好的方法从 v1.43 过渡到 v2.0?

谢谢

【问题讨论】:

    标签: java json rally


    【解决方案1】:

    这里有两个问题:

    1. 从 SOAP 转换到 REST
    2. 从旧版本的 WS API 转换到 v2.0。

    从 SOAP 转换到 REST:

    确实我们不再支持 SOAP 和 xml,而且 v2.0 也没有 WSDL。

    没有标准的重构路径:使用 SOAP 接口的旧代码需要使用 REST 接口重新编写,通常是从头开始。我们有一个 Rally Java REST 工具包,在 this github repository 中可用。

    从旧版本的 WS API 转换到 v2.0:

    就从 1.43 到 v2.0 的过渡而言,主要区别在于集合的处理方式。

    在 v2.0 中,出于性能原因,我们删除了在同一响应中返回子集合的功能。在 v2.0 中,获取集合将返回一个对象,其中包含计数和从中获取集合数据的 url。 AppSDK2rc1 适用于 WS API v2.0。

    在旧版本的 WS API 中,某些 fetch 列表会创建大量递归调用,并且 fetch 中包含的所有集合都会使调用变得非常昂贵。在 WS API v2.0 中这不会发生,因为必须进行单独的调用才能获取集合的对象。

    下面的代码片段都是 REST 示例,但展示了如何重构代码以升级到 v2.0。

    假设您要检索与测试集关联的测试用例。

    而不是这个(在 1.43 中有效,因为返回了集合):

    int numberOfTestCases = testSetJsonObject.get("TestCases").getAsJsonArray().size();
    if(numberOfTestCases>0) {
        for (int j=0;j<numberOfTestCases;j++) {
           System.out.println(testSetJsonObject.get("TestCases").getAsJsonArray().get(j).getAsJsonObject().get("FormattedID"));
        }
    }
    

    这样做:

    //TestCases is an object with a Count and a ref to load the collection
    int numberOfTestCases = testSetJsonObject.getAsJsonObject("TestCases").get("Count").getAsInt();
    
    if(numberOfTestCases > 0) {
        QueryRequest testCaseRequest = new QueryRequest(testSetJsonObject.getAsJsonObject("TestCases"));
        testCaseRequest.setFetch(new Fetch("FormattedID"));
        //load the collection
        JsonArray testCases = restApi.query(testCaseRequest).getResults();
        for (int j=0;j<numberOfTestCases;j++){
            System.out.println(testCases.get(j).getAsJsonObject().get("FormattedID").getAsString());
        }
    }
    

    另一个常见的区别是在 v.2.0 中,自定义字段以 c_ 开头。自定义 KanabanState 字段在 WS API v2.0 中被引用为 c_KanbanState。

    最后,在 v2.0 中更新和创建请求需要额外的身份验证层。但是,只要您使用 Rally Java REST Toolkit,您就不必担心它。 Takeit 在幕后完成,您无需编写请求安全令牌并维护会话的代码。

    【讨论】:

    • 我相信我们使用的是 1.43 REST API,但是已经将对象模型作为类导入到我们的 Java 项目中,并使用它们来创建 Rally 对象,我相信当我们调用REST API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2018-08-15
    • 2015-10-17
    相关资源
    最近更新 更多