这里有两个问题:
- 从 SOAP 转换到 REST
- 从旧版本的 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 在幕后完成,您无需编写请求安全令牌并维护会话的代码。