访问亚玛逊网站的Web服务

ZDNet软件频道 时间:2003-11-03 作者:ZDNet China |  我要评论()
本文关键词:
随着Web服务在开发者中的日益普及和接受,许多公司正在根据现有的系统将他们的商业模式扩展到Web服务的API方式。在这篇文章里,我们会研究一下亚玛逊网站 (Amazon.com)的API及一个简单的应用。
本文译自Builder.com,未经许可请勿转载 随着Web服务在开发者中的日益普及和接受,许多公司正在根据现有的系统将他们的商业模式扩展到Web服务的API方式。

亚玛逊网站 (Amazon.com) 正在为它庞大数据库提供一个Web服务的API。在这篇文章里,我们会粗略的研究一下这个API并有一个简单的应用,这个应用一个特殊的关键字在数据库中搜索相应的书籍。

开始行动

第一步就是让你的电脑得到亚玛逊网站的Web 服务。为了得到这个API,你要下载Amazon SDK,它里面包括了示例代码和分别以HTML、Word、和PDF格式书写的API文档。

在下载完SDK之后,你必须登记获得一个开发者授权。填写完必要的表格后将授权保存起来以便日后使用。

因为几乎所有的例子都是用Java编写的,我们将另取其道——在.net环境下通过Windows 窗体编写一个简单的应用例子。但是,在我们开始之前,需要建立一个代理类(proxy class)作为雅玛逊网站Web服务的接口。

首先,我们要取得Web服务的WDSL描述文件。下载并在硬盘上保存这个文件。启动Visual Studio 命令提示符方式,得到保存在硬盘上的路径,然后输入下面的命令:

wsdl /l:vb /o:AmazonProxy.vb AmazonWebServices.wsdl

这个指令会产生应用程序需要的调用Web服务代理类。

编写应用程序

启动VS.NET并建立一个新的Windows应用。然后,将上面建立的代理类复制到应用程序所在的文件夹中并且添加到项目中。打开这个代理类而且要注意方法的多样性和它所暴露的其它类。

我们的目的是建立一个包含一个文本框、列表框和三个按钮的窗体,它可以对亚玛逊网站图书数据库执行关键词搜索。把这三个控件托拽到窗体中并根据的想法组织布局。

Listing A 中的代码加入到搜索按钮的单击事件中:

Listing A
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
        If Me.txtSearch.Text = "" Then
            MsgBox("Enter a keyword")
        Else
            ' Switch to the hourglass during processing
            Me.Cursor.Current = Cursors.WaitCursor

            Dim AmazonProxy As New AmazonSearchService()
            Dim KeywordReq As New KeywordRequest()
            Dim ResultsInfo As ProductInfo

            ' Set the keyword property to the textbox text property
            KeywordReq.keyword = Me.txtSearch.Text

            ' type of result expected, lite or heavy
            KeywordReq.type = "heavy"

            ' the token assigned to you
            KeywordReq.devtag = DEV_TOKEN

            ' product category
            KeywordReq.mode = "books"

            ' Specify which page to return
            KeywordReq.page = PageNum

            Try
                ' Execute the webmethod to perform the search
                ResultsInfo = AmazonProxy.KeywordSearchRequest(KeywordReq)
            Catch err As Exception
                MsgBox("Error accessing Amazon.com's Web service. Please try "   
                       + "again")
                Me.Cursor.Current = Cursors.Default
                Return
            End Try

            ' If no results were found, msgbox the user
            If ResultsInfo.Details.Length = 0 Then
                MsgBox("No results found")
            Else
          ' Clear our listbox and populate it with the results of the webmethod
              lstTitles.Items.Clear()
              Dim i As Integer
              For i = 0 To ResultsInfo.Details.Length - 1
               lstTitles.Items.Add(ResultsInfo.Details(i).ProductName.ToString)
              Next
            End If

            ' Reset the cursor
            Me.Cursor.Current = Cursors.Default

        End If

    End Sub

这段代码用来检测是否将有效的值输入到文本框中。假如一个搜索字符串已经输入,鼠标指针变成沙漏来说明程序正在进行。接下来,举例说明这个代理类和由名为KeywordRequestProductInfo而产生的两个类。

现在来通过一些值来设定KeywordRequest以便执行一个有效的搜索。显而易见,将我们已开始是保存的开发者权限(developer token)放到名为DEV_CODE的字符串中,日后用起来更方便。

Mode 属性告诉Web服务只能在书籍类中进行搜索。PageNum 来决定返回的结果如何分页。这个变量作为私有成员变量初始化为1。

接下来,通过 KeywordSearchRequest() 方法并将请求传递给 KeywordRequest 类的一个实例来执行Web服务。返回的结果是一个称为 ProductInfo 的类。返回的每个项目都作为独立的结果保存在Details 类中的属性数组中。

在这一点上,通过检测Details数组的长度来检测是否在ResultsInfo变量里存在结果,并且通过循环将结果显示到listbox控件中。

返回的结果一般被分为10组,为了加入分页功能,在前后翻页的按钮上加入Listing B 中的代码。

Listing B
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
        PageNum += PageNum
        Me.btnSearch_Click(sender, e)
    End Sub

    Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
        If Me.PageNum = 1 Then Exit Sub

        PageNum -= PageNum

        Me.btnSearch_Click(sender, e)
    End Sub

这段代码对PageNum变量的增减取决于哪个按钮被点击,然后手工的调用搜索按钮再次搜索,但是通过不同的页码。

前途光明

这个应用没有什么复杂性,但是它给开发者展示了Web服务的基本的能力和潜力。随着类似这样Web服务的API的出现,我们更多的Web服务会出现并应用起来。



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134