从Rally API 1.43迁移到2.0 – 对象模型

我inheritance了一些使用Rally Java API v1.43查询Rally,创建和更新故事的自定义Java代码。 据我了解,我们使用wsdl2java为Rally对象模型创建了Java类, 这里将对此进行描述。 我们的代码大量使用这些类。

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

我已经找到了很多关于如何使用v2.0 REST API做的事情的例子,如果我从头开始可能会有所帮助。 有没有更好的方法从v1.43过渡到v2.0?

谢谢

这里有两个问题:

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

从SOAP过渡到REST:

实际上我们不再支持SOAP和xml,并且v2.0没有WSDL。

没有标准的重构路径:使用SOAP接口的旧代码需要使用REST接口重新编写,通常是从头开始。 我们有一个Rally Java REST Toolkit,可以在这个github存储库中找到 。

从旧版WS API过渡到v2.0:

至于从1.43过渡到2.0版,主要区别在于如何处理集合。

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

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

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

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

而不是这个(它在1.43中工作,因为返回了集合):

int numberOfTestCases = testSetJsonObject.get("TestCases").getAsJsonArray().size(); if(numberOfTestCases>0) { for (int j=0;j 

做这个:

 //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 

另一个常见的区别是在v.2.0中自定义字段前面加上c_。 WS API v2.0中将自定义KanabanState字段引用为c_KanbanState。

最后,在v2.0中更新和创建请求需要额外的身份validation层。 但是,只要您使用Rally Java REST Toolkit,就不必担心它。 takeit在场景后面做了,你不需要编写请求安全令牌并维护会话的代码。