当前位置: 代码迷 >> Web前端 >> REST开发框架及示范
  详细解决方案

REST开发框架及示范

热度:131   发布时间:2013-01-27 13:55:24.0
REST开发框架及示例

? ? ? REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

REST 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。 如果考虑使用它的 Web 服务的数量,REST 近年来已经成为最主要的 Web 服务设计模型。 事实上,REST 对 Web 的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的接口设计。
REST(Representational State Transfer)是 Roy Fielding 提出的一个描述互联系统架构风格的名词。为什么称为 REST?Web 本质上由各种各样的资源组成,资源由 URI 唯一标识。浏览器(或者任何其它类似于浏览器的应用程序)将展示出该资源的一种表现方式,或者一种表现状态。如果用户在该页面中定向到指向其它资源的链接,则将访问该资源,并表现出它的状态。这意味着客户端应用程序随着每个资源表现状态的不同而发生状态转移,也即所谓 REST。

REST 要求开发人员显式地使用 HTTP 方法,并且使用方式与协议定义一致。 这个基本 REST 设计原则建立了创建、读取、更新和删除(create, read, update, and delete,CRUD)操作与 HTTP 方法之间的一对一映射。 根据此映射:

  • 若要在服务器上创建资源,应该使用 POST 方法。
  • 若要检索某个资源,应该使用 GET 方法。
  • 若要更改资源状态或对其进行更新,应该使用 PUT 方法。
  • 若要删除某个资源,应该使用 DELETE 方法。

?

目前宣称支持REST的Java框架包括以下这些:?
Restlet(http://www.restlet.org/)?
Cetia4(https://cetia4.dev.java.net/)?
Apache Axis2(http://http://ws.apache.org/axis2/)?
sqlREST(http://sqlrest.sourceforge.net/)?
REST-art(http://rest-art.sourceforge.net/)?

下面以Restlet框架为例,介绍REST开发的方法

1. 修改web.xml 增加servlet 配置项和?<context-param>?配置项

? <context-param>

? ? ? ?<param-name>org.restlet.application</param-name>

? ? ? ?<param-value>org.lifeba.ws.app.RestSimpleApplication</param-value>

? ? </context-param>

? ??

? <!--

? ?<context-param>

? ? ? ?<param-name>org.restlet.component</param-name>

? ? ? ?<param-value>org.lifeba.ws.app.RestComponent</param-value>

? ? </context-param>

?-->

?

<servlet>

<servlet-name>RestletServlet</servlet-name>

<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>

</servlet>

?

<servlet-mapping>

<servlet-name>RestletServlet</servlet-name>

<url-pattern>/rest/*</url-pattern>

</servlet-mapping>

2. 所有的应用类都必须继承自org.restlet.Application

public class RestSimpleApplication extends org.restlet.Application

3. 在应用类的createInboundRoot()方法中增加路由信息

@Override

? ? public Restlet createInboundRoot() {

? ? ? ? Router router = new Router(getContext());?

? ? ? ? router.attach("/student/{studentId}", StudentResource.class);

? ? ? ? router.attach("/student", StudentsResource.class);

? ? ? ? return router; ?

? ? }

4. 资源类继承自org.restlet.resource.ServerResource

5. 启动Server,访问 http://localhost:9080/RESTApp/students 可以看到所有学生信息。

http://localhost:9080/RESTApp/student/1 ? 显示ID=1的student

http://localhost:9080/RESTApp/add.jsp ?增加学生

http://localhost:9080/RESTApp/update.jsp 更新学生信息。

?