REST
Web 服务入门
代表性状态传输(REpresentational
State Transfer,REST)是一种专门针对分布式超媒体系统的体系结构样式,比如说万维网(World
Wide
Web)。REST架构的中心思想就是通过统一资源标识符(URI)来识别资源。可以使用标准接口(比如说HTTP)来操作这些资源,并且可以使用这些资源的表示来交换信息。在本教程中,我们首先将学习一些关于REST的知识,然后将讨论
NetBeans IDE
6.1 对这种体系结构风格的支持。
目录
要学习本教程,您需要使用以下技术和资源。
Tomcat 和
GlassFish 都可以与
NetBeans IDE 的
Web & Java
EE 发行版一起安装。或者,您可以访问 GlassFish
下载页面
和 Apache
Tomcat 下载页面 。
简介
REST Web
服务即使用 REST
体系结构风格构建的服务。由于其轻量的特性并且支持直接通过
HTTP 传输数据,使用
REST 方式构建
Web
服务作为一种新兴趋势已经开始替代传统的 Web
服务构建方式,即使用基于 SOAP
的技术在互联网上部署服务。
IDE 支持使用
JSR 311(Java
API for REST 风格的 Web 服务,JAX-RS)和
Jersey(JAX-RS
的参考实现)快速开发 REST
Web 服务。
有关详细信息,请参阅以下内容:
除了构建 REST
Web 服务之外,IDE
还支持测试和构建可访问 REST
Web 服务的客户机应用程序,并可生成调用 Web
服务的代码(同时支持 REST
和基于 SOAP
的 Web
服务)。
下面列出了 IDE
所提供的 REST
特性:
通过 JPA
实体类和模式快速创建 REST
Web 服务。
通过拖放 REST
组件面板中的组件快速生成可调用各种 Web
服务的代码,比如说 Google
Map、Yahoo
News Search 和 StrikeIron
Web 服务。
通过 REST
Web 服务生成 JavaScript
客户桩(client
stub),用于构建 REST
客户机应用程序。
生成测试客户机用于测试 REST
Web 服务。
通过逻辑视图方便地导航到项目中的 REST
Web 服务实现类。
在本教程中,我们将介绍如何通过 IDE
生成、实现和测试 REST
Web 服务。
通过数据库生成实体类
本练习的目标是创建一个项目并通过数据库生成实体类。
选择“文件”>“新建项目”。在“类别”列表中,选择“Web”。在“项目”列表中,选择“Web
应用程序”并单击“下一步”按钮。
在“项目名称”字段中,输入
CustomerDB 。
在“服务器”列表中,选择一个服务器,如
GlassFish。单击“完成”按钮。
打开“服务”选项卡。在“数据库”列表中,右键单击“Java
DB”并启动它。
右键单击
CustomerDB
节点并选择“新建”>“从数据库创建实体类”。或者,可以在“新建文件”向导(Ctrl-N)的“持久性”类别中选择它。
在“数据库表”面板中,从“源”下拉菜单中选择
jdbc/sample
数据源。
注意: 在 Tomcat
上,此数据源可能不存在。在本例中,从“数据源”下拉列表中选择“新建数据源”。这将打开“创建数据源”对话框。在“JNDI
名称”字段中键入
jdbc/sample。从“数据库连接”下拉列表中,选择
jdbc:derby://hostname:1527/sample
[app on APP]。单击“确定”按钮。对话框将关闭,您将返回“数据库表”面板。另外参阅
NetBeans IDE 6.0 教程:Tomcat 上的 REST 风格服务 。
在“可用表”下,选择
CUSTOMER
并单击“添加”按钮。DISCOUNT_CODE
表(与 CUSTOMER
表有关联)将自动添加到“选定表”列表中。现在您应该看到以下内容:
单击“下一步”按钮。
在“包”字段中,输入
customerdb 。现在您应该看到以下内容:
单击“创建持久单元”按钮。将出现以下对话框:
单击“创建”按钮,然后单击 Finish
按钮。
查看“项目”窗口。现在您应该看到以下内容:
通过实体类生成
REST 风格的 Web 服务
本练习的目标是使用在上一节中生成的实体类来生成 REST
Web 服务。
右键单击包含实体类原包并选择“新建”>
“通过实体类创建 REST
Web 服务”。
在“通过实体类创建
REST
Web 服务”向导中,单击“添加所有”按钮。当实体类出现在“选定实体类”字段中之后,单击“下一步”按钮。
在下一个面板中,保留各选项为默认值,如下图所示:
在该界面中,我们可以看到 IDE
将生成的一切内容。IDE
将使用容器-项目模式生成资源类。比如说,对于
Customer
实体类,IDE
将生成一个 CustomersResource
资源类,并生成一个 CustomerResource
项目资源。此外,对于各个资源类,IDE
将生成一个转换器类用于通过相应的实体实例生成资源表示,比如说
CustomersConverter
和 CustomerConverter。而且,另外还有一个称作引用转换器的转换器类(比如说
CustomerRefConverter),可用于表示关系。
单击“完成”按钮。
查看“项目”窗口。此时,IDE
应如下所示:
“项目”窗口中的 RESTful
Web 服务s 节点将显示项目中的所有 REST
Web 服务。方括号中间的值,比如说 [/customers/] ,表示
URI
模板的值。通过双击此节点还可以导航到源代码文件。该视图还显示了所有的
HTTP 方法
和子资源定位器(Sub-resource
locator)方法。还是一样,通过双击这些节点可以导航各个方法。
我们已经生成了实体类和 REST
Web 服务。接下来,我们将测试应用程序。IDE
提供了一个极具实用性的工具,用于测试 REST
Web 服务。我们将在下一节中演示该工具的使用。
测试
REST 风格的 Web 服务
本练习的目标是测试刚才所创建的应用程序。
右键单击项目节点并选择“测试
REST Web
服务”。此时将会启动服务器并部署应用程序。当部署完成后,浏览器将显示应用程序,其中含有到各
Web
服务的链接:
位于左侧的是根资源集合。此处,它们的名称为
customers
和 discountCodes 。
首先,选择一个根资源,比如说 customers 。单击“方法”下拉列表并选择
GET(application/xml)
或 GET(application/json)
选项。单击“测试”按钮。测试结果将显示在“测试输出”部分中:
“测试输出”区域含有 4
个选项卡。Tabular
View 是一个平面视图,其中显示了结果文档中的所有
URI。通过单击这些链接可以导航到结果文档中的相应位置。Raw
View 视图将显示返回的实际数据。根据所选择的 Mime
类型(application/xml
或 application/json ),所显示的数据将分别采用
XML 或
JSON
格式。Headers
Tab 将显示 HTTP
报头信息。另一个选项卡是 HTTP
Monitor,它显示所发送和接收到的 HTTP
请求及响应。
退出浏览器并返回 IDE。
添加
Google Map 功能
本练习的目标是在我们的 REST
Web 服务中添加 Google
地图功能。
在编辑器中打开
CustomerResource
类。
将以下方法添加到 CustomerResource :
@GET
@ProduceMime("text/html")
public String getGoogleMap() {
// Drag and drop the getGoogleMap operation here
return "";
}
//Gets invoked by going to browser and accessing any customer (ie /customers/1/googleMap)
/**
* Returns sub-resource.
*/
@Path("googleMap/")
@GET
@ProduceMime("text/html")
public String getGoogleMapResource() {
return getGoogleMap();
}
注册
Google map
密钥:http://www.google.com/apis/maps/signup.html 。Google
map 密钥请求对话框提供了一个网站
URL
字段。在该字段中键入
http://localhost:8080 。
在 IDE
中,打开“服务”选项卡并展开“Web
服务”节点。在“Web
服务”下面,展开“Google”节点。然后,再展开“地图服务”节点。
将 getGoogleMap
项目拖放到您在 步骤
2
中创建的 getGoogleMap
方法的主体的 return
= null; 代码行之前。这将打开“定制
getGoogleMap
SAAS”对话框。接受默认选项并单击“确定”按钮。
IDE 将在
CustomerResource
类的 getGoogleMap
方法 中添加以下
try 代码块:
@Path("googleMap/")
@GET
@ProduceMime("text/html")
public String getGoogleMap() {
try {
String address = "16 Network Circle, Menlo Park";
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
//TODO - Uncomment the print Statement below to print result.
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
IDE
还将在项目中创建以下类和资源:
将 getGoogleMap
方法的 try
代码块替换为以下内容:
@Path("googleMap/")
@GET
@ProduceMime("text/html")
public String getGoogleMap() {
try {
Customer c = getEntity();
String address = c.getAddressline1() + " " + c.getAddressline2() + " " +
c.getCity() + " " + c.getState() + " " + c.getZip();
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
return result.getDataAsString();
//TODO - Uncomment the print Statement below to print result.
//System.out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
打开
googlemapserviceauthenticator.properties 。将
api_key
属性设置为 在
步骤
3
中从 Google
获取的 API
密钥。
打开“服务”选项卡并启动应用服务器。
右键单击
CustomerDB
项目节点并选择“测试
REST Web
服务”。IDE
将取消并重新部署您的项目到服务器上,然后打开含测试客户机的浏览器窗口。
单击左侧边栏中的
customers 。 customers
的测试标准将在主窗格中打开。保留默认选项不变,单击“测试”按钮。这将打开一个用户表。
从表中选择一个用户,如
customer1。单击该用户。该用户
的测试标准将在主窗格中打开。从下拉列表中,选择 text/html
MIME 类型。单击“测试”按钮。该地址的
GoogleMap
将在原视图中打开。
注意: 如果 GoogleMaps
无法找到地址,它将显示放大的海洋视图。
您可以将 URL
替换为
http://localhost:8081/CustomerDB/resources/customers/2/googleMap ,
.../3/googleMap (依此类推,一直到
25),查看所有用户的地图地址。
将反馈发送给我们
更多信息
有关使用 NetBeans
IDE 6.0 开发 Java
EE 应用程序的更多信息,请参见以下资源:
要发送意见和建议,获取支持,了解关于 NetBeans
IDE Java EE 开发特性的最新发展,请加入
nbj2ee
@
netbeans.org
邮件列表 。