面向Java开发人员的Scala指南 - 用Scitter更新******* - 编程入门网
(method)
(method.getStatusLine().getStatusCode(), method.getResponseBodyAsString())
}
面向Java开发人员的Scala指南 - 用Scitter更新*******(3)时间:2010-12-04 IBM Ted Newardexecute() 方法最大的变化是引入了 Map[String,String] 参数,以及与它 的大小有关的 “if” 测试。该测试决定是处理 GET 请求还是 POST 请求。由 于 Apache Commons HttpClient 要求 POST 请求的主体放在 NameValuePairs 中,因此我们使用 foreach() 调用遍历 map 的元素。我们以二元组 pr 的形式 传入 map 的键和值,并将它们分别提取到本地绑定变量 k 和 v,然后使用这些 值作为 NameValuePair 构造函数的构造函数参数。 我们还可以使用 PostMethod 上的 setParameter(name, value) API 更轻松 地做这些事情。出于教学的目的,我选择了清单 3 中的方法:以表明 Scala 数 组和 Java 数组一样,仍然是可变的,即使数组引用被标记为 val 仍是如此。 记住,在实际代码中,对于每个 (k,v) 元组,使用 PostMethod 上的 setParameter(name, value) 方法要好得多。 还需注意,对于 if/else 返回的 “method” 对象的类型,Scala 编译器会 进行 does the right thing 类型推断。由于 Scala 可以看到 if/else 返回的 是 GetMethod 还是 PostMethod 对象,它会选择最接近的基本类型 HttpMethodBase 作为 “method” 的返回类型。这也意味着,在 execute() 方 法的其余部分中,HttpMethodBase 中的任何不可用方法都是不可访问的。幸运 的是,我们不需要它们,所以至少现在没有问题。 清单 3 中的实现的背后还潜藏着最后一个问题,这个问题是由这样一个事实 引起的:我选择了使用 Map 来区分 execute() 方法是处理 GET 操作,还是处 理 POST 操作。如果还需要使用其他 HTTP 动作(例如 PUT 或 DELETE),那么 将不得不再次重构 execute()。到目前为止,还没有这样的问题,但是今后要记 住这一点。 测试 在实施这样的重构之前,先运行 ant test,以确保原有的所有基于 GET 的 请求 API 仍可使用 — 事实确实如此。(这里假设生产 Twitter API 或 Twitter 服务器的可用性没有变化)。一切正常(至少在我的计算机上是这样) ,所以实现新的 execute() 方法就非常容易: 清单 4. Scitter v0.3: endSession
这实在是再简单不过了。 接下来要做的是实现 rate_limit_status API,它有两个版本,一个是经过 验证的版本,另一个是没有经过验证的版本。我们将该方法实现为 Scitter 对 象和 Scitter 类上的 rateLimitStatus,如清单 5 所示: 清单 5. Scitter v0.3: rateLimitStatus
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |