实现这个解决方案需要不同的组件。最明显的部分是一个能够向顾客显示的购物车接口和通过REST或SOAP连接到Amazon的代码,除此之外,还需要一些辅助的部分。在接收一个XML文档后,代码必须解析它,并且提取购物车将要显示的信息。要满足Amazon的要求并且提高性能,必须考虑缓存机制。最后,由于付费结账操作必须在Amazon完成,需要一些能够向Amazon提交用户购物车内容以及将用户提交给该服务的功能。
很明显,我们需要创建一个购物车作为系统的前台。在第28章中已经介绍了如何创建一个购物车。由于购物车并不是该项目的主要部分,我们将使用一个简化的应用程序。我们只需要提供一个基本的购物车,这样就可以记录客户想要购买哪些产品,并且在用户结账时将这些产品报告给Amazon。
33.2.1 使用Amazon的Web服务接口
要使用Amazon(亚马逊)的Web服务接口,我们需要注册一个开发人员令牌。可以在http://aws.amazon.com站点完成开发人员的注册。当请求到达Amazon站点时,这个令牌可以用在站点上标识开发人员本身。
我们可能还会希望注册一个Amazon会员ID。当任何客户通过我们的接口在Amazon购买产品时,通过这个ID,Amazon会给我们返回一些现金奖励。
http://developer.amazonwebservices.com/提供的Amazon Web服务(AWS)开发人员资源中心包含了大量关于使用SOAP和REST连接Amazon所有Web服务的文档、教程以及示例代码。本章给出的示例程序将生成一个可用的系统,并且提供连接AWS并获取信息的基本知识,但是如果你打算构建一个类似本章的应用,你就应该花些时间阅读这些文档。例如,你可能希望通过浏览和直接搜索接口搜索并获得不同商品的信息。根据所需元素的不同,所返回的数据也有不同的结构。AWS开发人员指南给出了所有这些信息。
提示 另一个有价值的资源是AWSZone.com(http://www.awszone.com)。在这个网站上,你可以测试SOAP和REST查询,并且了解请求以及响应的结构,这样你就可以知道如何处理返回的数据。此外,测试响应可以有助于确定确切的ResponseGroup对象,从而获得最佳的速度。
在注册开发人员令牌时,你必须同意这个许可协议。这个协议值得一读,因为它不是普通的软件协议。在实现时,许可的某些条件还是非常重要的,这些条件如下所示:
■作为客户端,每秒钟不能发出多个请求。
■必须缓存来自Amazon的数据。
■可以24小时缓存大多数数据,而一些稳定属性可以缓存至3个月。
■如果缓存价格或库存信息超过1小时,必须提供一些声明。
■必须将本地所拥有的所有Amazon数据链接到Amazon站点的页面,严禁将从Amazon下载的文本或图形链接至其他商业网站。
由于没有一个拼写简单的域名,没有推广政策以及其他使用Tahuayo.com的明显理由,所以我们还是直接使用Amazon网站,我们不需要采取任何特殊的措施来保障每秒不超过一个的请求。
在这个项目中,我们已经实现了缓存技术来保障协议条件的第2至4点。我们可以将图像缓存24小时,而产品数据(包含了价格信息和库存信息)则缓存1小时。
我们的应用程序也遵循该协议的第5点。我们希望主页上的产品链接到我们站点的详细信息页面,而且只有当完成交易时才链接到Amazon站点。